SomewhereSomehow's Notes

Фильтр по тегу: disable_optimized_nested_loop


USE HINT и DISABLE_OPTIMIZED_NESTED_LOOP

Один из доступных алгоритмов соединения двух таблиц в SQL Server это вложенные циклы (Nested Loops). В зависимости от выбранного оптимизатором порядка соединения таблиц, одна из таблиц выбирается как внешняя (по ней открывается внешний цикл), вторая как внутренняя (для каждой строки из внешней таблицы выполняется внутренний цикл по второй таблице), во время соединения, внутри циклов проверяется условие соединение, такой подход называется «наивный» алгоритм вложенных циклов. Если же по внутренней таблице доступен индекс по условию соединения, то необязательно выполнять внутренний цикл проверки по каждой строке второй таблицы, вместо этого, можно передать в качестве аргумента поиска значение из внешней таблицы, а все строки, что будут найдены во внутренней таблице соединить со строкой из внешней таблицы.

Поиск по внутренней таблице — это случайный доступ, SQL Server начиная с версии 2005 имеет оптимизацию, называемую batch sort (не путать с оператором Sort в Batch Mode для колоночных индексов). Идея оптимизации заключается в том, чтобы перед тем, как получить данные из внутренней таблицы, упорядочить ключи поиска из внешней, превратив тем самым случайный доступ в последовательный.

Читать дальше…
добавлено: 01 фев 17 просмотры: 1103, комментарии: 2