SQL - план выполнения. Почему для операции JOIN используется Hash Match? - PullRequest
0 голосов
/ 27 декабря 2018

Быстрый вопрос - почему для следующего запроса используется Hash Match?

BusinessentityID имеет тип Int, и на данный момент я не могу объяснить, почему им нужно использовать хешированиесовсем?

Разве объединение не будет быстрее с таким тривиальным массивом, как структура данных?

Хотя я полагаю, что это имеет смысл в случае, когда в предложении соединения используется другой тип данных, например GUID?

enter image description here

1 Ответ

0 голосов
/ 27 декабря 2018

Как правило, самый быстрый тип join будет использовать индексы.Поэтому, если вы заботитесь о производительности, добавьте индексы на businessentityid.

Объединение слиянием используется, когда данные уже отсортированы.Если это не отсортировано, то сортировка довольно дорогая - O (n log (n)).

В отличие от хеш-соединения, требуется "просто" хеширование значений и сравнение их в ячейках.При многих обстоятельствах это O (n).Конечно, если ваши данные действительно большие или если некоторые значения повторяются много раз, то при хеш-соединении будут проблемы с памятью или коллизии хешей - и сложность алгоритма возрастает.

Ключевой момент, тем не менее,заключается в том, что оптимизатор выбирает алгоритм, который он считает наиболее подходящим для данных.Если производительность является вашим главным фактором, тогда настоятельно рекомендуется индекс.

...