Heim  >  Artikel  >  Datenbank  >  MySQL-Clustered-Index

MySQL-Clustered-Index

黄舟
黄舟Original
2017-01-20 17:07:281657Durchsuche

Gesamtübersicht

1. Die Datenzeile wird direkt in der Hauptindexdatei von innodb gespeichert, die als Clustered-Index bezeichnet wird. Der Sekundärindex verweist auf einen Verweis auf den Primärschlüssel

2. In myisam verweisen sowohl die primären Indizes als auch die Subindizes auf physische Zeilen (Festplattenspeicherorte)

Haha, ich habe zwei Wörter gesagt, die ich anscheinend nicht verstanden habe.

Eins. Beliebte Erklärung

Wir können es so verstehen:

Clustered Index (innodb): Der Blattknoten des Index ist der Datenknoten, und darunter befinden sich tatsächliche Daten.

Nicht gruppierter Index (myisam): Die Blattknoten sind immer noch Indexknoten, wobei Zeiger auf die entsprechenden Datenblöcke zeigen.

Erklären Sie mit Bildern:

MySQL-Clustered-Index

MySQL-Clustered-Index

Wie Sie sehen können, sind die Typen unter verschiedenen Motoren unterschiedlich.

Der Hauptunterschied besteht darin, ob sich unter den Blattknoten Datenblöcke befinden.

(Wenn kein Primärschlüssel vorhanden ist, wird einer erstellt. Innodb ist nach Clustered-Index organisiert)

2. Vor- und Nachteile:

Split-Problem:

Da es sich um eine Baumstruktur handelt, können Blattknoten geteilt werden


Dann kommt das Problem ,

Bei nicht gruppierten Indizes (Myisam) hat die unter dem Knoten gespeicherte physische Zeilenadresse einen kleinen Inhalt, wird im Speicher zwischengespeichert und teilt sich schnell.

Beim Clustered-Index (innodb) ist dieses Problem schwerwiegender. Die „Zeilendaten“ werden unter dem Knoten gespeichert.

Da sich unter dem Knoten Datendateien befinden, erfolgt die Aufteilung des Knotens Seien Sie langsamer, versuchen Sie für den Primärschlüssel, Ganzzahlen und inkrementelle Ganzzahlen zu verwenden. Wenn die Primärschlüsseldaten unregelmäßig sind, werden sie beim Speichern im Blattknoten erneut aufgeteilt. und myisam zeichnet nur eine Adresse auf, solange die Adresse einfach geteilt und ersetzt wird.

Zum Beispiel:

Zum Beispiel ist die Aufteilung wie ein Verschiebungsprozess. Bei einem Clustered-Index (innodb) erfordert das Verschieben tatsächlich das Aufteilen und Verschieben aller Daten im Home-Bereich (mysiam), es ist einfach, die Hausnummer des erfassten Hauses zu verschieben, aber die Daten, auf die sie verweist, müssen nicht verschoben werden.


Drei. Testdemonstration:

Fügen Sie unter der Innodb-Engine 1000 Daten auf zwei Arten ein: regelmäßig und unregelmäßig.

Nach dem Test dauerte die erste Einfügung in der Reihenfolge aufsteigender Primärschlüssel 37 Sekunden; die zweite Einfügung in einer Reihenfolge außerhalb der Reihenfolge dauerte 42 Sekunden, also ganze 5 Sekunden langsamer. Der vorhergesagte Grund dafür ist Das Einfügen in der richtigen Reihenfolge muss durchgeführt werden. Das Verschieben von Blattknoten erfordert Zeit, was bedeutet, dass der Zeitunterschied zwischen dem Teilen von Knoten und dem Verschieben von Seiten besteht, während das sequentielle Einfügen selten zu einer Knotenteilung führt.

MySQL-Clustered-Index

Mapping-Schlussfolgerung:

1. Verwenden Sie die Mysiam-Engine für Lesevorgänge

2. Wählen Sie monotone Daten als Index aus schneller

Mehr: Mysql-Index-Zusammenfassung


Überprüfen Sie es unten:

Variablen wie „%innodb%“ anzeigen

Status anzeigen;

Sie werden feststellen, dass es ein Feld gibt ->innodb_pages_scribed (wie viele Seiten wurden in dieses Feld geschrieben)

MySQL-Clustered-Index

Wann Beim zufälligen Schreiben ist die Häufigkeit, mit der die Seite geschrieben wird, höher als beim sequentiellen Schreiben. Dies liegt an der Aufteilung und Verschiebung, sodass die Anzahl der Schreibvorgänge größer ist und mehr Zeit aufgewendet wird, was auch erklärt, warum es ein 5-faches Schreiben gibt. zweiter Ereignisunterschied zwischen den beiden.


MyISAM:

Dies ist der Standardtyp, der auf dem traditionellen ISAM-Typ basiert: Indexed Sequential Access Method (indizierte sequentielle Zugriffsmethode). Abkürzung für: Es handelt sich um eine Standardmethode zum Speichern von Datensätzen und Dateien. Im Vergleich zu anderen Speicher-Engines verfügt MyISAM über die meisten Tools zum Überprüfen und Reparieren von Tabellen. MyISAM-Tabellen können komprimiert werden und unterstützen die Volltextsuche. Sie sind nicht transaktionssicher und unterstützen keine Fremdschlüssel. Wenn Dinge zurückgesetzt werden, führt dies zu einem unvollständigen Rollback und ist nicht atomar. Wenn Sie eine große Anzahl von ausführen SELECT, MyISAM ist die bessere Wahl.


InnoDB:

Dieser Typ ist transaktionssicher. Er hat die gleichen Eigenschaften wie BDB-Typen, sie unterstützen auch Fremdschlüssel und sind sehr schnell . Es verfügt über umfangreichere Funktionen als BDB, wenn Sie es benötigen Wenn Sie eine transaktionssichere Speicher-Engine wünschen, wird empfohlen, diese zu verwenden. Wenn Ihre Daten aus Leistungsgründen eine große Anzahl von INSERT- oder UPDATE-Operationen durchführen, sollten Sie die InnoDB-Tabelle verwenden.

Das Obige ist der Inhalt des MySQL-Clustered-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