MySQL-Datenbankgrundlagen - Prinzip der Join-Operation

MySQL-Datenbankgrundlagen - Prinzip der Join-Operation

Join verwendet den Nested-Loop-Join-Algorithmus. Es gibt drei Arten von Nested-Loop-Joins.

wähle * von t1, verbinde t2 auf t1.a = t2.a;
-- a 100 Datenelemente, b 1000 Datenelemente

Einfacher Nested-Loop-Join

Die gesamte Tabelle t1 wird durchlaufen. T1 wird als treibende Tabelle verwendet. Alle Daten in t1 werden in der gesamten Tabelle in t2 abgefragt. Dieser Vorgang wird 100*1000 Mal verglichen.

Bei jeder Ausführung einer vollständigen Tabellenabfrage in t2 ist nicht garantiert, dass der vollständige Tabellenscan im Speicher erfolgt, der Pufferpool wird gelöscht und er befindet sich möglicherweise auf der Festplatte.

Block Nested-Loop Join (MySQL-Treiberlink verwendet keinen Index)

Es durchläuft die gesamte t1-Tabelle, lädt die t1-Daten in den Join_Buffer und durchläuft dann die gesamte t2-Tabelle, um jedes Datenstück in t2 mit den in t1 im Join_Buffer zwischengespeicherten Daten abzugleichen.

t1 vollständiger Tabellenscan = 100 Mal

t2 vollständiger Tabellenscan = 1000 Mal

Anzahl der Abfragen = 1100

Vergleiche im join_buffer = 100 * 1000 mal

Die Anzahl der Vergleiche ist dieselbe wie bei Simple Nested-Loop Join, der Vergleichsprozess ist jedoch viel schneller als bei Simple Nested-Loop Join und weist eine bessere Leistung auf.

join_buffer hat eine Größe. Wenn die in t1 gefundenen Daten größer als die Größe von join_buffer sind, wird zuerst ein Teil der Daten in t1 geladen. Nach dem Vergleich von t2 wird join_buffer gelöscht und die verbleibenden Daten in t1 werden geladen. Wenn das Laden unvollständig ist, wird der Vorgang wiederholt.

Die Anzahl der vollständigen Tabellenscans für t1 bleibt dieselbe wie die Anzahl im Join_Buffer 1, aber die Anzahl der Scans für t2 wird mit der Anzahl der Segmente multipliziert.

Angenommen, die Anzahl der Datenzeilen in der treibenden Tabelle beträgt N und muss in K Segmente unterteilt werden, um den Algorithmusprozess abzuschließen, und die Anzahl der Datenzeilen in der getriebenen Tabelle beträgt M.

K = λ * N

Abtasten des angetriebenen Tisches mal = M * λ * N

λ hängt mit der Größe des Join_Buffer zusammen. Wenn die Größe des Join_Buffer groß genug ist, ist die Zeit für große und kleine Tabellentreiber gleich.

Wenn eine Segmentierung erforderlich ist, gilt: Je seltener die Segmentierung, desto seltener wird die angetriebene Tabelle gescannt. Daher sollte ein kleiner Tabellentreiber verwendet werden.

Index Nested-Loop Join (MySQL-Treiberlink verwendet Index)

Nehmen wir das obige SQL als Beispiel, wenn Feld A indiziert ist.

Die gesamte t1-Tabelle wird gescannt und alle Daten in der t1-Tabelle werden in der t2-Tabelle indiziert. Nachdem die ID gefunden wurde, wird die Tabelle erneut abgefragt (wenn das Verbindungsfeld der Primärschlüssel der t2-Tabelle ist, wird der Tabellenabrufvorgang weggelassen).

t1 durchsucht die gesamte Tabelle = 100 Mal

t2 Indexabfragen = log1000 mal

t2 Tabellenabfrage = log1000 mal

Angenommen, die Anzahl der Datenzeilen in der treibenden Tabelle ist N und die Anzahl der Datenzeilen in der getriebenen Tabelle ist M.

Gesamtzahl der Abfragen = N + N * 2logM

Wie aus dem Obigen ersichtlich ist, wird es umso mehr Abfragen geben, je größer die Daten in der Treibertabelle sind. Daher sollte eine kleine Tabelle als Treibertabelle verwendet werden.

Der Artikel bezieht sich auf „MySQL Practical 45 Lectures – Lecture 34“

Zusammenfassen

Dies ist das Ende dieses Artikels über die Grundlagen des Join-Operationsprinzips der MySQL-Datenbank. Weitere relevante Inhalte zum Join-Prinzip von MySQL finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Zusammenfassung der sieben MySQL JOIN-Typen
  • MySQL-Joinpufferprinzip
  • Spezifische Verwendungsanweisungen für MySQL-Joins
  • MySQL-Join-Abfragesyntax und Beispiele
  • Zusammenfassung verschiedener gängiger Abfragebeispiele für Join-Tabellen in MySQL
  • Spezifische Verwendung der sieben JOINs von MySQL

<<:  HTML-Popup-Div ist sehr nützlich, um eine mobile Zentrierung zu realisieren

>>:  Detaillierte Erläuterung der häufig verwendeten Funktionen copy_from_user open read write in der Linux-Treiberentwicklung

Artikel empfehlen

Verwenden Sie CSS, um die Breite von INPUT in TD festzulegen

Als ich kürzlich mit C# ein Webprogramm erstellte,...

5 coole und praktische Einführung in HTML-Tags und -Attribute

Tatsächlich handelt es sich auch hier um einen Cl...

Implementierung der kontinuierlichen Integration von Jenkins+Docker

Inhaltsverzeichnis 1. Einführung in Jenkins 2. Je...

Mehrere CSS3-Tag-Abkürzungen (empfohlen)

border-radius: CSS3 abgerundete Ecken Syntax: bor...

Detaillierte Erklärung der Funktion und Verwendung der DOCTYPE-Deklaration

1. Browser-Rendering-Modus und Doctype Einige Web...

Unglaubliche CSS-Navigationsleiste unterstreiche folgenden Effekt

Der erste Cutter in China github.com/chokcoco Hie...

Detaillierte Erklärung der RPM-Installation in MySQL

Installation und Deinstallation anzeigen # rpm -q...

Sprechen Sie über das Verständnis des CSS-Attributrands

1. Was ist eine Marge? Mit dem Rand wird die Abstä...

Detaillierte Erläuterung gängiger Vorgänge für Docker-Images und -Container

Bildbeschleuniger Manchmal ist es schwierig, Bild...