In diesem Artikel werden hauptsächlich Methoden zur Optimierung des MySQL-Index vorgestellt, in der Hoffnung, allen zu helfen. Ein Index ist eine Datenstruktur, die von Speicher-Engines zum schnellen Auffinden von Datensätzen verwendet wird. Insbesondere wenn die Datenmenge in der Tabelle immer größer wird, verbessern korrekte Indizes die Abfrageleistung erheblich. Doch in der täglichen Arbeit wird die Indexierung oft ignoriert oder sogar missverstanden. In diesem Artikel werden die Prinzipien und Vorsichtsmaßnahmen der MySQL-Indexoptimierung kurz vorgestellt.
1. Arten von Indizes
1) B-Tree-Index
Der B-Tree-Index ist der am häufigsten verwendete Indextyp und die meisten Speicher-Engines unterstützen den B-Tree-Index .
B-Tree selbst ist eine Datenstruktur, bei der es sich um einen ausgewogenen Suchbaum handelt, der für Festplatten oder andere Hilfsgeräte mit Direktzugriff entwickelt wurde. Der B-Tree-Index in MySQL wird normalerweise von B+Tree, einer Variante von B-Tree, implementiert. Seine Struktur ist wie folgt:
Das Merkmal von B + Tree ist, dass die Daten in Blattknoten gespeichert werden und die Daten jedes Blattknotens in derselben Reihenfolge vorliegen ( Aufsteigende oder absteigende Reihenfolge) Es wird in einem Array gespeichert und benachbarte Blattknoten werden an einem Punkt mit Zeigern verbunden. Diese Struktur eignet sich sehr gut für Bereichssuchen.
Der B-Tree-Index kann den Datenzugriff erheblich beschleunigen, da die Speicher-Engine nicht mehr einen vollständigen Tabellenscan durchführen muss, um die erforderlichen Daten zu erhalten, sondern Schicht für Schicht vom Wurzelknoten des Index aus sucht erheblich Der Umfang der von der Speicher-Engine gescannten Daten wird reduziert, sodass die Abfragegeschwindigkeit erheblich verbessert wird.
2) Hash-Index
Der Hash-Index ist, wie der Name schon sagt, ein Index, der über eine Hash-Tabelle implementiert wird. Sein Merkmal ist, dass es nur dann gültig ist, wenn es genau mit allen Spalten des Index übereinstimmt. Für jede Datenzeile berechnet die Speicher-Engine einen Hash-Code für alle Indexspalten. Der Hash-Index speichert den Hash-Code im Index und speichert einen Zeiger auf jede Datenzeile in der Hash-Tabelle.
In MySQL unterstützt derzeit nur die Speicher-Engine explizit den Hash-Index, und da der Hash-Index keine Bereichssuche, Sortierung oder Suche nach Teilindexspalten unterstützt, wird der Hash-Index selten verwendet.
Im Folgenden wird der Schwerpunkt auf der Verwendung des B-Tree-Index liegen.
Zur Vereinfachung der folgenden Beschreibung gehen wir davon aus, dass es eine Benutzertabelle mit den folgenden Feldern gibt:
ID: Bigint-Typ, Primärschlüssel
Name: Varchar Typ
Alter: int Typ
Interesse: Varchar Typ
und erstellen Sie einen gemeinsamen Index index_1 für Name, Alter, Interesse, die Die Indexreihenfolge ist (Name, Alter,Interesse). Diese Indexreihenfolge ist sehr wichtig und wird später erwähnt.
2. Verwendung des B-Tree-Index
1) Vollständiger Wertabgleich
Der vollständige Wertabgleich bezieht sich auf den Abgleich mit allen Spalten im Index, z. B. The Die obige Benutzertabellenabfrage, bei der name='aaa' und age=20 und interest='basketball' alle Spalten des Index verwenden kann.
2) Übereinstimmung mit dem Präfix ganz links
Übereinstimmung mit dem Präfix ganz links bedeutet, dass nur die wenigen linken Spalten des mehrspaltigen Index verwendet werden. Beispielsweise kann für die obige Benutzertabellenabfrage mit Name = „aaa“ der Index verwendet werden, und es wird nur die erste Spalte des Index verwendet.
3) Übereinstimmendes Spaltenpräfix
Übereinstimmendes Spaltenpräfix bedeutet, dass nur der Anfang einer bestimmten Spalte abgeglichen wird. Wenn Sie beispielsweise die obige Benutzertabelle mit einem Namen wie „aaa%“ abfragen, können Sie dies tun Beachten Sie, dass der Index mit dem Anfang der Spalte übereinstimmt.
4) Übereinstimmungsbereichswert
Wenn Sie beispielsweise die obige Benutzertabelle abfragen, in der Name > und Name <
5) Passen Sie genau mit einer bestimmten Spalte und Bereichsübereinstimmung mit einer anderen Spalte an
Wenn Sie die obige Benutzertabelle mit Name='aaa' und Alter >10 abfragen, können Sie den Index und die ersten beiden Spalten des Index verwenden.
3. Einschränkungen des B-Tree-Index
1) Wenn die Suche nicht in der Spalte ganz links im Index gestartet wird, kann der Index nicht verwendet werden.
Wenn Sie die obige Benutzertabelle mit Alter = 20 abfragen, kann der Index nicht verwendet werden, da das Alter nicht die Datenspalte ganz links in der Indexspalte ist.
2) Spalten im Index können nicht übersprungen werden.
Wenn Sie where name='aaa' und interest='football' für die obige Benutzertabelle abfragen, können Sie nur die erste Spalte des Index verwenden, da die where-Bedingung nicht enthält Alter.
Verwandte Empfehlungen:
So verwenden Sie die MySQL-Indexoptimierung
MySQL Advanced Thirteen— — Optimierung von SQL nach Index
MySQL Order By Index Optimization Method