TSQL Имеет ли значение порядок предложения on

Для упрощенного запроса:

Select t1.c1, t1.c2, t2.d1
FROM table1 t1
LEFT JOIN table2 t2
ON
(t1.c1 = t2.d2)

Из математики с точки зрения симметричного свойства кажется, что это будет точно так же, как если бы ON было изменено на:

Select t1.c1, t1.c2, t2.d1
FROM table1 t1
LEFT JOIN table2 t2
ON
(t2.d2 = t1.c1)

Всегда ли это истинно в TSQL или есть какое-то исключение, когда можно было бы получить больше строк, если бы запрос был слегка изменен, как описано выше?

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

Кроме того, в дополнение к возвращаемым строкам (которые, я думаю, всегда должны быть ТОЧНО ОДИНАКОВЫМИ для обоих запросов), я полагаю, что один порядок предложения ON может повысить скорость выполнения запроса. Может ли кто-нибудь это проверить?


person JosephDoggie    schedule 20.07.2021    source источник
comment
Интересно, что одним из автоматических предложений от StackOverflow незадолго до того, как я опубликовал это, было: эффективно" title="как я могу эффективно соединить носки из кучи">stackoverflow.com/questions/14415881/ - это, безусловно, выглядит как достойный квест, но на самом деле это не имеет большого отношения к моему вопрос выше! ржу не могу   -  person JosephDoggie    schedule 21.07.2021
comment
См. также вопрос администратора баз данных: with-join" title="правильный ли порядок предложения where не имеет значения, когда он используется с join">dba.stackexchange.com/questions/16477/   -  person JosephDoggie    schedule 21.07.2021
comment
Порядок соединения таблиц имеет значение для результата и производительности. Если вы используете правильный порядок соединения таблиц, это не повлияет на производительность, И предложение on в первом и втором запросе будет работать одинаково. Если вы проверите фактический план запроса и статистику, вы увидите то же самое для обоих запросов. Но если у вас есть предложение where или вы изменили порядок соединения, ваш результат будет другим, как и производительность. установите статистику по использованию, чтобы установить статистику, и вы сможете получить представление о количественных измерениях статистики.   -  person Gudwlk    schedule 21.07.2021
comment
если у вас есть индексы для столбцов соединения, ваша производительность будет лучше, чем для обычных столбцов.   -  person Gudwlk    schedule 21.07.2021
comment
В таблице нет порядка строк. Набор результатов [так в оригинале] имеет (частичный) порядок только для самого внешнего порядка. Также этот вопрос (как и следовало ожидать) является часто задаваемым вопросом. Как и основы оптимизации/реализации запросов. Пожалуйста, изучите вопрос, прежде чем спрашивать. Как спросить Справочный центр PS Бесполезно думать о вещах, на которые нельзя указать в документации.   -  person philipxy    schedule 21.07.2021
comment
Взгляните на фактический план выполнения, чтобы увидеть разницу. (Я бы не ожидал.) Результаты будут идентичными, хотя нет ожидаемого порядка строк без явного предложения order by. Оптимизатор запросов будет использовать индексы (если они есть) и их статистику для определения (вероятного) наилучшего способа выполнения оператора.   -  person HABO    schedule 21.07.2021


Ответы (1)


Как вы заметили, условие ON в любом виде JOIN может быть коммутативным. Вы можете сделать ON a = b или ON b = a, и они будут означать одно и то же. Это не что иное, как логические выражения.

person O. Jones    schedule 21.07.2021