Loop Присоединиться к SQL Server 2008

Я не понимаю о разнице между запросами, упомянутыми ниже.

В частности, я не понимаю концепцию OPTION(LOOP JOIN).

1-й подход: используется традиционное соединение, которое является самым дорогим, чем все ниже.

SELECT * 
FROM [Item Detail] a
LEFT JOIN [Order Detail] b ON a.[ItemId] = b.[fkItemId] OPTION (FORCE ORDER);

Второй подход: Он включает OPTION в оператор с отсортированными данными, просто оптимизированный.

SELECT * 
FROM [Item Detail] a
LEFT LOOP JOIN [Order Detail] b ON a.[ItemId] = b.[fkItemId] OPTION (FORCE ORDER);

3-й подход: Здесь я не понимаю, как работает запрос и включает OPTION с loop join!!?

SELECT * 
FROM [Item Detail] a
LEFT LOOP JOIN [Order Detail] b ON a.[ItemId] = b.[fkItemId] OPTION (LOOP JOIN);

Может ли кто-нибудь объяснить разницу и способ работы и преимущества каждого из них над другим?

Примечание. Это не Вложенные или Hash-контуры!

Ответ 1

Из подсказки запросов (Transact-SQL)

FORCE ORDER Указывает, что порядок соединения, указанный в запросе синтаксис сохраняется при оптимизации запросов. Использование FORCE ORDER делает не влияет на возможное поведение разворота роли оптимизатора запросов.

и

{LOOP | MERGE | HASH} JOIN Указывает, что все операции соединения выполняется LOOP JOIN, MERGE JOIN или HASH JOIN во всем запросе. Если указано более одного намека на соединение, оптимизатор выбирает наименее затратная стратегия объединения из разрешенных.

Расширенные настройки настройки запросов

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

Если два входа соединения не маленькие, но отсортированы по их соединению (например, если они были получены путем сканирования отсортированы индексы), объединение слияния - это операция быстрого соединения.

Соединения хэшей могут эффективно обрабатывать большие, несортированные, неиндексированные входы.

И Join Hints (Transact-SQL)

Присоединительные подсказки указывают, что оптимизатор запросов применяет стратегию объединения между двумя таблицами

Ваша опция 1 сообщает оптимизатору сохранить порядок соединения как есть. Таким образом, тип JOIN может быть определен оптимизатором, поэтому может быть MERGE JOIN.

Вариант 2 говорит оптимизатору использовать LOOP JOIN для этого конкретного JOIN. Если в разделе FROM есть какие-либо другие объединения, оптимизатор сможет их решить. Кроме того, вы указываете порядок запуска JOINS для оптимизатора.

Ваш последний вариант OPTION (LOOP JOIN) будет применять LOOP JOIN для всех соединений в запросе.

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