Join-AlgorithmusMySQL unterstützt nur einen Join-Algorithmus: Nested-Loop Join, aber Nested-Loop Join hat drei Varianten:
Der Unterschied zwischen angetriebenen und nicht angetriebenen TischenDie treibende Tabelle ist die Haupttabelle und die nicht getriebene Tabelle ist die untergeordnete Tabelle. Sie können dies sehen, indem Sie sich das folgende SQL ansehen. A ist die treibende Tabelle und B ist die nicht getriebene Tabelle. Wähle * von A nach links und schließe dich B an Wenn A mit B verbunden wird, müssen wir dann zuerst Tabelle A und dann Tabelle B überprüfen? Die Antwort lautet nicht unbedingt, da MySQL einen Optimierer enthält, der basierend auf Ihren Abfrageanweisungen einige Optimierungen vornimmt. Der Optimierer bestimmt auch, welche Tabelle zuerst überprüft werden soll, aber es ist sicher, dass die zuerst überprüfte Tabelle die treibende Tabelle ist und umgekehrt. Was die Frage betrifft, welche Tabelle zuerst überprüft werden soll, können wir das Ergebnis erhalten, indem wir uns den Ausführungsplan ansehen; fügen Sie einfach das Schlüsselwort „explain“ davor hinzu; erkläre select * from A join B; 1. Einfacher Nested-Loop-Join, einfache Verschachtelung – kein IndexA Left Join B: Jedes Mal wird die gesamte Tabelle abgeglichen. Jede Datenzeile in Tabelle A wird einmal in Tabelle B abgeglichen. Das heißt, wenn Tabelle A 10 Datensätze und Tabelle B 1000 Datensätze enthält, beträgt die Anzahl der Scans während der Abfrage 10*1000, was bedeutet, dass die Abfrage 10000 Mal scannen muss, um die Daten abzurufen. 2. Index Nested-Loop Join-Indexierter Fall select * from A join B on A.id=B.id where A.id = 1: Bei der Abfrage sucht die Treibertabelle A nach dem Index des zugehörigen Felds. Wenn im Index ein übereinstimmender Wert gefunden wird, wird die Abfrage an die Tabelle zurückgegeben. Mit anderen Worten, die Abfrage wird erst dann an die Tabelle zurückgegeben, wenn der Index übereinstimmt. 3. Block Nested-Loop Join, VerbindungspufferWenn ein Index vorhanden ist, wird Index Nested-Loop Join zum Verbinden der Tabellen verwendet. Wenn kein Index für die Verbindungsspalte vorhanden ist, wird Block Nested-Loop Join verwendet. Verbindungspuffer. Zwischen der Treibertabelle und der Nicht-Treibertabelle befindet sich ein Puffer. Bei der Abfrage werden die Daten der Treibertabelle zuerst im Puffer zwischengespeichert und dann stapelweise mit der Nicht-Treibertabelle abgeglichen. Dies ist eine Optimierungslösung, die mehrere Vergleiche zu einem Vergleich zusammenfasst. Hinweis: Hier werden nicht nur die Spalten der zugehörigen Tabelle zwischengespeichert, sondern auch die Spalten nach der Auswahl. PuffergrößeStandardmäßig beträgt die Kapazität des Puffers join_biffer_size 256 KB. Wenn Ihr Datenspeicherplatz größer als 256 KB ist, kann der Puffer nicht verwendet werden und der Join wird in den einfachsten Simple Nested-Loop Join umgewandelt. Wir können die Puffergröße jedoch manuell anpassen, um große Datenmengen zu laden. Sehen Sie sich die join_biffer_size-SQL an: Variablen wie „%join_biffer_size%“ anzeigen So wählen Sie die Verbindungsreihenfolge für Tabellen mit großen und kleinen DatenmengenAm besten verbindet man die kleine Tabelle mit der großen Tabelle, das reduziert die Anzahl der Scans; wenn die große Tabelle beispielsweise 1.000 Datensätze hat und die kleine Tabelle nur 10 Datensätze, dann ist die beste Verbindungsmethode: Die kleine Tabelle verbindet sich mit der großen Tabelle; warum macht man das?
Detail
Dies ist das Ende dieses Artikels über die zugrunde liegenden Prinzipien von MySQL Join. Weitere Informationen zu den zugrunde liegenden Prinzipien von MySQL Join finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Vue implementiert kleine Suchfunktion
>>: Farbverlaufseffekt im HTML-Hintergrund durch CSS-Stil erreicht
Dieses Artikelbeispiel zeigt die Implementierung ...
Hallo zusammen, heute möchte ich Ihnen zeigen, wi...
1. Neuen Benutzer hinzufügen Nur lokalen IP-Zugri...
Vorwort Beim Teilen einer Seite hoffen Sie, durch...
Inhaltsverzeichnis Wir haben in einem früheren Ar...
Bevor wir die GROUP BY- und HAVING-Klauseln vorst...
HTML: Titel Überschriften werden durch Tags wie &...
Erstellen Sie in MySQL eine Ansicht für zwei oder...
In diesem Artikelbeispiel wird der spezifische Co...
1. Voraussetzungen 1. Das Projekt wurde bereitges...
Bei der täglichen Wartung werden Threads häufig b...
Inhaltsverzeichnis Vorwort Fügen Sie Sudo-Schreib...
Betriebsumgebung: MAC Docker-Version: Docker vers...
Inhaltsverzeichnis 1. Teleport-Nutzung 2. Vervoll...
Im Internet und in vielen Büchern gibt es viele T...