LEFT JOIN vs. INNER JOIN: Ein Leistungsparadoxon
Es wird allgemein angenommen, dass INNER JOIN
-Vorgänge effizienter sind als LEFT JOIN
in SQL Server. Die Leistung kann jedoch überraschend kontraintuitiv sein. In diesem Artikel wird ein Szenario untersucht, in dem ein LEFT JOIN
einen INNER JOIN
.
Die Fallstudie:
Eine komplexe Abfrage mit neun Tabellen, die zunächst INNER JOIN
verwendete, zeigte eine schlechte Leistung. Der Wechsel zu LEFT JOIN
hat die Ausführungsgeschwindigkeit erheblich verbessert.
Warum der unerwartete Geschwindigkeitsschub?
Es gilt die gängige Meinung: LEFT JOIN
ist im Allgemeinen nicht schneller. Es umfasst die gleiche INNER JOIN
-Verarbeitung sowie den zusätzlichen Schritt des Hinzufügens von Nullwerten für nicht übereinstimmende Zeilen aus der linken Tabelle. Die größere Ergebnismenge kann auch die Geschwindigkeit verlangsamen.
Der Schlüssel zum Verständnis des beobachteten Leistungsunterschieds liegt im Fehlen von Primär- und Fremdschlüsselindizes für die beteiligten Tabellen. Dieser Mangel an Indexierung beeinträchtigte die Effizienz des INNER JOIN
erheblich.
Situationen, in denen LEFT JOIN gewinnen könnte:
Obwohl dies nicht die Norm ist, gibt es bestimmte Bedingungen, unter denen ein LEFT JOIN
einen INNER JOIN
übertreffen könnte:
Winzige Tabellen: Bei extrem kleinen Tabellen (unter zehn Zeilen) kann der Overhead von Hash-basierten INNER JOIN
-Operationen den Overhead der verschachtelten Schleifen überwiegen, die typischerweise in LEFT JOIN
Ausführungsplänen verwendet werden.
Unzureichende Indizierung: Wenn Indizes fehlen oder für INNER JOIN
nicht ausreichen, wählt SQL Server möglicherweise einen weniger effizienten Ausführungsplan. Eine LEFT JOIN
Nutzung verschachtelter Schleifen könnte dann eine bessere Leistung bieten.
Zusammenfassung:
Obwohl LEFT JOIN
von Natur aus mehr Verarbeitung erfordert als INNER JOIN
, können Situationen mit kleinen Tabellen oder einem Mangel an ordnungsgemäßer Indizierung zu unerwarteten Leistungsvorteilen für LEFT JOIN
führen. Das Fehlen geeigneter Indizes war wahrscheinlich die Ursache in der oben beschriebenen Fallstudie.
Das obige ist der detaillierte Inhalt vonWann übertrifft ein LEFT JOIN einen INNER JOIN?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!