Heim >Datenbank >MySQL-Tutorial >Ist eine WHERE-Klausel oder ein Join-Kriterienfilter in SQL-Abfragen schneller?
Welche SQL-Abfrage ist schneller: Join-Kriterien oder Where-Klausel?
Diese Frage vergleicht die Leistung zweier Abfragestrukturen: Filtern nach dem Join Kriterien im Vergleich zur Verwendung der WHERE-Klausel. Die allgemeine Annahme ist, dass das Filtern nach den Join-Kriterien schneller ist, da es die Ergebnismenge früher reduziert, aber diese Annahme trifft möglicherweise nicht immer zu.
Abfragevergleich
Lassen Sie uns Untersuchen Sie zwei Abfragen mit identischen Strukturen bis auf die Filterplatzierung:
Abfrage 1 (Filter bei Join Kriterien)
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID WHERE a.ID = 1;
Abfrage 2 (Filter in WHERE-Klausel)
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID INNER JOIN TableB b ON x.TableBID = b.ID AND a.ID = 1;
Leistungstests
Um festzustellen, welche Abfrage schneller ist, wurden Leistungstests durchgeführt. Die Ergebnisse zeigten, dass die Filterung nach der WHERE-Klausel etwas schneller war als die Verwendung der Join-Kriterien. Der Zeitunterschied war minimal:
Logisch Konsistenz
Während die Leistung ein wichtiger Gesichtspunkt ist, ist logische Konsistenz ebenso entscheidend. Die Filterung nach der WHERE-Klausel richtet sich nach der Semantik von Left-Joins. Betrachten Sie die folgenden Abfragen:
Linker Join mit Filter für Join-Kriterien
SELECT * FROM TableA a LEFT JOIN TableXRef x ON x.TableAID = a.ID AND a.ID = 1 LEFT JOIN TableB b ON x.TableBID = b.ID;
Linker Join mit Filter in der WHERE-Klausel
SELECT * FROM TableA a LEFT JOIN TableXRef x ON x.TableAID = a.ID LEFT JOIN TableB b ON b.id = x.TableBID WHERE a.id = 1;
Bei Left-Joins stellt der WHERE-Klauselfilter sicher, dass nur passende Zeilen für eine bestimmte ID zurückgegeben werden, unabhängig davon, ob ob rechtsseitige Verknüpfungen vorhanden sind oder nicht. Dieses Verhalten ist logisch konsistent und leichter zu verstehen.
Fazit
Während der Leistungsunterschied vernachlässigbar ist, ist das Filtern nach der WHERE-Klausel etwas schneller und logisch konsistenter. insbesondere bei der Arbeit mit linken Verknüpfungen. Aus Gründen der Leistung und Lesbarkeit wird daher generell empfohlen, Filter in die WHERE-Klausel einzufügen.
Das obige ist der detaillierte Inhalt vonIst eine WHERE-Klausel oder ein Join-Kriterienfilter in SQL-Abfragen schneller?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!