Ответ 1
Из подсказки запросов (Transact-SQL)
FORCE ORDER Указывает, что порядок соединения, указанный в запросе синтаксис сохраняется при оптимизации запросов. Использование FORCE ORDER делает не влияет на возможное поведение разворота роли оптимизатора запросов.
и
{LOOP | MERGE | HASH} JOIN Указывает, что все операции соединения выполняется LOOP JOIN, MERGE JOIN или HASH JOIN во всем запросе. Если указано более одного намека на соединение, оптимизатор выбирает наименее затратная стратегия объединения из разрешенных.
Расширенные настройки настройки запросов
Если одно входное соединение мало (менее 10 строк), а другое соединение вход довольно большой и индексируется в столбцах объединения, индекс вложен объединение циклов - это самая быстрая операция соединения, поскольку они требуют наименьшее количество операций ввода-вывода и наименьшее количество сравнений.
Если два входа соединения не маленькие, но отсортированы по их соединению (например, если они были получены путем сканирования отсортированы индексы), объединение слияния - это операция быстрого соединения.
Соединения хэшей могут эффективно обрабатывать большие, несортированные, неиндексированные входы.
Присоединительные подсказки указывают, что оптимизатор запросов применяет стратегию объединения между двумя таблицами
Ваша опция 1 сообщает оптимизатору сохранить порядок соединения как есть. Таким образом, тип JOIN
может быть определен оптимизатором, поэтому может быть MERGE JOIN
.
Вариант 2 говорит оптимизатору использовать LOOP JOIN
для этого конкретного JOIN
. Если в разделе FROM
есть какие-либо другие объединения, оптимизатор сможет их решить. Кроме того, вы указываете порядок запуска JOINS для оптимизатора.
Ваш последний вариант OPTION (LOOP JOIN)
будет применять LOOP JOIN
для всех соединений в запросе.
Это все говорит, что очень редко оптимизатор выбирает неправильный план, и это, вероятно, должно указывать на более крупные проблемы, такие как устаревшая статистика или фрагментированные индексы.