Выбор оператора оптимизатора запросов - вложенные циклы против совпадения хэша (или слияния)

Одна из моих хранимых процедур выполнялась слишком долго. Взглянув на план выполнения запроса, я обнаружил, что операция занимает слишком много времени.Это был физический оператор вложенного цикла, который имел внешнюю таблицу (65991 строку) и внутреннюю таблицу (19223 строки). Во вложенном цикле он показал примерные строки = 1268 544 993 (65991 умножение на 19223), как показано ниже:

enter image description here

Я прочитал несколько статей о физических операторах, используемых для объединений, и немного запутался, лучше ли для этого использовать вложенный цикл или совпадение хэша. кейс. Из того, что я смог собрать:

Hash Match - используется оптимизатором, когда нет доступных полезных индексов, одна таблица значительно меньше другой, таблицы не сортируются по столбцам соединения. Также совпадение хэша может указывать на то, что можно использовать более эффективный метод соединения (вложенные циклы или соединение слиянием).

Вопрос: Будет ли совпадение хэша лучше, чем вложенные циклы в этом сценарии?

Спасибо

21
задан stackoverflowuser 10 December 2011 в 22:27
поделиться