Detaillierte Erläuterung des MySQL-Clusterindex und des Nicht-Clusterindex

Detaillierte Erläuterung des MySQL-Clusterindex und des Nicht-Clusterindex

1. Clustered-Index

Tabellendaten werden in der Reihenfolge des Index gespeichert, d. h. die Reihenfolge der Indexelemente entspricht der physischen Reihenfolge der Datensätze in der Tabelle. Bei einem gruppierten Index speichern die Blattknoten die eigentlichen Datenzeilen und es gibt keine separaten Datenseiten.

Sie können höchstens einen gruppierten Index für eine Tabelle erstellen, da es für die tatsächlichen Daten nur eine physische Reihenfolge geben kann.

Aus den physischen Dateien ist auch ersichtlich, dass die Datendateien von InnoDB (Clustered Index) nur die Datenstrukturdatei .frm und die Datendatei .idb haben. Die Daten- und Indexinformationen werden zusammen in .idb gespeichert.

2. Nicht gruppierter Index

Die Reihenfolge, in der Tabellendaten gespeichert werden, hat nichts mit der Reihenfolge der Indizes zu tun. Bei einem nicht gruppierten Index enthält der Blattknoten den Indexfeldwert und einen logischen Zeiger auf die Datenzeile der Datenseite , und die Anzahl der Zeilen entspricht der Datenmenge in der Datentabelle.

Aus der physischen Datei ist auch ersichtlich, dass die MyISAM-Indexdatei (nicht gruppierter Index) .MYI und die Datendatei .MYD separat gespeichert und relativ unabhängig sind.

Zusammenfassen:

Der Unterschied zwischen einem gruppierten Index und einem nicht gruppierten Index ist:

Die Blattknoten des gruppierten Indexes (innoDB) sind Datenknoten;

Die Blattknoten nicht gruppierter Indizes (MyISAM) sind zwar immer noch Indexdateien, die Indexdateien enthalten jedoch Zeiger auf die entsprechenden Datenblöcke.

Bei einem nicht gruppierten Index müssen jedes Mal, wenn die erforderliche Zeilennummer über den Index abgerufen wird, Daten über die Datenträgeradresse auf dem Blatt von der Festplatte abgerufen werden (die Zeile zurückgegeben werden), was zeitaufwändig ist. Um die Zeit zum Abrufen von Daten zu optimieren, verwendet die InnoDB-Engine einen gruppierten Index.
Clustered Index, d. h. Speicherung der Daten auf den Indexblattseiten. Bei der InnoDB-Engine speichert die Blattseite nicht mehr die der Zeile entsprechende Adresse, sondern direkt die Daten.

Dadurch wird der Zeitaufwand durch die Rücksendeoperation vermieden. Dadurch ist InnoDB bei manchen Abfragen sogar schneller als MyISAM!

PS: Was die Abfragezeit betrifft, wird allgemein angenommen, dass MyISAM Funktionalität zugunsten der Leistung opfert und Abfragen schneller sind. Aber das ist nicht unbedingt der Fall. In den meisten Fällen ist MyISAM tatsächlich schneller als InnoDB. Die Abfragezeit wird jedoch von vielen Faktoren beeinflusst. Der Grund für die Verlangsamung von InnoDB-Abfragen liegt darin, dass es Transaktionen, Rollbacks usw. unterstützt, sodass die Blattseiten von InnoDB tatsächlich die Transaktions-ID (mit anderen Worten die Versionsnummer) und den Rollback-Zeiger enthalten.

Aktionsbeschreibung Verwenden eines gruppierten Indexes Verwenden eines nicht gruppierten Indexes
Spalten werden oft nach Gruppen sortiert verwenden verwenden
Gibt Daten innerhalb eines Bereichs zurück verwenden Nicht verwendet
Ein oder sehr wenige unterschiedliche Werte Nicht verwendet Nicht verwendet
Geringe Anzahl unterschiedlicher Werte verwenden Nicht verwendet
Große Anzahl unterschiedlicher Werte Nicht verwendet verwenden
Häufig aktualisierte Kolumnen Nicht verwendet verwenden
Fremdschlüsselspalten verwenden verwenden
Primärschlüsselspalten verwenden verwenden
Häufiges Ändern von Indexspalten Nicht verwendet verwenden

Kurz gesagt: Clustered-Indizes sind nicht für häufig aktualisierte Spalten, häufig geänderte indizierte Spalten und eine kleine Anzahl unterschiedlicher Werte geeignet.

Oben finden Sie eine ausführliche Erläuterung des MySQL-Clusterindex und des Nicht-Clusterindex. Weitere Informationen zum MySQL-Clusterindex und Nicht-Clusterindex finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • MySQL-Lernprogramm Clustered Index
  • Beispielanalyse des Seitenaufteilungsprinzips des MySQL-Clusterindex
  • Grundlegendes zu MySQL-Clusterindizes und wie Clusterindizes wachsen

<<:  Detaillierte Erläuterung der Verwendung des DockerHub-Image-Repository

>>:  Typescript+React zum Erzielen einfacher Drag-and-Drop-Effekte auf Mobilgeräten und PCs

Artikel empfehlen

So installieren Sie OpenJDK in Docker und führen das JAR-Paket aus

Bild herunterladen Docker-Pull OpenJDK Erstellen ...

Neun erweiterte Methoden zur Deduplizierung von JS-Arrays (erprobt und effektiv)

Vorwort Die allgemeinen Methoden sind hier nicht ...

Zusammenfassung der Lösung für den Webpack -v-Fehler von Vue

Xiaobai lernte Vue kennen, dann lernte er Webpack...

Beispiel für Formularaktion und „onSubmit“

Erstens: Aktion ist ein Attribut des Formulars. HT...

Detailliertes Beispiel des Kettenprogrammierstils von jQuery

Das Implementierungsprinzip der Kettenprogrammier...

VSCode-Entwicklung UNI-APP Konfigurations-Tutorial und Plugin

Inhaltsverzeichnis Vorne geschrieben Vorsichtsmaß...

CSS realisiert die Layoutmethode „Fest links“ und „Adaptiv rechts“

1. Schwebendes Layout 1. Lassen Sie zuerst das Di...

Anweisungen zur Verwendung der MySQL-Isolations-Leseansicht

Welche historische Version kann die aktuelle Tran...

Javascript-Bereich und Abschlussdetails

Inhaltsverzeichnis 1. Geltungsbereich 2. Geltungs...

CSS3-Radarscan-Kartenbeispielcode

Verwenden Sie CSS3, um coole Radar-Scan-Bilder zu...

Mehrere beliebte Website-Navigationsrichtungen in der Zukunft

<br />Dies ist nicht nur ein Zeitalter der I...