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.

War es hilfreich?

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
scroll top