Filterkriterien in SQL-Abfragen: Join vs. Where-Klausel
Beim Abfragen von Daten in SQL gibt es zwei gängige Ansätze zum Anwenden von Filterkriterien : die Join-Kriterien und die Where-Klausel. Entwickler kämpfen oft mit der Frage, welcher Ansatz effizienter ist.
Die Frage:
Welche SQL-Abfrage führt schneller aus: eine, die den Filter auf die Join-Kriterien anwendet oder zur Where-Klausel?
Analyse:
Betrachten Sie zwei Abfragen:
Abfrage 1 (Filter nach 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 nach Where-Klausel):
SELECT * FROM TableA a INNER JOIN TableXRef x ON a.ID = x.TableAID AND a.ID = 1 INNER JOIN TableB b ON x.TableBID = b.ID;
Leistungsvergleich:
Empirisch zeigen Tests, dass die Die Where-Klausel ist etwas schneller als die Join-Kriterien. Dies ist kontraintuitiv, da man erwarten könnte, dass die Join-Kriterien die Ergebnismenge früher reduzieren.
Logische Konsistenz:
Berücksichtigen Sie neben der Leistung auch die logische Konsistenz jedes Ansatzes. Durch die Verwendung der Where-Klausel wird sichergestellt, dass die Operation auch dann gültig bleibt, wenn der Join durch einen Left Join ersetzt wird.
Empfohlener Ansatz:
Basierend auf Leistung und logischer Konsistenz Es wird generell empfohlen, Filterkriterien auf das Wo anzuwenden Klausel.
Beispiel:
Betrachten Sie die folgende Abfrage:
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;
Diese Abfrage ist logisch fundiert und funktioniert genauso gut wie die entsprechende Abfrage mit der Filter auf dem Join Kriterien.
Schlussfolgerung:
Während die Join-Kriterien und die Where-Klausel vom Leistungsstandpunkt aus ähnlich funktionieren, ist die Where-Klausel logischerweise konsistenter und daher der bevorzugte Ansatz für die Anwendung Filterkriterien in SQL-Abfragen.
Das obige ist der detaillierte Inhalt vonJOIN vs. WHERE-Klausel zum Filtern: Welche SQL-Abfrage ist schneller?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!