Имеет ли значение порядок сопоставления столбцов при объединении нескольких столбцов? - PullRequest
0 голосов
/ 05 октября 2019

Имеет ли значение порядок столбцов, сопоставляемых по веществу?

  1. Сначала присоединяется по коду, а затем по id:
SELECT a.name, a.code, a.OBJECT_NAME, a.id, s.id_WANTED
    FROM table_1 a

RIGHT JOIN s ON
a.code = s.code
AND a.id = s.id_WANTED
Сначала присоединение по id, а затем по коду
SELECT a.name, a.code, a.OBJECT_NAME, a.id, s.id_WANTED
    FROM table_1 a

RIGHT JOIN s ON
a.id = s.id_WANTED
AND a.code = s.code

Ответы [ 2 ]

0 голосов
/ 05 октября 2019

Это не имеет значения, потому что механизм запросов будет реорганизовывать порядок JOIN в зависимости от статистики для индексов и прочего. Добавьте OPTION (FORCE ORDER) к запросу, и вы увидите, что он имеет значение.

Как общее практическое правило, порядок JOIN должен быть с таблицей наименьших записей сверху и таблицы большинства записей имеют значение . Так что производительность будет намного лучше.

0 голосов
/ 05 октября 2019

Короткое замыкание в предложении T-SQL WHERE не гарантируется и на него нельзя положиться, так как оптимизатор может решить оценить его так, как ему хочется ( см. Этот вопрос DBA Stack для канонического ответа ). Примите во внимание, что мы могли бы действительно написать ваш запрос, чтобы логика предложения ON появилась в предложении WHERE (примечание: я не рекомендую написать запрос таким образом):

SELECT a.name, a.code, a.OBJECT_NAME, a.id, s.id_WANTED
FROM table_1 a, table_2 s
WHERE a.id *= s.id_WANTED AND
      a.code *= s.code;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...