Heim > Datenbank > MySQL-Tutorial > Ist eine WHERE-Klausel oder ein Join-Kriterienfilter in SQL-Abfragen schneller?

Ist eine WHERE-Klausel oder ein Join-Kriterienfilter in SQL-Abfragen schneller?

Barbara Streisand
Freigeben: 2025-01-01 02:26:09
Original
439 Leute haben es durchsucht

Is a WHERE Clause or Join Criteria Filter Faster in SQL Queries?

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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:

  • WHERE-Klausel: 143016 ms
  • Join-Kriterien: 143256 ms

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage