Heim >Datenbank >MySQL-Tutorial >Zusammenfassung der MySQL-Prinzipien: Left Join, Right Join, Inner Join und Hash Join

Zusammenfassung der MySQL-Prinzipien: Left Join, Right Join, Inner Join und Hash Join

WBOY
WBOYnach vorne
2022-11-10 16:30:392374Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über MySQL. Er stellt hauptsächlich die Arbeitsprinzipien von Left Join, Right Join, Inner Join und Hash Join vor, analysiert den Unterschied zwischen Unterabfrage und Join und bietet einige Informationen basierend auf dem, was Sie gelernt haben. Werfen wir einen Blick auf die praktischen Fähigkeiten, die bei der Arbeit erlernt werden müssen. Ich hoffe, dass es für alle hilfreich ist.

Zusammenfassung der MySQL-Prinzipien: Left Join, Right Join, Inner Join und Hash Join

Empfohlenes Lernen: MySQL-Video-Tutorial

1. MySQL-Datenbank-JOIN-Verbindung

Das Erstellen von Indizes für mehrere Tabellen sowie mehrere JOIN- und Unterabfrageanweisungen für Tabellen sind relativ schwierig. Viele Entwickler glauben unbewusst, dass JOIN die Leistungseffizienz von SQL verringert, und teilen daher Multi-Table-SQL in Einzeltabellenabfragen auf, weil sie denken, dass dies die Effizienz der SQL-Ausführung beeinträchtigen wird, da Entwickler den JOIN-Implementierungsprozess nicht verstehen.

Tabellenzuordnungen zwischen Verknüpfungen verwenden Indizes für den Abgleich, vorausgesetzt, die Tabellen R und S sind verknüpft.

Tabelle R wird als Fahrtabelle bezeichnet. Die durch die WHERE-Bedingung in Tabelle R gefilterten Daten werden einzeln im entsprechenden Index von Tabelle S abgefragt. Wenn die Datenmenge der Tabelle R nicht groß ist, ist der obige Algorithmus sehr effektiv.

Welche Tabelle ist die Treibertabelle für jeden der folgenden drei JOIN-Typen:

SELECT * FROM R LEFT JOIN S ON R.x = S.x WEHRE ...
SELECT * FROM R RIGHT JOIN S ON R.x = S.x WEHRE ...
SELECT * FROM R INNER JOIN S ON R.x = S.x WEHRE ...

1, Inner Join

Für INNER JOIN kann die Treibertabelle Tabelle R oder Tabelle S sein. Zeigt die von der linken und rechten Seite gemeinsam genutzten Daten an.

In diesem Szenario wird derjenige, der die kleinere Datenmenge abfragen muss, die Tabelle steuern. Schauen wir uns die folgenden Beispiele an

SELECT * FROM R INNER JOIN S  ON R.x = S.x  WHERE R.y = ? AND S.z = ?

2, LEFT JOIN

Für den obigen Left Join ist die treibende Tabelle die linke Tabelle R; im rechten Join ist die treibende Tabelle die rechte Tabelle S. Dies ist der JOIN-Typ, der bestimmt, ob die Daten in der linken oder rechten Tabelle abgefragt werden müssen.

Gibt alle Datensätze in der linken Tabelle und Datensätze mit gleichen Join-Feldern in der rechten Tabelle zurück. Gibt alle Zeilen der linken Tabelle zurück, auch wenn in der rechten Tabelle keine Übereinstimmung vorhanden ist.

SELECT * FROM R LEFT JOIN S  ON R.x = S.x  WHERE R.y = ? AND S.z = ?

3. RIGHT JOIN

Für den obigen Left Join ist die treibende Tabelle die linke Tabelle R; im rechten Join ist die treibende Tabelle die rechte Tabelle S. Dies ist der JOIN-Typ, der bestimmt, ob die Daten in der linken oder rechten Tabelle abgefragt werden müssen.

Gibt alle Datensätze in der rechten Tabelle und Datensätze mit gleichen Join-Feldern in der linken Tabelle zurück. Gibt alle Zeilen der rechten Tabelle zurück, auch wenn in der linken Tabelle keine Übereinstimmung vorhanden ist.

SELECT * FROM R RIGHT JOIN S  ON R.x = S.x  WHERE R.y = ? AND S.z = ?

2. MySQL-Datenbank-Hash-Join

1. Was ist Hash-Join? Der zweite JOIN in MySQL ist Hash-JOIN, der verwendet wird, wenn die Verbindungsbedingung zwischen zwei Tabellen keinen Index hat. Algorithmus. Ist es in Ordnung, einen Index zu erstellen, wenn keine Verbindung besteht?

Wenn es sich bei einigen Spalten um Indizes mit geringer Selektivität handelt, müssen die Daten beim Erstellen des Index zum Importieren der Daten sortiert werden, was sich auf die Importleistung auswirkt und Probleme bei der Rückgabe der Tabelle durch den Sekundärindex verursacht. Wenn die Menge der gefilterten Daten groß ist, ist ein direkter vollständiger Tabellenscan schneller.

Für OLAP-Geschäftsabfragen (OLAP ist

Online Analytical Processing

,

wird zur Datenanalyse verwendet

und ermöglicht uns die gleichzeitige Analyse von Informationen aus mehreren Datenbanksystemen) ist Hash-Join eine wesentliche Funktion. MySQL 8.0 beginnt mit der Unterstützung des Hash Join-Algorithmus und stärkt so die Unterstützung für OLAP-Geschäfte. Wenn also die von Ihnen abgefragte Datenmenge nicht zu groß ist und die Antwortzeit der Abfrage auf Minutenebene erforderlich ist, können Sie eine einzelne Instanz von MySQL 8.0 verwenden, um die Abfrage großer Datenmengen abzuschließen.

2. So funktioniert Hash JOIN: Hash JOIN scannt die beiden zugehörigen Tabellen: Zuerst wird beim Scannen der Laufwerkstabelle eine Hash-Tabelle erstellt Beim Scannen der zweiten Tabelle wird jeder zugehörige Datensatz in der Hash-Tabelle durchsucht. Wenn der Datensatz gefunden wird, wird er zurückgegeben.

Hash-Join-Auswahltreibertabelle und Nested-Loop-Join-Algorithmus, beide sind grundsätzlich gleich. Beide kleineren Tabellen werden als Treibertabellen verwendet. Wenn die Treibertabelle groß ist und die erstellte Hash-Tabelle die Speichergröße überschreitet, speichert MySQL die Ergebnisse automatisch auf der Festplatte. 3. Unterabfrage

Ich habe festgestellt, dass einige Entwicklungsstudenten, darunter auch ich, es vorziehen, Unterabfragen anstelle traditioneller JOIN-Anweisungen zu schreiben.

Die Logik der Unterabfrage ist sehr klar. Obwohl JOIN auch die Anforderungen erfüllen kann, ist es nicht leicht zu verstehen, da LEFT JOIN eine algebraische Beziehung ist und Unterabfragen eher aus der Perspektive des menschlichen Denkens verstanden werden können.

In MySQL 8.0 optimiert der Optimierer jedoch automatisch die In-Unterabfrage in einen JOIN-Ausführungsplan, was die Leistung erheblich verbessert. Wir müssen uns nur auf den SQL-Ausführungsplan konzentrieren. Wenn die beiden Ausführungspläne gleich sind, gibt es keinen Leistungsunterschied.

Vor MySQL 8.0 hat MySQL Unterabfragen nicht vollständig optimiert. Daher sehen Sie im Ausführungsplan der Unterabfrage den Hinweis ABHÄNGIGE UNTERABFRAGE, was darauf hinweist, dass es sich um eine abhängige Unterabfrage handelt und die Unterabfrage auf die Zuordnung der externen Tabelle angewiesen sein muss. Die Ausführung einer abhängigen Unterabfrage kann sehr langsam sein, und in den meisten Fällen müssen Sie sie manuell in einen Join zwischen zwei Tabellen umwandeln.

Also der Blogger hier TippsAlle, wenn Ihre aktuelle MySQL 8.0-Version Unterabfragen schreiben kann, da die Optimierung von Unterabfragen ziemlich vollständig ist;

Für MySQL-Versionen vor MySQL 8.0 müssen Sie die SQL-Ausführung aller Unterabfragen anzeigen . Tipps für DEPENDENT SUBQUERY müssen optimiert werden, da dies sonst erhebliche Auswirkungen auf die Leistung hat. Die Optimierung von DEPENDENT SUBQUERY wird normalerweise als abgeleitete Tabelle für Tabellenverknüpfungen umgeschrieben.

Empfohlenes Lernen: MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonZusammenfassung der MySQL-Prinzipien: Left Join, Right Join, Inner Join und Hash Join. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.im. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen