Filter beitragen oder wo Klauseln TSQL
-
16-10-2019 - |
Frage
Wo soll ich die Filter auf eine TSQL -Abfrage setzen?
SELECT a.colum FROM A
JOIN B ON A.ID = B.ID AND B.STATUS = 1
ODER
SELECT a.colum FROM A
JOIN B ON A.ID = B.ID
WHERE B.STATUS = 1
Ich suche nach Leistungsproblemen oder guten Praktiken.
Lösung
- Es gibt keinen Leistungsunterschied
- Best Practice ist explizite Verbindung und separate Filter (Ihr 2. Beispiel)
Notiz:
Dies ändert sich für äußere Verknüpfungen, weil Sie es in eine innere Verbindung ändern würden
Der schnelle Weg:
SELECT a.colum
FROM
A
LEFT JOIN
B ON A.ID = B.ID AND B.STATUS = 1
WHERE
a.foo = 'bar'
Mit separaten Filtern:
SELECT a.colum
FROM
A
LEFT JOIN
(SELECT * FROM B WHERE STATUS = 1) B ON A.ID = B.ID
WHERE
a.foo = 'bar'
Andere Tipps
Es hängt davon ab, ob. Sie müssen sich den Ausführungsplan für Ihre spezifischen Abfragen ansehen und sehen, welche Abfrage den effizienteren Plan verwendet. Bei Abfragen, die so einfach wie Ihr Beispiel sind, werden die Pläne wahrscheinlich ziemlich ähnlich aussehen. Je komplexer die Abfrage, desto mehr Unterschied werden Sie im Plan sehen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange