Czy jest jakaś różnica (wydajność, najlepsza praktyka itp.) Między umieszczeniem warunku w klauzuli JOIN a klauzuli WHERE?
Na przykład...
-- Condition in JOIN
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
AND CUS.FirstName = 'John'
-- Condition in WHERE
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE CUS.FirstName = 'John'
Który wolisz (a może dlaczego)?
sql
performance
Steve Dignan
źródło
źródło
FROM Orders JOIN OrderParties ON Orders.Id = OrderParties.Order AND OrderParties.Type = 'Recipient' WHERE Orders.Status = 'Canceled'
Odpowiedzi:
Algebra relacyjna umożliwia zamienność predykatów w
WHERE
klauzuli iINNER JOIN
, więc nawetINNER JOIN
zapytania zWHERE
klauzulami mogą przestawiać predykaty przez optymalizator, aby mogły zostać już wykluczone podczasJOIN
procesu.Polecam pisanie zapytań w możliwie najbardziej czytelny sposób.
Czasami obejmuje to uczynienie
INNER JOIN
względnie „niekompletnym” i umieszczenie niektórych kryteriów wWHERE
celu ułatwienia zarządzania listami kryteriów filtrowania.Na przykład zamiast:
Pisać:
Ale to oczywiście zależy.
źródło