В T-SQL, что является лучшим дизайном для нескольких INNER JOINs?

63
4

Я искал аналогичную проблему безрезультатно. Если я пропустил решение, приношу свои извинения и прошу указать мне в правильном направлении.

Я играю в MS AdventureWorks и хотел бы знать, есть ли какая-либо функциональная разница между двумя операторами SELECT с использованием INNER JOIN, которые я создал. Они дают те же результаты.

Версия 1

SELECT  pp.BusinessEntityID, pp.FirstName, pp.MiddleName, pp.LastName, pp.Suffix, 
pe.EmailAddress,
pa.AddressLine1, pa.AddressLine2, pa.City, pa.PostalCode FROM
Person.BusinessEntityAddress AS bea
INNER JOIN Person.Address AS pa
ON bea.AddressID = pa.AddressID
INNER JOIN Person.Person AS pp
ON bea.BusinessEntityID = pp.BusinessEntityID
INNER JOIN Person.EmailAddress AS pe
ON pp.BusinessEntityID = pe.BusinessEntityID
WHERE pp.Suffix IS NOT NULL

Версия 2

SELECT      pp.BusinessEntityID, pp.FirstName, pp.MiddleName, pp.LastName, pp.Suffix,
pe.EmailAddress,
pa.AddressLine1, pa.AddressLine2, pa.City, pa.PostalCode
FROM Person.BusinessEntityAddress AS bea
INNER JOIN Person.Address AS pa
ON bea.AddressID = pa.AddressID
INNER JOIN Person.Person AS pp
ON bea.BusinessEntityID = pp.BusinessEntityID
INNER JOIN Person.EmailAddress AS pe
ON bea.BusinessEntityID = pe.BusinessEntityID
WHERE pp.Suffix IS NOT NULL

Единственное различие заключается в последнем предложении ON. Конструктивные схемы выглядят совсем по-другому, хотя любые мысли были бы очень желанными

спросил(а) 2021-01-25T13:43:31+03:00 4 месяца, 4 недели назад
1
Решение
89

Здесь нет разницы, поскольку равенство транзитивно. (*)

Тем не менее, если у вас были ВОДНЫЕ СОЕДИНЕНИЯ, где-то, результат может быть другим.

(*) Я бы рассмотрел план выполнения для обоих, хотя, поскольку планировщик запросов может не быть достаточно умным, чтобы выбрать лучший вариант и, формулируя его по-разному, может быть принужден так или иначе. Вы также можете попробовать бросить лишнее третье равенство. В то время как все они приходят к одному и тому же результату, порядок выполнения объединений может привести к значительному разному времени выполнения.

ответил(а) 2021-01-25T13:43:31+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема