Heim >Datenbank >MySQL-Tutorial >MySQL-Optimierung (2) Strategie zur Indexoptimierung
1: Indextyp
Index: für schnelle Abfrage;
Knotenebene 1, 2 hoch 0
Knoten Ebene 1, 2 hoch 1
Knotenebene 3, 2 hoch 2
Knotenebene 4, 2 hoch 3
Knotenebene 5 Schichten, 2 zur 4. Potenz
. . .
. . .
. . .
Ebene 31 des Knotens, 2 erhöht auf die 32. Potenz
ergibt 4,2 Milliarden
Das heißt, 4,2 Milliarden Zahlen können bis zu 32 Mal überprüft werden
Gewöhnliche Abfragen erfordern 2,1 Milliarden Suchanfragen
Dies ist-----》B-Tree-Index
Hinweis: Es heißt Btree-Index, suchend Im Großen und Ganzen verwenden beide ausgewogene Bäume, aber in Bezug auf die spezifische Implementierung unterscheidet sich jede Engine geringfügig.
Zum Beispiel verwendet die NDB-Engine streng genommen T-Baum
Myisam. innodb, der B-Tree-Index wird standardmäßig verwendet
Aber abstrakt gesehen kann das B-Tree-System als „sortierte schnelle Suchstruktur“ verstanden werden >
1,2 Hash-Index Frühling hahahaha. . . Nima nima. . .
In der Speichertabelle ist der Standardwert der Hash-Index.
Die theoretische Abfragezeitkomplexität von Hash beträgt O(1)
Frage: Da die Hash-Suche so ist So effizient, warum nicht einen Hash-Index verwenden?
Antwort:
1: Das von der Hash-Funktion berechnete Ergebnis ist zufällig. Wenn Daten auf der Festplatte abgelegt werden,
verwenden Sie einen Algorithmus. . . . .
Wenn der Primärschlüssel beispielsweise eine ID ist, werden die der
ID entsprechenden Zeilen zufällig auf der Festplatte platziert. Sie sind unregelmäßig verstreut! !
Der Hash-Algorithmus weist Speicherplatz ohne Regeln zu! ! !
2: Die Bereichsabfrage kann nicht optimiert werden. 3: Der Präfixindex kann nicht verwendet werden.
Beispielsweise lautet der Wert der Feldspalte „hellopworld“. wird hinzugefügt
Um xx=helloword abzufragen, können Sie natürlich den Index xx=hello verwenden, oder Sie können auch den Index
(linker Präfixindex)
verwenden. Weil hash( 'helloword') und hash('hello') sind beide. Die Beziehung zwischen den beiden ist immer noch zufällig
4: Sortierung kann nicht optimiert werden.
5: Zeilensicherung ist notwendig Angenommen, der Datenspeicherort wird über den Index ermittelt und die Daten müssen an die Tabelle zurückgegeben werden
------》Wenn Sie zurückgehen und suchen, bedeutet dies, dass das Verzeichnis nur ein Wörterbuch ist und Sie müssen tatsächlich umblättern
2: Häufige Missverständnisse von Btree-Indizes
2.1 Fügen Sie Indizes zu den Spalten hinzu, die häufig in Where-Bedingungen verwendet werden
Beispiel : where cat_id=3 and price>100; // Abfrage der dritten Spalte, Produkte über 100 Yuan
Fehler: Indizes werden zu cat_id und und zum Preis hinzugefügt.
Fehler: Nur cat_id oder Preisindex kann verwendet werden, da es sich um unabhängige Indizes handelt und nur einer gleichzeitig verwendet werden kann.
alter table add index(cat_id)
alter table add index(price)
alter table add index(goods_id) -----------Es kann immer nur einer gleichzeitig verwendet werden . . . . Der gemeinsame Index behandelt mehrere Spalten als Gesamtwert
Index (Cat_ID, Warenname, Preis) ------------------------- - - Behandeln Sie mehrere Spalten als Gesamtwert
2.2 Nach dem Erstellen eines Index für mehrere Spalten funktioniert der Index unabhängig davon, welche Spalte abgefragt wird
Fehler: Multiple On the Spaltenindex, damit der Index funktioniert, muss er die Anforderungen an das linke Präfix erfüllen.
///Präfixanforderungen festlegen
Nehmen Sie index(a,b,c) als Beispiel (beachten Sie, dass es hängt von der Reihenfolge ab)
Aussage
Funktioniert der Index
Wobei a=3
Ja, nur Spalte a wird verwendet
Wobei a=3 und b=5
Ja, die Spalten a und b werden verwendet
Wobei a=3 und b=5 und c=4
Ja, mit abc
Wobei b=3 / wo c=4
Nein
Wobei a=3 und c=4
Spalte a kann als Index fungieren, Spalte c jedoch nicht
Wobei a=3 und b>10 und c=7
A kann verwendet werden, b kann verwendet werden, C kann nicht verwendet werden
Das Gleiche wie oben, wo a=3 und b wie 'xxxx%' und c=7
A kann verwendet werden, B kann verwendet werden, C kann nicht verwendet werden
Für Nehmen Sie zum besseren Verständnis an, dass ABC jeweils ein 10 Meter langes Brett ist und der Fluss 30 Meter breit ist.
Genaue Übereinstimmung, dann ist das Brett 10 Meter lang,
Wie, Linkes Präfix und Reichweitenabfrage, dann ist das Brett 5 Meter lang,
Sie können es selbst spleißen, Sie können Wenn Sie die andere Seite des Flusses überqueren, wissen Sie, ob der Index kann verwendet werden.
Wie im obigen Beispiel, wo a=3 und b>10 und c=7,
Ein Brett ist 10 Meter lang, A Der Spaltenindex funktioniert
Platine A ist normal mit Platine B verbunden und der Index von Platine B funktioniert
Platine B ist kurz und kann nicht mit Platine C verbunden werden,
Der Index von Spalte C funktioniert nicht.
Das Obige ist der Inhalt der Indexoptimierungsstrategie für MySQL-Optimierung (2). Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).