Влияет ли последовательность, в которой мы используем соединение в запросе, на время его выполнения? - PullRequest
2 голосов
/ 16 февраля 2010

Влияет ли последовательность, в которой мы используем соединение в запросе, на время его выполнения?

Ответы [ 4 ]

4 голосов
/ 16 февраля 2010

Нет, это не так.

Оптимизатор

SQL Server выбирает лучший (по его мнению) путь независимо от порядка соединения.

SQL Server поддерживает специальную подсказку, FORCE ORDER, которая заставляет таблицы вести в объединениях в порядке их перечисления.

Эти запросы:

SELECT  *
FROM    t_a
JOIN    t_b
ON      a = b
OPTION (FORCE ORDER)

и

SELECT  *
FROM    t_b
JOIN    t_a
ON      a = b
OPTION (FORCE ORDER)

создаст идентичные планы с опущенным OPTION (FORCE ORDER) и разными планами с добавленным.

Однако этот совет следует использовать только в том случае, если вы абсолютно уверены, что знаете, что делаете.

1 голос
/ 16 февраля 2010

Да, это так. Его эффект можно увидеть в плане выполнения запроса. См. это и это . Другая ссылка здесь

0 голосов
/ 16 февраля 2010

Для внешних объединений порядок таблиц меняет смысл вашего запроса и, скорее всего, изменит план выполнения.

0 голосов
/ 16 февраля 2010

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

...