Heim  >  Artikel  >  Datenbank  >  MySQL-Optimierung (2) Strategie zur Indexoptimierung

MySQL-Optimierung (2) Strategie zur Indexoptimierung

黄舟
黄舟Original
2016-12-29 16:06:021228Durchsuche

1: Indextyp

Index: für schnelle Abfrage;

MySQL-Optimierung (2) Strategie zur Indexoptimierung

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).


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn