Heim > Datenbank > MySQL-Tutorial > INNER JOIN vs. LEFT JOIN: Wann ist einer deutlich schneller als der andere?

INNER JOIN vs. LEFT JOIN: Wann ist einer deutlich schneller als der andere?

Barbara Streisand
Freigeben: 2025-01-18 16:33:14
Original
978 Leute haben es durchsucht

INNER JOIN vs. LEFT JOIN: When is One Significantly Faster Than the Other?

Detaillierte Erläuterung des Leistungsunterschieds zwischen INNER JOIN und LEFT JOIN in SQL Server

In SQL Server sind Leistungsüberlegungen oft der Schlüssel zu Entscheidungen zur Abfrageoptimierung. Die Wahl zwischen INNER JOIN oder LEFT JOIN, insbesondere bei Abfragen mit mehreren Tabellen, ist eine häufige Frage. Obwohl oft angenommen wird, dass LEFT JOIN von Natur aus schneller ist, ist dies nicht immer der Fall.

Warum ist LEFT JOIN normalerweise nicht schneller?

LEFT JOIN ruft alle Zeilen in der linken Tabelle ab, auch wenn es in der rechten Tabelle keine passenden Zeilen gibt. Im Gegensatz dazu gibt INNER JOIN nur Zeilen zurück, in denen eine Übereinstimmung gefunden wird. Dies bedeutet, dass der LEFT JOIN selbst mehr Arbeit leistet und mehr Ergebniszeilen generiert, was zu längeren Ausführungszeiten führen kann.

Ausnahme: Wann könnte ein LEFT JOIN schneller sein?

In seltenen Fällen kann LEFT JOIN aufgrund bestimmter Faktoren schneller sein als INNER JOIN. Die Hauptgründe sind folgende:

  • Sehr kleine Tabellen: Wenn die betroffene Tabelle sehr klein ist (z. B. weniger als zehn Zeilen), kann der Overhead eines Hash-Matches (verwendet von INNER JOIN) den einer verschachtelten Schleife (verwendet) übersteigen durch LEFT JOIN ) kosten.
  • Mangel an ausreichenden Indizes: Wenn einer Tabelle geeignete Indizes zur Unterstützung von INNER JOIN fehlen, wählt SQL Server möglicherweise einen weniger effizienten Ausführungsplan, was zu langsameren Abfragen führt. In diesem Fall sind möglicherweise verschachtelte Schleifen mit LEFT JOIN vorzuziehen.

Beispiel

Betrachten Sie das folgende Beispiel:

<code class="language-sql">CREATE TABLE #Test1 (ID int NOT NULL PRIMARY KEY, Name varchar(50) NOT NULL)
INSERT INTO #Test1 (ID, Name) VALUES (1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four'), (5, 'Five')

CREATE TABLE #Test2 (ID int NOT NULL PRIMARY KEY, Name varchar(50) NOT NULL)
INSERT INTO #Test2 (ID, Name) VALUES (1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four'), (5, 'Five')

SELECT *
FROM #Test1 t1
INNER JOIN #Test2 t2
ON t2.Name = t1.Name

SELECT *
FROM #Test1 t1
LEFT JOIN #Test2 t2
ON t2.Name = t1.Name

DROP TABLE #Test1
DROP TABLE #Test2</code>
Nach dem Login kopieren

Bei der Ausführung auf diesen kleinen Tabellen sind LEFT JOIN-Abfragen etwas schneller, da der Mehraufwand für den Hash-Abgleich die Kosten für die zusätzliche Ergebnisgröße überwiegt. Bei größeren Tabellen mit mehr als zehn Zeilen sind INNER JOIN-Abfragen jedoch viel schneller.

Fazit

In den meisten Fällen schneidet INNER JOIN hinsichtlich der Ausführungsgeschwindigkeit besser ab als LEFT JOIN. Ausnahmen sind auf sehr spezifische Bedingungen beschränkt, bei denen es sich um extrem kleine Tabellen und unzureichende Indizes handelt. Daher ist es wichtig, Abfragedesigns und Indizes gründlich zu untersuchen, um potenzielle Leistungsengpässe zu identifizieren, anstatt INNER JOINs nur aus Leistungsgründen durch LEFT JOINs zu ersetzen.

Das obige ist der detaillierte Inhalt vonINNER JOIN vs. LEFT JOIN: Wann ist einer deutlich schneller als der andere?. 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