Дополнительные понятия настройки запросов
Microsoft SQL Server выполняет операции сортировки, пересечения, объединения и поиска различий при помощи технологий хэш-соединений и сортировки в оперативной памяти. При выполнении запросов этого типа SQL Server поддерживает вертикальное секционирование таблиц, иногда называемое хранилищем столбцов.
В SQL Server применяются операции соединения трех типов:
Соединения вложенных циклов.
Соединения слиянием.
Хэш-соединения.
Если один вход соединения имеет небольшой размер (менее десяти строк), а другой вход — сравнительно большой и индексирован по объединяемым столбцам, индексное соединение вложенных циклов является самой быстрой операцией объединения, так как для нее потребуется наименьшее количество операций сравнения и ввода-вывода. Дополнительные сведения о вложенных циклах см. в разделе Основные сведения о соединении вложенных циклов.
Если два входа соединения достаточно велики, но отсортированы по соединяемым столбцам (например, если они были получены просмотром отсортированных индексов), то наиболее быстрой операцией соединения будет соединение слиянием. Если оба входа объединения велики и имеют сходные размеры, соединение слиянием с предварительной сортировкой и хэш-соединение имеют примерно одинаковую производительность. Однако операции хэш-соединения часто выполняются быстрее, если два входа значительно отличаются по размеру. Дополнительные сведения см. в разделе Основные сведения о соединениях слиянием.
Хэш-соединения могут эффективно обрабатывать большие, несортированные и неиндексированные входы. Они полезны для получения промежуточных результатов в сложных запросах из-за следующего:
Промежуточные результаты не индексированы (если только они явным образом не сохранены на диске, а затем проиндексированы) и часто отсортированы не так, как требуется для следующей операции в плане запроса.
Оптимизаторы запросов оценивают только размеры промежуточных результатов. Так как для сложных запросов оценки могут быть очень неточны, алгоритмы обработки промежуточных результатов должны быть не только эффективными, но и правильно вырождаться, если объем промежуточных результатов оказался гораздо большим, чем ожидалось.
Хэш-соединение позволяет уменьшить денормализацию. Денормализация обычно используется для получения более высокой производительности при уменьшении количества операций соединения, несмотря на издержки, вызываемые избыточностью данных, например несогласованных обновлений. Хэш-соединения снижают потребность в денормализации и позволяют осуществлять вертикальное секционирование (представляющее группы столбцов, содержащиеся в одной таблице, в отдельных файлах или индексах) в качестве доступной возможности при реализации физической структуры базы данных. Дополнительные сведения см. в разделе Основные сведения о хэш-соединениях.