Heim > Datenbank > MySQL-Tutorial > Hauptteil

Der Unterschied zwischen den Indeximplementierungsmethoden der MyISAM- und InnoDB-Speicher-Engines

一个新手
Freigeben: 2017-09-11 11:26:06
Original
1314 Leute haben es durchsucht

1. MyISAM-Indeximplementierung:

1) Primärschlüsselindex:

MyISAM-Engine verwendet B+Tree als Indexstruktur und das Datenfeld des Der Blattknoten speichert die Adresse des Datensatzes. Die folgende Abbildung ist das schematische Diagramm des MyISAM-Primärschlüsselindex:


(Bild myisam1)

Angenommen, die Tabelle enthält drei Spalten Gehen wir davon aus, dass wir Col1 als Primärschlüssel verwenden. Die Abbildung myisam1 zeigt den Primärindex (Primärschlüssel) einer MyISAM-Tabelle. Es ist ersichtlich, dass die Indexdatei von MyISAM nur die Adresse des Datensatzes speichert.

2) Sekundärindex (Sekundärschlüssel)

In MyISAM gibt es keinen strukturellen Unterschied zwischen dem Primärindex und dem Sekundärindex (Sekundärschlüssel). Für den Primärindex muss der Schlüssel eindeutig sein, während der Schlüssel des Sekundärindex wiederholt werden kann. Wenn wir einen Hilfsindex für Spalte2 erstellen, ist die Struktur dieses Index wie folgt:

ist auch dieselbe B+Tree, das Datenfeld speichert die Adresse des Datensatzes. Daher besteht der Algorithmus zum Indexabruf in MyISAM darin, zuerst den Index gemäß dem B+Tree-Suchalgorithmus zu durchsuchen. Wenn der angegebene Schlüssel vorhanden ist, wird der Wert seines Datenfelds entnommen und dann der Wert der Daten Das Feld wird als Adresse zum Lesen des entsprechenden Datensatzes verwendet.

Die Indexierungsmethode von MyISAM wird auch als „nicht geclustert“ bezeichnet. Der Grund, warum sie so genannt wird, besteht darin, sie vom Clustered-Index von InnoDB zu unterscheiden.

2. InnoDB-Indeximplementierung

Obwohl InnoDB auch B+Tree als Indexstruktur verwendet, unterscheidet sich die spezifische Implementierungsmethode völlig von MyISAM.

1) Primärschlüsselindex:

   MyISAM-Indexdatei und Datendatei sind getrennt, und die Indexdatei speichert nur die Adresse des Datensatzes. In InnoDB ist die Tabellendatendatei selbst eine von B + Tree organisierte Indexstruktur, und das Blattknoten-Datenfeld dieses Baums speichert vollständige Datensätze. Der Schlüssel dieses Index ist der Primärschlüssel der Datentabelle, daher ist die InnoDB-Tabellendatendatei selbst der Primärindex.

                                                                                                                                          

(Abbildung inndb-Primärschlüsselindex) ist ein schematisches Diagramm des InnoDB-Primärindex (auch eine Datendatei). Sie können sehen, dass die Blattknoten vollständige Datensätze enthalten. Diese Art von Index wird Clustered Index genannt. Da die Datendateien von InnoDB selbst nach Primärschlüssel aggregiert werden, erfordert InnoDB, dass die Tabelle einen Primärschlüssel haben muss (MyISAM verfügt möglicherweise nicht über einen). Wenn dieser nicht explizit angegeben wird, wählt das MySQL-System automatisch eine Spalte aus, die die Daten eindeutig identifizieren kann Datensatz als Primärschlüssel. Für diesen Spaltentyp generiert MySQL automatisch ein implizites Feld als Primärschlüssel für die InnoDB-Tabelle. Die Länge dieses Felds beträgt 6 Bytes und der Typ ist lang.

2). Hilfsindex von InnoDB

Alle Hilfsindizes von InnoDB beziehen sich auf den Primärschlüssel als Datenfeld. Die folgende Abbildung zeigt beispielsweise einen auf Col3 definierten Hilfsindex:


Die InnoDB-Tabelle wird basierend auf dem Clustered-Index erstellt. Daher kann der InnoDB-Index eine sehr schnelle Primärschlüssel-Suchleistung bieten. Sein Hilfsindex (Sekundärindex, also Nicht-Primärschlüsselindex) enthält jedoch auch die Primärschlüsselspalte. Wenn also der Primärschlüssel relativ groß definiert ist, sind auch andere Indizes groß. Wenn Sie viele Indizes für die Tabelle definieren möchten, versuchen Sie, den Primärschlüssel so klein wie möglich zu definieren. InnoDB komprimiert keine Indizes.

Als Vergleichskriterium wird der ASCII-Code des Textzeichens verwendet. Die Clustered-Index-Implementierung macht die Suche nach Primärschlüssel sehr effizient, aber die Hilfsindexsuche erfordert das zweimalige Abrufen des Index: Rufen Sie zuerst den Hilfsindex ab, um den Primärschlüssel zu erhalten, und verwenden Sie dann den Primärschlüssel, um die Datensätze im Primärschlüssel abzurufen Index.

Die Indeximplementierungsmethoden verschiedener Speicher-Engines sind sehr hilfreich für die korrekte Verwendung und Optimierung von Indizes. Wenn man beispielsweise die Indeximplementierung von InnoDB kennt, ist es leicht zu verstehen, warum sie nicht empfohlen wird zu lange Felder als Primärschlüssel zu verwenden, da sich alle Sekundärindizes auf den Primärindex beziehen und ein zu langer Primärindex den Sekundärindex zu groß macht. Ein weiteres Beispiel: Die Verwendung nichtmonotoner Felder als Primärschlüssel ist in InnoDB keine gute Idee, da die InnoDB-Datendatei selbst ein B+Baum ist und dazu führt, dass die Datendatei die Eigenschaften des B+Baums beibehält Beim Einfügen neuer Datensätze sind häufige Split-Anpassungen sehr ineffizient, und die Verwendung von Feldern mit automatischer Inkrementierung als Primärschlüssel ist eine gute Wahl.

Der Unterschied zwischen dem InnoDB-Index und dem MyISAM-Index :

Erstens der Unterschied zwischen dem Hauptindex, der InnoDB-Datendatei selbst ist die Indexdatei. Der Index und die Daten von MyISAM sind getrennt.

Der zweite ist der Unterschied zwischen Hilfsindizes: Das Hilfsindexdatenfeld von InnoDB speichert den Wert des Primärschlüssels des entsprechenden Datensatzes anstelle der Adresse. Es gibt keinen großen Unterschied zwischen dem Sekundärindex von MyISAM und dem Primärindex.

MySql-Indexalgorithmus-Prinzipanalyse (leicht zu verstehen, ich spreche nur vom B-Tree)

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen den Indeximplementierungsmethoden der MyISAM- und InnoDB-Speicher-Engines. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!