Vorwort Ein Index ist eine Datenstruktur, die einen oder mehrere Spaltenwerte in einer Datenbank sortiert und der Datenbank hilft, effizient an Daten zu gelangen. Um es analog auszudrücken: Der Index in der Datenbank entspricht dem Inhaltsverzeichnis eines Buches. Wenn wir einen Wissenspunkt im Buch finden möchten, können wir direkt im Inhaltsverzeichnis danach suchen, anstatt jede Seite des Buches durchsuchen zu müssen. Dies bringt jedoch auch einen Nachteil des Indexes mit sich. Wenn die Datenbank geändert wird, dauert die Änderung des Indexes länger. Aber verstehen Sie MySQL-Indizes wirklich? Diese Fragen helfen Ihnen, einige wichtige Punkte zu Indizes zu verstehen. 1. Was ist das Prinzip des ganz linken Präfixes? Die folgenden Antworten basieren alle auf der InnoDB-Engine von MySQL Beispielsweise für die folgende Tabelle Wenn wir einen Index basierend auf dem Namensfeld erstellen und dabei eine B+-Baumstruktur verwenden, sieht die ungefähre Indexstruktur wie folgt aus: Wenn wir eine Fuzzy-Suche durchführen möchten, um die IDs aller Personen zu finden, deren Namen mit "张" beginnen, lautet die SQL-Anweisung Wählen Sie eine ID aus einer Tabelle mit einem Namen wie „张%“ Denn im B+-Baumstrukturindex werden die Indexelemente nach der Reihenfolge der Felder sortiert, die in der Indexdefinition erscheinen. Bei der Suche kann der Index Zhang Yi mit der ID 100 schnell finden und dann direkt nach rechts alle Personen durchlaufen, deren Namen mit Zhang beginnen, bis die Bedingung nicht mehr erfüllt ist. Das heißt, nachdem wir die erste Person gefunden haben, die die Bedingungen erfüllt, können wir direkt nach rechts gehen. Da der Index geordnet ist, werden alle Personen, die die Bedingungen erfüllen, zusammengeführt. Diese Methode der Positionierung nach links und anschließenden Durchquerung nach rechts nennen wir das Prinzip des äußersten linken Präfixes. 2. Warum einen B+-Baum statt einer Hash-Tabelle als Index verwenden? 1. Die Hash-Tabelle ordnet das Indexfeld dem entsprechenden Hash-Code zu und speichert es dann an der entsprechenden Position. Wenn wir also eine Fuzzy-Suche durchführen möchten, wird die Hash-Tabellenstruktur offensichtlich nicht unterstützt und wir können nur die Tabelle durchlaufen. Der B+-Baum kann die entsprechenden Daten durch das Prinzip des ganz linken Präfixes schnell finden. 2. Wenn wir eine Bereichssuche durchführen möchten, z. B. nach Personen mit IDs zwischen 100 und 400 suchen, unterstützt die Hash-Tabelle dies ebenfalls nicht und wir können nur die gesamte Tabelle durchlaufen. 3. Das Indexfeld wird durch Hashing in einen Hashcode abgebildet. Wenn viele Felder zufällig dem Hashcode desselben Werts zugeordnet werden, ist die resultierende Indexstruktur eine sehr lange verknüpfte Liste, was die Suchzeit erheblich verlängert. 3. Was ist der Unterschied zwischen einem Primärschlüsselindex und einem Nicht-Primärschlüsselindex? Beispielsweise ist für die folgende Tabelle (tatsächlich wird der obigen Tabelle ein k-Feld hinzugefügt) die ID der Primärschlüssel. Das schematische Diagramm des Primärschlüsselindex und des Nicht-Primärschlüsselindex ist wie folgt: Wobei R den Wert einer ganzen Zeile darstellt. Aus der Abbildung ist nicht schwer zu erkennen, dass der Unterschied zwischen dem Primärschlüsselindex und dem Nicht-Primärschlüsselindex darin besteht, dass die Blattknoten des Nicht-Primärschlüsselindex den Primärschlüsselwert speichern, während die Blattknoten des Primärschlüsselindex die gesamte Datenzeile speichern. Der Nicht-Primärschlüsselindex wird auch als Sekundärindex bezeichnet, und der Primärschlüsselindex wird auch als Clusterindex bezeichnet. Lassen Sie uns Abfragen auf Grundlage dieser beiden Strukturen durchführen, um die Unterschiede zwischen den Abfragen zu ermitteln. 1. Wenn die Abfrageanweisung 2. Wenn die Abfrageanweisung Kennen Sie nun den Unterschied zwischen ihnen? 4. Warum wird die Verwendung eines automatisch inkrementierenden Primärschlüsselindex empfohlen? Für diesen Primärschlüssel-Indexbaum Wenn wir eine Datenzeile mit der ID = 650 einfügen, können wir sie einfach ganz rechts einfügen. Wenn jedoch eine Datenzeile mit der ID = 350 eingefügt wird, müssen, da der B+-Baum geordnet ist, die darunter liegenden Blattknoten verschoben werden, um Platz zum Einfügen der Daten mit der ID = 350 zu schaffen, was zeitaufwändig ist. Wenn die Datenseite, auf der sich R4 befindet, voll ist, ist eine Seitenaufteilung erforderlich, was noch schlimmer ist. Wenn unser Primärschlüssel jedoch automatisch inkrementell ist, ist jede eingefügte ID größer als die vorherige, sodass wir sie jedes Mal nur am Ende einfügen müssen, ohne die Position zu verschieben, aufzuteilen usw., was die Leistung verbessern kann. Aus diesem Grund wird empfohlen, einen Index mit automatisch inkrementierendem Primärschlüssel zu verwenden. Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: Eine kurze Analyse der Verwendung von watchEffect in Vue3
>>: Der Prozess der Installation von SVN auf Ubuntu 16.04.5LTS
1. Einleitung Warum brauchen wir Indizes? In allg...
Dies ist ein Betrugsschema für Abstimmungswebsite...
Die Vue-Routing-Seite this.route.push wird nicht ...
Inhaltsverzeichnis Überblick berechnet Überwachun...
einführen HTML stellt die kontextuelle Struktur u...
Vorwort Ich habe vor Kurzem Linux gelernt und dan...
Inhaltsverzeichnis 1. Datenbank USE auswählen 2. ...
Der Code sieht folgendermaßen aus: .Verfahren{ Ra...
CSS3 implementiert 2D-Ebenentransformation und vi...
Ich habe einen falschen MySQL-Befehl eingegeben u...
Bevor Sie diesen Artikel lesen, hoffe ich, dass S...
Wenn wir Kubernetes lernen, müssen wir in der Kub...
Nach der Eingabe von yum in Linux erscheint die E...
Hinweis: sg11 Unser Unternehmen unterstützt nur d...
Als ich den Dienst täglich überprüfte und mir die...