Heim > Datenbank > MySQL-Tutorial > WHERE vs. ON-Klausel in JOIN-Abfragen: Wann sollte ich welche für eine optimale Leistung verwenden?

WHERE vs. ON-Klausel in JOIN-Abfragen: Wann sollte ich welche für eine optimale Leistung verwenden?

Mary-Kate Olsen
Freigeben: 2025-01-04 09:58:35
Original
137 Leute haben es durchsucht

WHERE vs. ON Clause in JOIN Queries: When Should I Use Which for Optimal Performance?

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

Im Vergleich zu:

SELECT *
FROM Foo f
INNER JOIN Bar b ON (b.IsApproved = 1) AND (b.BarId = f.BarId);
Nach dem Login kopieren

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:

  • Optimiert Join-Vorgänge: Die ON-Klausel wird ausgewertet, bevor Zeilen verknüpft werden, sodass die Datenbank selektiv nur Zeilen verbinden kann, die die angegebenen Kriterien erfüllen. Dies führt zu einem effizienteren Join-Prozess.
  • Minimiert die Ergebnismengengröße: Durch Filtern in der ON-Klausel reduzieren Sie die Anzahl der Zeilen, die der WHERE-Klauselauswertung unterzogen werden, was zu Folgendem führt: eine potenziell kleinere Ergebnismenge.

Es gibt jedoch Fälle, in denen das Platzieren von Filtern in der WHERE-Klausel sinnvoll ist notwendig:

  • Äußere Joins: Äußere Joins umfassen Zeilen aus der linken Tabelle, auch wenn es in der rechten Tabelle keine passenden Zeilen gibt. Durch das Platzieren von Filtern in der WHERE-Klausel können Sie die Ergebnismenge filtern, nachdem der Join stattgefunden hat.
  • OPTIONALE Filterung: OPTIONALE Filter ermöglichen die Rückgabe von Zeilen, auch wenn die Join-Bedingung nicht erfüllt ist. Die folgende Abfrage erfordert beispielsweise, dass b.IsApproved NULL oder 1 ist:
SELECT *
FROM Foo f
LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId)
WHERE (b.IsApproved IS NULL OR b.IsApproved = 1);
Nach dem Login kopieren

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!

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