Heim >Datenbank >MySQL-Tutorial >WHERE vs. ON-Klausel in JOIN-Abfragen: Wann sollte ich welche für eine optimale Leistung verwenden?
WHERE-Klausel vs. ON in JOIN-Abfrage: Auswirkungen auf die Leistung
Bei der Verwendung von JOIN-Abfragen in T-SQL steht man häufig vor der Wahl zwischen Platzieren von Filterbedingungen in der WHERE-Klausel oder der ON-Klausel. Obwohl beide Ansätze zum gleichen Ergebnissatz führen können, sind subtile Leistungsunterschiede zu berücksichtigen.
Konkret untersuchen wir die folgende Abfrage:
SELECT * FROM Foo f INNER JOIN Bar b ON (b.BarId = f.BarId); WHERE b.IsApproved = 1;
Im Vergleich zu:
SELECT * FROM Foo f INNER JOIN Bar b ON (b.IsApproved = 1) AND (b.BarId = f.BarId);
Beide Abfragen geben identische Zeilensätze zurück, aber die Leistungsmerkmale unterscheiden sich.
Im Allgemeinen wird die Platzierung von Filtern in der ON-Klausel bevorzugt aus folgenden Gründen:
Es gibt jedoch Fälle, in denen das Platzieren von Filtern in der WHERE-Klausel sinnvoll ist notwendig:
SELECT * FROM Foo f LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId) WHERE (b.IsApproved IS NULL OR b.IsApproved = 1);
Schlussfolgerung:
Wenn die Leistung von Bedeutung ist, sollten Sie eine Platzierung in Betracht ziehen Filterbedingungen in der ON-Klausel, um Join-Vorgänge zu optimieren und die Ergebnismengengröße zu reduzieren. Bei Outer-Joins oder OPTIONAL-Filterung muss die WHERE-Klausel verwendet werden, um die gewünschte Filterung zu erreichen.
Das obige ist der detaillierte Inhalt vonWHERE vs. ON-Klausel in JOIN-Abfragen: Wann sollte ich welche für eine optimale Leistung verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!