Lassen Sie uns zunächst das Prinzip der Übereinstimmung ganz links wie folgt verstehen:
1 Suchen Sie zunächst die Abfragebedingungen der SQL, was sind sie und welche äquivalent, welche davon ist eine Bedingung des Geltungsbereichs.
2. Verwenden Sie Gleichwertsbedingungen, um das Feld ganz links im Index zu treffen, und treffen Sie dann das Feld der Reihe nach von links nach rechts, wobei der Bereich am Ende steht.
Analyse und Erklärung
1. MySQL-Indizes sind in Cluster-Indizes unterteilt, und nicht-Cluster-Indizes sind in Clustern organisierte Tabellen.
Die Clustering-Regeln lauten: Wenn ein Primärschlüssel vorhanden ist, definieren Sie den Primärschlüsselindex als Clustered-Index. Wenn kein Primärschlüssel vorhanden ist, wählen Sie den ersten eindeutigen Index aus, der NULL nicht zulässt die integrierte Zeilen-ID von innodb als Clustered-Index.
(Empfohlenes kostenloses Lernvideo-Tutorial: MySQL-Video-Tutorial )
Nicht gruppierter Index wird auch Sekundärindex oder Hilfsindex genannt.
2. Der Index von MySQL, egal ob es sich um einen Clustered-Index oder einen Nicht-Clustered-Index handelt, ist eine B+-Baumstruktur. Die Blattknoten des Clustered-Index speichern Daten, und die Blattknoten des Nicht-Clustered-Index speichern die Schlüssel- und Primärschlüsselwerte des Nicht-Clustered-Index. Die Höhe des B+-Baums ist die Höhe des Index.
3. Indexhöhe
Die Höhe des Clustered-Index bestimmt die theoretische Anzahl der IOs zum Abrufen von Daten basierend auf dem Primärschlüssel. Die theoretischen E/A-Zeiten zum Lesen von Daten basierend auf dem nicht gruppierten Index sollten zur Gesamtzahl der E/A-Zeiten für den Zugriff auf den gruppierten Index addiert werden. Tatsächlich ist möglicherweise nicht so viel IO erforderlich. Weil die Seite, auf der sich der Verzweigungsknoten des Index befindet, aufgrund mehrerer Lesevorgänge im MySQL-Speicher zwischengespeichert wird.
Die Standardblockgröße von MySQL beträgt 16 KB. Die Höhe des Index kann anhand der Länge der Indexspalte grob geschätzt werden.
Die SQL-Optimierung basiert auf der Where-Bedingung in der
SQL-Anweisung. Unter Verwendung der oben genannten Extraktionsregeln wird sie schließlich in den Indexschlüssel (Erster Schlüssel und Letzter) extrahiert Schlüssel), Index unter Filter und Tabellenfilter.
Index First Key wird nur verwendet, um den Startbereich des Index zu lokalisieren, daher wird er nur bei der Indizierung des ersten Suchpfads verwendet (durchlaufen des gesamten Wurzelknotens des Index-B+-Baums bis zum richtigen Blatt). Knotenposition des Index) Verwenden Sie ihn und beurteilen Sie ihn einmal. Der Index-Letztschlüssel wird verwendet, um den Endbereich des Index zu lokalisieren Der Index-Letztschlüsselbereich wurde überschritten. Wenn dieser überschritten wird, wird die aktuelle Abfrage beendet.
Der Indexfilter wird verwendet, um Datensätze im Indexabfragebereich zu filtern, die die Abfragebedingungen nicht erfüllen Der Bereich muss mit dem Indexfilter verglichen werden. Wenn er den Indexfilter nicht erfüllt, wird er direkt verworfen und mit dem Lesen des nächsten Datensatzes im Index fortgefahren.
Tabellenfilter, dies ist die letzte Zeile von Verteidigung für die Where-Bedingung, die zum Filtern der Datensätze verwendet wird, die den vorherigen Indextest bestanden haben. Der Datensatz hat zu diesem Zeitpunkt den durch Index First Key und Index Last Key gebildeten Bereich erfüllt und die Bedingungen des Index Filters erfüllt wird in die Tabelle zurückgelesen und beurteilt, ob der vollständige Datensatz die Abfragebedingung im Tabellenfilter erfüllt. Wenn nicht, wird der aktuelle Datensatz übersprungen und mit dem Lesen des nächsten Datensatzes im Index fortgefahren. Dieser Datensatz erfüllt alle Wo-Bedingungen und kann zur Analyse an den Front-End-Benutzer
zurückgegeben werdenWelche Art von Prozess muss eine SQL-Anweisung durchlaufen? hingerichtet werden?
Wenn eine SQL-Anweisung zur Abfrage an die MySQL-Datenbank gesendet wird, muss sie die folgenden Schritte durchlaufen:
Zuerst werden im Where-Analyseschritt die Abfragebedingungen in der aktuellen Die Abfrageanweisung wird in jede unabhängige Bedingungseinheit zerlegt.
2. MySQL wird den Index automatisch aufteilen und neu organisieren.
3 Teil. Wenn der Index erreicht wird, wird der angegebene Speicherort für Tabellendatensätze gefunden. Wenn kein Treffer vorliegt, können alle Scans nur verwendet werden.
4 Gibt den entsprechenden Datenwert basierend auf dem aktuellen Abfragefeld zurück.
Wie unten gezeigt:
Empfohlene verwandte Artikel-Tutorials:
MySQL-TutorialDas obige ist der detaillierte Inhalt vonErläuterung der MySQL-Index-Trefferregeln. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!