Heim  >  Artikel  >  Datenbank  >  Ausführliche Erläuterung der MySQL-Indizes und -Strukturen

Ausführliche Erläuterung der MySQL-Indizes und -Strukturen

黄舟
黄舟Original
2017-03-01 13:32:561088Durchsuche

B-Baum

B-Baum wird auch als ausgeglichener Mehrpfad-Suchbaum (nicht binär) bezeichnet Reduzieren Sie den Zwischenvorgang, der beim Aufzeichnen auftritt, und beschleunigen Sie so den Zugriff.
Schlüsselwert des linken untergeordneten KnotensDer Algorithmus zum Abrufen von Daten nach Schlüssel im B-Baum ist sehr intuitiv: Führen Sie zunächst eine binäre Suche vom Wurzelknoten aus durch, falls gefunden. Dann die Die Daten des entsprechenden Knotens werden zurückgegeben, andernfalls wird der Knoten, auf den der Zeiger des entsprechenden Intervalls zeigt, rekursiv durchsucht, bis der Knoten gefunden wird oder der Nullzeiger gefunden wird. Die erste Suche ist erfolgreich, die zweite Suche schlägt fehl.
Ausführliche Erläuterung der MySQL-Indizes und -Strukturen
(Schlüssel ist der Schlüsselwert des Datensatzes. Für verschiedene Datensätze unterscheidet sich der Schlüssel voneinander; Daten sind die Daten im Datensatz mit Ausnahme des Schlüssels)

B +Baum

B+Tree ist ein verbesserter B-Baum.
Ausführliche Erläuterung der MySQL-Indizes und -Strukturen
(Schlüssel ist der Schlüsselwert des Datensatzes. Für verschiedene Datensätze unterscheidet sich der Schlüssel voneinander; Daten sind die Daten im Datensatz mit Ausnahme des Schlüssels)

Kompatibel mit B-Tree Im Vergleich zu B+Tree gibt es folgende Unterschiede:

  • Die Obergrenze des Zeigers jedes Knotens beträgt 2d statt 2d+1.

  • Interne Knoten speichern keine Daten, nur Schlüssel speichern keine Zeiger.

Warum verwendet die Datenbank dann B-Tree?

Die mechanische Festplatte des Computers. Um die Wartezeit für mechanische Bewegungen zu amortisieren, greift die Festplatte auf mehrere zu Nicht eins, eine solche Informationseinheit, die gleichzeitig gelesen wird, ist eine Seite. Wir können die Anzahl der gelesenen oder geschriebenen Seiten als Hauptnäherungswert für die Gesamtzeit des Festplattenzugriffs verwenden . B-Tree-Algorithmen müssen zu jedem Zeitpunkt nur eine bestimmte Anzahl von Seiten im Speicher behalten. Das Design von B-Tree berücksichtigt das Vorlesen der Festplatte. Ein B-Tree-Knoten ist normalerweise so groß wie eine vollständige Festplattenseite (Seite), und die Größe der Festplattenseite begrenzt die untergeordneten Elemente, die ein B-Tree enthält. Der Baumknoten kann die Anzahl (Verzweigungsfaktor) enthalten. Dies hängt natürlich auch von der Größe eines Schlüsselworts im Verhältnis zu einer Seite ab.

Um E/A-Vorgänge zu minimieren, werden Festplattenlesevorgänge jedes Mal im Voraus gelesen, und die Größe ist normalerweise ein ganzzahliges Vielfaches der Seite. Selbst wenn nur ein Byte gelesen werden muss, liest die Festplatte eine Datenseite (normalerweise 4 KB) und legt sie in Seiteneinheiten im Speicher ab. Denn das Lokalitätsprinzip besagt, dass bei der üblichen Nutzung eines Datenelements auch unmittelbar benachbarte Daten genutzt werden.

B-Baum: Wenn für einen Abruf der Zugriff auf 4 Knoten erforderlich ist, verwendet der Datenbanksystemdesigner das Prinzip des Festplatten-Vorauslesens, um die Größe des Knotens als eine Seite zu entwerfen, sodass für das Lesen eines Knotens nur ein I erforderlich ist /O-Vorgang: Um diesen Abrufvorgang abzuschließen, sind bis zu 3 E/As erforderlich (der Stammknoten befindet sich im Speicher).

Je kleiner der Datensatz, desto mehr Daten werden in jedem Knoten gespeichert, desto kleiner ist die Höhe des Baums, desto weniger E/A-Vorgänge und desto höher ist die Abrufeffizienz.

B+Baum: Nicht-Blattknoten speichern nur Schlüssel, wodurch die Größe von Nicht-Blattknoten erheblich reduziert wird, sodass jeder Knoten mehr Datensätze speichern kann.

Der Baum ist kürzer und erfordert weniger E/A . B+Tree hat also eine bessere Leistung.

Was ist ein Index?

Ein Index ist einfach eine Datenstruktur.

Die Kosten für die Indizierung

Die Indizierung hat auch ihren Preis: Die Indexdatei selbst verbraucht Speicherplatz und der Index erhöht die Belastung durch das Einfügen, Löschen und Ändern von Datensätzen Außerdem werden Ressourcen verbraucht, um Indizes zu verwalten, sodass mehr Indizes nicht immer besser sind. Im Allgemeinen wird die Erstellung eines Index unter zwei Umständen nicht empfohlen.

Der erste Fall besteht darin, dass die Tabellendatensätze relativ klein sind.
Der andere Fall, in dem die Erstellung eines Index nicht empfohlen wird, besteht darin, dass der Index selektiv ist niedrig. Die sogenannte Indexselektivität bezieht sich auf das Verhältnis eindeutiger Indexwerte (auch Kardinalität genannt) zur Anzahl der Tabellendatensätze (#T)

Indexkategorie

1

2. Eindeutiger Index
3. Primärschlüsselindex
4. Kombinierter Index

In MySQL verwendeter Index

B+Tree wird in MySQL häufig als Index verwendet Die Implementierung unterscheidet sich je nach Clustered-Index und Nicht-Clustered-Index.

Clustered-Index und Nicht-Clustered-Index

Der sogenannte Clustered-Index bedeutet, dass die Hauptindexdatei und die Datendatei dieselbe Datei sind, die hauptsächlich in der Innodb-Speicher-Engine verwendet wird. In dieser Indeximplementierung sind die Daten auf den Blattknoten von B+Tree die Daten selbst und der Schlüssel ist der Primärschlüssel. Wie unten gezeigt:
Ausführliche Erläuterung der MySQL-Indizes und -Strukturen
(t1-Tabelle)
Ausführliche Erläuterung der MySQL-Indizes und -Strukturen
(t2-Tabelle)
Ausführliche Erläuterung der MySQL-Indizes und -Strukturen
(Datei, die der Datenbank entspricht)
Weil von InnoDB Die Datendateien selbst müssen nach Primärschlüssel aggregiert werden, daher erfordert InnoDB, dass die Tabelle einen Primärschlüssel haben muss (MyISAM hat möglicherweise keinen, wenn nicht explizit angegeben, wählt das MySQL-System automatisch eine Spalte aus, die die eindeutig identifizieren kann). Wenn keine solche Spalte vorhanden ist, 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.

Die Hauptunterschiede zwischen MyISAM- und InnoDB-Datenspeicher-Engines in der MySQL-Datenbank

:
MyISAM ist nicht transaktionssicher, während InnoDB transaktionssicher ist.
Die Granularität von MyISAM-Sperren erfolgt auf Tabellenebene, während InnoDB Sperren auf Zeilenebene unterstützt.
MyISAM unterstützt den Volltexttypindex, InnoDB unterstützt jedoch keinen Volltextindex.
MyISAM ist relativ einfach und daher hinsichtlich der Effizienz besser als InnoDB. Kleine Anwendungen können die Verwendung von MyISAM in Betracht ziehen.
MyISAM-Tabellen werden in Form von Dateien gespeichert. Die Verwendung von MyISAM-Speicher bei der plattformübergreifenden Datenübertragung erspart Ihnen viel Ärger.
InnoDB-Tabellen sind sicherer als MyISAM-Tabellen. Sie können nicht-transaktionale Tabellen in transaktionale Tabellen umwandeln (alter table tablename type=innodb) und dabei sicherstellen, dass keine Daten verloren gehen.
Anwendungsszenario:
MyISAM verwaltet nicht-transaktionale Tabellen. Es bietet Hochgeschwindigkeitsspeicherung und -abruf sowie Volltextsuchfunktionen. Wenn Ihre Anwendung eine große Anzahl von SELECT-Abfragen ausführen muss, ist MyISAM die bessere Wahl.
InnoDB wird für Transaktionsverarbeitungsanwendungen verwendet und verfügt über zahlreiche Funktionen, einschließlich ACID-Transaktionsunterstützung. Wenn Ihre Anwendung eine große Anzahl von INSERT- oder UPDATE-Vorgängen ausführen muss, sollten Sie InnoDB verwenden, was die Leistung gleichzeitiger Mehrbenutzer-Vorgänge verbessern kann.

Ergänzung

Hauptspeicherspeicher

Abrufvorgang
Wenn das System den Hauptspeicher lesen muss, wird das Adresssignal auf den Adressbus gelegt und an den weitergeleitet Hauptspeicher Nachdem der Hauptspeicher das Adresssignal gelesen hat, analysiert er das Signal, lokalisiert die angegebene Speichereinheit und legt dann die Daten dieser Speichereinheit auf den Datenbus, damit andere Komponenten sie lesen können.
Der Vorgang des Schreibens in den Hauptspeicher ist ähnlich. Das System platziert die Geräteadresse und die zu schreibenden Daten auf dem Adressbus bzw. dem Datenbus. Der Hauptspeicher liest den Inhalt der beiden Busse und führt entsprechende Schreibvorgänge aus.
Hier ist zu erkennen, dass die Zeit des Hauptspeicherzugriffs nur linear mit der Anzahl der Zugriffe zusammenhängt. Da keine mechanische Operation erfolgt, hat die „Entfernung“ der Daten, auf die zweimal zugegriffen wird, keinen Einfluss auf die Zeit. Zum Beispiel zuerst abrufen Der Zeitaufwand für das Abrufen von A0 und dann für A1 ist derselbe wie für das Abrufen von A0 und dann für D3

Prinzip des Festplattenzugriffs

Wenn Daten von der Festplatte gelesen werden müssen, wird die Das System leitet die logische Datenadresse an die Festplatte weiter. Die Steuerschaltung der Festplatte übersetzt die logische Adresse gemäß der Adressierungslogik in eine physische Adresse, d. h. sie bestimmt, auf welcher Spur und in welchem ​​Sektor sich die zu lesenden Daten befinden. Um die Daten in diesem Sektor zu lesen, muss der Magnetkopf über diesem Sektor platziert werden. Dazu muss sich der Magnetkopf bewegen, um ihn an der entsprechenden Spur auszurichten. Dieser Vorgang wird als Suchen bezeichnet wird als Suchzeit bezeichnet. Der Zielsektor wird unter dem Kopf gedreht. Die für diesen Vorgang aufgewendete Zeit wird als Rotationszeit bezeichnet.

Das Obige ist eine ausführliche und detaillierte Erklärung des MySQL-Index und der Struktur. 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