2015-04-22 4 views
11

Я не понимаю о разнице между запросами, упомянутыми ниже.Loop Присоединиться к SQL Server 2008

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

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

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); 

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

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

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

Примечание: Это не Вложенные ИЛИ Hash-петли!

+1

документация: [подсказки запроса] (https://msdn.microsoft.com/en-us/library/ms181714.aspx) и [Join Hints] (https://msdn.microsoft.com/en-GB /library/ms173815.aspx) – Tanner

+0

Почему, по вашему мнению, первый подход «самый дорогой, чем все ниже»? – Magnus

+0

Я тестировал его на своем локальном сервере и получил самую высокую разницу! и, разумеется, разница составляла только от +2 до +3 секунд. – Vikrant

ответ

7

От Query Hints (Transact-SQL)

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

также

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

Advanced Query Tuning Concepts

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

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

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

Join Hints (Transact-SQL) И

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

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

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

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

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

Смежные вопросы