B-Baum-Index Verschiedene Speicher-Engines können auch unterschiedliche Speicherstrukturen verwenden. Beispielsweise verwendet die NDB-Cluster-Speicher-Engine intern eine T-Tree-Struktur zum Speichern dieses Indexes, obwohl ihr Name BTREE lautet; InnoDB verwendet einen B+Tree. B-Tree speichert normalerweise alle Werte der Reihe nach und jede Blattseite hat den gleichen Abstand zur Wurzel. Das folgende Diagramm spiegelt grob die Funktionsweise von InnoDB-Indizes wider. Warum verwendet MySQL für den Index einen B+-Baum statt eines B-Baums oder Rot-Schwarz-Baums? Nach dem Lesen des obigen Artikels können Sie verstehen, warum der B-Tree-Index schnell auf Daten zugreifen kann. Da die Speicher-Engine keinen vollständigen Tabellenscan mehr durchführen muss, um die erforderlichen Daten zu erhalten, enthält der Blattknoten alle Elementinformationen und jeder Blattknotenzeiger zeigt auf den nächsten Knoten. Daher eignet er sich sehr gut zum Durchsuchen von Bereichsdaten. Der Index ordnet mehrere Werte entsprechend der Reihenfolge an, in der sie in der CREATE TABLE-Anweisung definiert sind. Die Indexsortierregel lautet dann Nachname, Vorname, Geburtsdatum. Arten von Abfragen, die B-Tree-Indizes verwenden können Nehmen Sie ein Partikel: CREATE TABLE Personen ( Nachname VARCHAR ( 50 ) NICHT NULL, vorname VARCHAR ( 50 ) NICHT NULL, Geburtsdatum NICHT NULL, Geschlechtsaufzählung ('m', 'f') NICHT NULL, SCHLÜSSEL (Nachname, Vorname, Geburtsdatum) ); Der Index dieser Tabelle lautet wie folgt: Typ Ergebnis Die Typergebniswerte vom besten bis zum schlechtesten sind: System > const > eq_ref > ref > Volltext > ref_or_null > Index_Merge > eindeutige Unterabfrage > Index_Unterabfrage > Bereich > Index > ALLE Generell muss darauf geachtet werden, dass die Abfrage mindestens die Bereichsebene, besser noch die Referenzebene erreicht, da es sonst zu Performanceproblemen kommen kann. Possible_keys: von SQL verwendeter Index Schlüssel: Zeigt den Schlüssel (Index), den MySQL tatsächlich verwenden wollte. Wenn kein Index ausgewählt ist, ist der Schlüssel NULL (1) Vollständiger Wertabgleich. Vollständiger Wertabgleich bezieht sich auf den Abgleich aller Spalten im Index. Beispielsweise kann der Index (Nachname, Vorname, Geburtsdatum) der obigen Tabelle „Personen“ verwendet werden, um Personen zu finden, deren Nachname = „Cuba Allen“, Vorname = „Chuang“ und Geburtsdatum = „01.01.1996“ ist. Dies bedeutet, dass alle Spalten im Index für den Abgleich verwendet werden, also ein vollständiger Werteabgleich erfolgt. mysql> EXPLAIN select * from People where Nachname = 'aaa' und Vorname = 'bbb' und Geburtsdatum = '20.11.2020' \G; *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: Personen Partitionen: NULL Typ: ref mögliche Schlüssel: Nachname Schlüssel: Nachname <-----Sie können sehen, dass dieser Schlüssel der Index ist, den wir definiert haben. Schlüssellänge: 307 Verweis: konstant, konstant, konstant Reihen: 1 gefiltert: 100,00 Extra: NULL 1 Zeile im Satz, 1 Warnung (0,00 Sek.) FEHLER: Keine Abfrage angegeben (2) Für die Übereinstimmung mit dem äußersten linken Präfix können Sie nur die erste Spalte des Index verwenden. Beispielsweise kann es verwendet werden, um Personen zu finden, deren Nachname = "aaa", also Personen, deren Nachname Zeng ist. Hier wird nur die äußerste linke Spalte des Index zum Abgleichen verwendet, also zum Abgleichen des äußersten linken Präfixes. mysql> EXPLAIN select * from People where Nachname = 'aaa' \G; *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: Personen Partitionen: NULL Typ: ref mögliche Schlüssel: Nachname Schlüssel: Nachname <----Verwendeter Index Schlüssellänge: 152 Verweis: const Reihen: 3 gefiltert: 100,00 Extra: NULL 1 Zeile im Satz, 1 Warnung (0,00 Sek.) FEHLER: Keine Abfrage angegeben (3) Das Zuordnen eines Spaltenpräfixes kann nur mit dem Anfangsteil des Wertes einer Spalte übereinstimmen. Beispielsweise kann es verwendet werden, um Personen zu finden, deren Nachname WIE „a%“ ist, d. h. um alle Personen zu finden, deren Nachname mit Z beginnt. Hier wird für die Übereinstimmung nur das Präfix der äußersten linken Spalte des Index verwendet, d. h. es wird mit dem Spaltenpräfix abgeglichen. mysql> EXPLAIN select * from People where Nachname = "a%" \G; *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: Personen Partitionen: NULL Typ: ref mögliche Schlüssel: Nachname Schlüssel: Nachname <--- verwendeter Index Schlüssellänge: 152 Verweis: const Reihen: 1 gefiltert: 100,00 Extra: NULL 1 Zeile im Satz, 1 Warnung (0,00 Sek.) FEHLER: Keine Abfrage angegeben (4) Um einen Bereichswert abzugleichen, können Sie nur die erste Spalte des Index verwenden, um nach Daten zu suchen, die in einen bestimmten Bereich fallen. Beispielsweise kann es verwendet werden, um Personen zu finden, deren Nachname zwischen „aaa“ und „aaabbbccc“ liegt. Hier wird nur das Präfix der äußersten linken Spalte des Index für die Bereichsübereinstimmung verwendet, d. h. für die Übereinstimmung mit dem Bereichswert. mysql> EXPLAIN select * from People where Nachname ZWISCHEN ‚aaa‘ und ‚aaabbbccc‘\G; *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: Personen Partitionen: NULL Typ: Bereich mögliche Schlüssel: Nachname Schlüssel: Nachname <--- verwendeter Index Schlüssellänge: 152 Ref: NULL Reihen: 3 gefiltert: 100,00 Extra: Indexbedingung verwenden 1 Zeile im Satz, 1 Warnung (0,00 Sek.) FEHLER: Keine Abfrage angegeben (5) Eine genaue Übereinstimmung einer Spalte und eine Bereichsübereinstimmung einer anderen Spalte kann zu einer vollständigen Übereinstimmung der ersten Spalte und einer Bereichsübereinstimmung der zweiten Spalte führen. Beispielsweise kann es verwendet werden, um Personen mit Nachname = "aaa" und Vorname wie "b%" zu finden, also um Personen zu finden, deren Nachname Zeng ist und deren Vorname mit C beginnt. Hier wird die äußerste linke Spalte des Index für die exakte Übereinstimmung und die zweite Spalte für die Bereichsübereinstimmung verwendet. mysql> EXPLAIN select * from People where Nachname = 'aaa' und Vorname wie 'b%'\G; *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: Personen Partitionen: NULL Typ: Bereich mögliche Schlüssel: Nachname Schlüssel: Nachname <--- verwendeter Index Schlüssellänge: 304 Ref: NULL Reihen: 1 gefiltert: 100,00 Extra: Indexbedingung verwenden 1 Zeile im Satz, 1 Warnung (0,00 Sek.) FEHLER: Keine Abfrage angegeben (6) Abfragen, die nur auf Indizes zugreifen: Abfragen müssen nur auf Indizes zugreifen, ohne auf Datenzeilen zuzugreifen. Wählen Sie beispielsweise „Nachname, Vorname“ aus, wobei „Nachname='aaa'“ ist. Hier werden nur die im Index enthaltenen Spalten „Nachname“ und „Vorname“ abgefragt. Ein Lesen der Datenzeilen ist daher nicht erforderlich. mysql> erklären Sie select Nachname, Vorname, Geburtsdatum aus Personen, wobei Nachname = 'aaa' *************************** 1. Reihe *************************** ID: 1 select_type: EINFACH Tabelle: Personen Partitionen: NULL Typ: ref mögliche Schlüssel: Nachname Schlüssel: Nachname Schlüssellänge: 152 Verweis: const Reihen: 1 gefiltert: 100,00 Extra: Index verwenden 1 Zeile im Satz, 1 Warnung (0,00 Sek.) FEHLER: Keine Abfrage angegeben Einschränkungen von B-Bäumen (1) Die Suche kann nur beginnend in der äußersten linken Spalte des Index erfolgen. (2) Nur das am weitesten links stehende Präfix der am weitesten links stehenden Spalte des Index kann abgeglichen werden. (3) Der Abgleich kann nur von links nach rechts in der durch den Index festgelegten Reihenfolge durchgeführt werden, und Spalten im Index können nicht übersprungen werden. (4) Wenn eine Abfrage eine Bereichsabfrage für eine Spalte enthält, können alle Spalten rechts davon nicht mittels Indexoptimierung gefunden werden. Oben finden Sie eine kurze Analyse der Details des MysQL B-Tree-Index. Weitere Informationen zum MysQL B-Tree-Index finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Zusammenfassung der HTML-Wissenspunkte für das Frontend (empfohlen)
>>: So legen Sie die Parameter für die Post-Request-Druckeranforderung für Nginx-Protokolle fest
Die Betriebsumgebung dieses Tutorials: Windows 7-...
Serialisierungsimplementierung InnoDB implementie...
1. Herunterladen: http://www.oracle.com/technetwo...
In diesem Artikel wird der dritte Artikel zur Ver...
HTML implementiert ein 2-spaltiges Layout mit fes...
Ich habe die neueste Version von MySQL 5.7.x heru...
Jeder weiß, dass Bilder auf Webseiten im Allgemein...
Kürzlich habe ich die Funktion zum Umbenennen ges...
Amtliche Dokumentation: https://dev.mysql.com/doc...
Heute werden wir ein Thunder Fighter-Tippspiel im...
Vorwort Der optionale Verkettungsoperator (?.) er...
Designabsichten Beim Entwickeln einer Seite müsse...
Vue $http - domänenübergreifendes Abrufen und Sen...
Inhaltsverzeichnis 1. Wenn die Maus über das Karu...
Nachdem die Anwendung in einen Container verpackt...