Heim  >  Artikel  >  Datenbank  >  MySQL-detaillierte Erklärung der Indexsortierungszeilen

MySQL-detaillierte Erklärung der Indexsortierungszeilen

黄舟
黄舟Original
2017-03-02 16:33:561492Durchsuche

Im vorherigen Artikel wurden nur kurz einige Strukturen und Speichermethoden von B-TREE vorgestellt, aber die Beziehung zwischen Index und Daten scheint immer noch nicht zusammenhängend zu sein

So In diesem Artikel wird anhand eines tatsächlichen Beispiels einer Datenzeile nach dem Erstellen des Index erläutert, in welcher Reihenfolge sie nach B + TREE sortiert werden.

1. Simulieren und erstellen Sie Originaldaten

In der Abbildung unten sind die simulierten Daten für meine eigene Bequemlichkeit. Die Engine ist mysiam~

Die rechte Seite ist eine normale Simulationsdatentabelle, nachdem sie mithilfe von Excel zufällig angeordnet wurde und dann die Primärschlüssel gemäß 1-27 angeordnet wurden (sofern sie nicht zufällig sind). , ich werde die Daten ursprünglich simulieren. Es ist in der richtigen Reihenfolge geschrieben und der Indexsortierungsprozess ist nach dem Hinzufügen des Index nicht klar zu erkennen)

Mit anderen Worten, die Daten rechts von erstellt die Originaldaten, die wir testen möchten. Die Daten werden auf diese Weise sortiert, bevor der Index erstellt wird. Alle nachfolgenden Daten basieren darauf, daher ist es besser, den Sortiereffekt danach zu sehen Index wird generiert.

Die Tabelle hat 4 Felder (id, a, b, c) mit insgesamt 27 Datenzeilen



2. Erstellen Sie Index a

Wie unten gezeigt, ändert sich die Indexstruktur nach dem Erstellen von Index a von der ursprünglichen Sortierung nach der Primärschlüssel-ID zu einer neuen Regel. Wir sagen, dass der Index tatsächlich eine Datenstruktur ist . Erstellen Sie dann den Index a, der eine neue Struktur erstellen soll, und sortieren Sie nach den Regeln von Feld a. Die erste Datenzeile, die durch die Primärschlüssel-ID dargestellt wird, ist 1, die zweite Datenzeile, dargestellt durch ID = 3, und die dritte Datenzeile dargestellt durch die Datenzeile ID=5. . .


Neue Sortier-Primärschlüssel-ID (ID stellt ihre Datenzeile dar): 1 3 5 6 9 16 18 23 26 2 10 11 12 13 14 15 20 25 4 7 8 17 19 21 22 24 27

Es ist nicht schwer herauszufinden, dass, wenn Feld a gleich ist, ihre Anordnung Sortieren nach Primärschlüssel-ID davor und danach, zum Beispiel ist der gleiche Wert a=1,1, aber ihre Reihenfolge ist, dass der ID-Wert 1, 3, 5, 6 ist. . Die entsprechenden Zeilen werden in einer ähnlichen Reihenfolge wie die Primärschlüssel-ID sortiert. (d. h. Sortieren bei gleichen Werten, mit der kleineren ID vorne)



3. Index erstellen (a,b)

Wie unten gezeigt, nach dem Erstellen des gemeinsamen Index (a ,b), in diesem Index In der Struktur wurde die ursprüngliche Sortierung nach der Primärschlüssel-ID in eine neue Regel geändert. Die Sortierregel sortiert zuerst nach Feld a und dann nach Feld b basierend auf a. Das heißt, basierend auf Index a wird auch Feld b sortiert.


Neue Sortier-Primärschlüssel-ID (ID stellt ihre Datenzeile dar): 6 18 18 23 10 15 20 7 22 27 1 3 26 2 11 25 4 8 24 5 9 16 12 13 14 17 19 21

Es ist nicht schwer, das zu finden, wenn die Werte der Felder a und b sind gleich, ihre Anordnung Vorher und Nachher werden auch durch die Primärschlüssel-ID bestimmt. Zum Beispiel die gleiche Zeile (18, 6, 23) mit a=1,1, b=2,1, aber ihre Reihenfolge ist 6, 18, 23 .

Feld (a,b) Index, zuerst nach einem Index sortieren, dann basierend auf a, nach b sortieren

6 18 23 10 15 20 7 22 27 1 3 26 2 11 25 4 8 24 5 9 16 12 13 14 17 19 21


IV. Index erstellen (a ,b,c)

Feld (a,b,c) Index, zuerst nach a,b Index sortieren, dann nach Basis von (a, b), sortieren nach c


Neue Sortier-Primärschlüssel-ID (ID stellt ihre Zeilendaten dar): 23 6 18 15 20 10 27 22 7 1 26 3 11 2 25 24 4 8 5 16 9 12 14 13 17 19 21



5. Fazit:



und Der vorherige Artikel Mysql-Index-BTree Type [Simplified] sagte dasselbe. Die letzte Reihe der Blattknoten im B-TREE-Baum ist von links nach rechts in dieser Reihenfolge angeordnet Bestellungen. Wäre die Suche mit der Bestellung nicht viel bequemer und schneller? Wenn bei der Suche nach einem Raum ein Index (Raumregistrierungstabelle) vorhanden ist, lesen Sie zunächst die Datenstruktur des Index (da er nur wenige Daten enthält und schnell zu lesen ist) und ermitteln Sie den Speicherort der tatsächlichen physischen Daten Nachdem Sie die Hausnummer gefunden haben, können Sie die Daten direkt von der Festplatte abrufen. Dies ist ein Prozess zum Lesen von Daten. Wenn kein Index vorhanden ist, wissen Sie das Ziel nicht. Suchen Sie einfach von Raum zu Raum.

Wenn kein Index vorhanden ist, ist die Primärschlüssel-ID tatsächlich ihr Index, geordnet nach den Regeln der Primärschlüssel-ID von klein nach groß;

Wenn es etwas gibt Während der Indizierung entsprechen Index a, gemeinsamer Index (a, b) und gemeinsamer Index (a, b, c) den drei B+TREE-Strukturen und den physischen Festplatten, auf die am Ende von verwiesen wird Blattknoten sind unterschiedlich.

Fazit:

1. Wenn kein Index erstellt wird, wird er in aufsteigender Reihenfolge nach dem ID-Primärschlüssel angeordnet

2. Wenn Index a erstellt wird, wird ein neuer Strukturindex erstellt (B+TREE) wird zum Aufzeichnen einer neuen Strukturregel verwendet, um die schnelle Suche zu erleichtern

3 Beim Erstellen von Index a, Index ab und Index abc werden die entsprechenden Daten erstellt Die Reihenfolge der drei ist unterschiedlich

4. Der Index abc berücksichtigt sowohl den Index ab als auch den Index a. Wenn also ersterer verfügbar ist, müssen die beiden letzteren nicht erstellt werden

5. Wenn ein Index erstellt wird, werden nicht indizierte Spalten standardmäßig nach aufsteigender ID sortiert

Das Obige ist die detaillierte Erklärung von MySQL-Index 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