


Detaillierte Einführung in das MySQL-Innodb-Indexprinzip (Codebeispiel)
Dieser Artikel bietet Ihnen eine detaillierte Einführung (Codebeispiel) zum MySQL-Indizierungsprinzip. Ich hoffe, dass er für Freunde hilfreich ist.
Clustered Index
Die Innodb-Speicher-Engine-Tabelle ist eine indexorganisierte Tabelle, und die Daten in der Tabelle werden in der Primärschlüsselreihenfolge gespeichert. Der Clustered-Index erstellt einen B+-Baum in der Reihenfolge der Primärschlüssel jeder Tabelle, und seine Blattknoten speichern die Zeilendatensatzdaten der gesamten Tabelle, und diese Blattknoten werden zu Datenseiten. (Verwandte Empfehlungen: MySQL-Tutorial)
Die Speicherung des Clustered-Index ist nicht physikalisch kontinuierlich, sondern logisch kontinuierlich. Die Blattknoten werden in der Reihenfolge des Primärschlüssels sortiert und durch a verbunden Zweifach verknüpfte Liste. In den meisten Fällen verwendet der Abfrageoptimierer tendenziell Clustered-Indizes, da Clustered-Indizes Daten direkt an Blattknoten finden können und da die logische Reihenfolge der Daten definiert ist, kann sehr schnell auf Abfragen nach Bereichswerten zugegriffen werden.
Diese Funktion des Clustered-Index bestimmt, dass die Daten in der indexorganisierten Tabelle auch Teil des Index sind. Da die Daten in der Tabelle nur nach einem B+-Baum sortiert werden können, kann eine Tabelle nur einen Clustered-Index haben.
In Innodb ist der Clustered-Index standardmäßig der Primärschlüsselindex. Wenn kein Primärschlüssel vorhanden ist, wird ein Clustered-Index gemäß den folgenden Regeln erstellt:
- Wenn kein Primärschlüssel vorhanden ist, wird eine eindeutige Indexspalte ungleich Null als Primärschlüssel verwendet und zum Clustered-Index dieser Tabelle werden;
- Wenn kein solcher Index vorhanden ist, definiert InnoDB implizit einen Primärschlüssel als Clustered-Index.
Da der Primärschlüssel einen Clustered-Index verwendet und der Primärschlüssel eine automatisch inkrementierende ID ist, werden die entsprechenden Daten nebeneinander auf der Festplatte gespeichert und die Schreibleistung ist hoch. Wenn es sich um eine Zeichenfolge wie uuid handelt, führt häufiges Einfügen dazu, dass innodb häufig Festplattenblöcke verschiebt und die Schreibleistung relativ gering ist.
B+-Baum (mehrfach ausgeglichener Suchbaum)
Wir wissen, dass der Innodb-Engine-Index die B+-Baumstruktur verwendet. Warum also nicht andere Arten von Baumstrukturen, wie z. B. Binärbäume?
Wenn ein Computer Daten speichert, verfügt er über eine Mindestspeichereinheit, genau wie die Mindesteinheit des RMB-Umlaufs Cent ist. Die kleinste Einheit des Dateisystems ist ein Block. Die Größe eines Blocks variiert je nach System und kann auch über eine eigene Mindestspeichereinheit (Seite) festgelegt werden Die Größe einer Seite beträgt 16 KB (dieser Wert ist ebenfalls konfigurierbar).
Die Größe einer Datei im Dateisystem beträgt nur 1 Byte, sie muss jedoch 4 KB Speicherplatz auf der Festplatte belegen. Ebenso ist die Größe aller Datendateien in innodb immer ein ganzzahliges Vielfaches von 16384 (16 KB).
In MySQL belegt also ein Blockknoten, der den Index speichert, 16 KB, und jeder E/A-Vorgang von MySQL nutzt die Lesefähigkeit des Systems, um jeweils 16 KB zu laden. Auf diese Weise ist es sehr verschwenderisch, nur einen Indexwert in diesen Knoten einzufügen, da jeweils nur ein Indexwert IO abgerufen werden kann und daher kein Binärbaum verwendet werden kann.
B+-Baum ist ein Mehrweg-Suchbaum. Ein Knoten kann n Werte enthalten, n = 16 KB / die Größe jedes Indexwerts.
Wenn die Indexfeldgröße beispielsweise 1 KB beträgt, kann jeder Knoten theoretisch 16 Indexwerte speichern. In diesem Fall kann der Binärbaum nur einen Indexwert pro IO laden, während der B+-Baum 16 laden kann.
Die Anzahl der Wege des B+-Baums beträgt n+1, wobei n die Anzahl der Werte ist, die in jedem Knoten vorhanden sind. Wenn beispielsweise jeder Knoten 16 Werte speichert, hat dieser Baum 17 Wege.
Hier ist auch ersichtlich, dass B+-Baumknoten mehrere Werte speichern können, sodass der B+-Baumindex eine bestimmte Zeile mit einem bestimmten Schlüsselwert nicht finden kann. Der B+-Baum kann nur die spezifische Seite finden, auf der die Datenzeile gespeichert ist, dann die Seite in den Speicher einlesen und dann im Speicher nach den angegebenen Daten suchen.
Anhang: Der Unterschied zwischen B-Baum und B+-Baum besteht darin, dass die Nicht-Blattknoten des B+-Baums nur Navigationsinformationen und keine tatsächlichen Werte enthalten. Alle Blattknoten und verbundenen Knoten sind über verknüpfte Listen miteinander verbunden erleichtern das Finden und Durchqueren von Intervallen.
Hilfsindex
wird auch als nicht gruppierter Index bezeichnet. Seine Blattknoten enthalten nicht alle in der Zeile aufgezeichneten Daten. Zusätzlich zum Schlüsselwert enthält der Blattknoten den Index Die Zeile in jedem Blattknoten enthält außerdem ein Lesezeichen, das den Clustered-Index-Schlüssel für die entsprechende Zeile darstellt.
Die folgende Abbildung zeigt die Beziehung zwischen dem Hilfsindex und dem Clustered-Index (das Bild stammt aus dem Internet, schauen Sie sich nur die allgemeine Bedeutung an):
Bei Verwendung des Hilfsindex Bei der Suche nach Daten erhält die Innodb-Speicher-Engine den Primärschlüssel, der nur den Primärschlüsselindex benötigt, über den Hilfsindex-Blattknoten und findet dann den vollständigen Zeilendatensatz über den Primärschlüsselindex.
Wenn Sie beispielsweise Daten in einem Hilfsindexbaum mit einer Höhe von 3 suchen möchten, müssen Sie 3 E/A für den Hilfsindexbaum ausführen, um den angegebenen Primärschlüssel zu finden Ist der Indexbaum ebenfalls 3, müssen Sie den Clustered-Indexbaum dreimal durchsuchen, um schließlich eine Seite zu finden, auf der sich die vollständigen Zeilendaten befinden. Daher sind insgesamt sechs E/A-Zugriffe erforderlich, um die endgültige Datenseite zu erhalten. Von
erstellte Indizes, wie gemeinsame Indizes, eindeutige Indizes usw., sind nicht gruppierte Indizes.
Gemeinsamer Index
Der gemeinsame Index bezieht sich auf die Indizierung mehrerer Spalten in der Tabelle. Der gemeinsame Index ist ebenfalls ein B+-Baum. Der Unterschied besteht darin, dass die Anzahl der Schlüsselwerte im gemeinsamen Index nicht 1, sondern größer oder gleich 2 ist.
Zum Beispiel gibt es eine Benutzertabelle mit den Feldern ID, Alter und Name. Es wurde festgestellt, dass die folgenden zwei SQLs am häufigsten verwendet werden:
Select * from user where age = ? ; Select * from user where age = ? and name = ?;
Derzeit gibt es keine Sie müssen nur den folgenden gemeinsamen Index erstellen:
create index idx_age_name on user(age, name)
Ein weiterer Vorteil des gemeinsamen Index besteht darin, dass der zweite Schlüsselwert sortiert wurde, wodurch manchmal ein zusätzlicher Index vermieden werden kann Sortiervorgang.
Abdeckender Index
Abdeckender Index, dh Sie können alle für die Abfrage erforderlichen Feldwerte aus dem Hilfsindex abrufen, ohne die Datensätze im Clustered-Index abzufragen. Der Vorteil des Deckungsindex besteht darin, dass der Hilfsindex nicht alle Informationen des gesamten Zeilendatensatzes enthält und daher viel kleiner als der Clustered-Index ist, sodass eine große Anzahl von E/A-Vorgängen reduziert werden kann.
Wenn oben beispielsweise ein gemeinsamer Index (Alter, Name) vorhanden ist und dieser wie folgt lautet:
select age,name from user where age=?
, können Sie den Deckungsindex verwenden.
Ein weiterer Vorteil der Abdeckung von Indizes besteht bei statistischen Problemen, wie zum Beispiel:
select count(*) from user
Die innodb-Speicher-Engine fragt den Clustered-Index nicht nach Statistiken ab. Da in der Benutzertabelle ein Hilfsindex vorhanden ist und dieser viel kleiner ist als der Clustered-Index, kann die Auswahl des Hilfsindex die E/A-Vorgänge reduzieren.
Hinweise
- Erstellen Sie nur geeignete Indizes, keine redundanten.
Denn jedes Mal, wenn Daten hinzugefügt oder gelöscht werden, muss der B+-Baum angepasst werden Wenn mehrere Indizes erstellt werden, müssen mehrere B+-Bäume angepasst werden. Je mehr Bäume und je größer die Struktur, desto zeitaufwändiger und ressourcenintensiver ist diese Anpassung. Wenn diese unnötigen Indizes reduziert werden, kann die Festplattennutzung erheblich reduziert werden.
- Die Datenlänge der Indexspalte kann so klein wie möglich sein.
Je kleiner die Indexdatenlänge ist, desto mehr Indizes werden in jedem Block gespeichert und desto mehr Werte können in einem IO abgerufen werden.
- Das passende Spaltenpräfix kann im Index wie 9999% verwendet werden, wie %9999%, wie %9999 kann der Index nicht verwendet werden
- In und oder im Wobei Bedingung den Index nicht verwenden kann und -Operationen keine Indizes verwenden können
Wenn es sich nicht in oder gegenüber dem B+-Baum befindet, weiß die Engine nicht, welcher Knoten, von dem aus gestartet werden soll.
- Übereinstimmung mit Bereichswerten, Sortieren nach kann auch zum Indexieren verwendet werden
- Verwenden Sie Abfragen nach bestimmten Spalten häufiger, geben Sie nur die Datenspalten zurück, die Ihnen einfallen, verwenden Sie „select“; weniger;
Es besteht keine Notwendigkeit, nutzlose Felder abzufragen, und wenn Sie nicht * verwenden, können Sie auf den abdeckenden Index klicken
- Wenn Sie Beginnen Sie nicht mit der Suche nach der Spalte ganz links im gemeinsamen Index. Sie können den Index nicht verwenden
Im Gelenk Index, Index kann verwendet werden, um die Spalte ganz links und den Bereich mit einer anderen Spalte genau abzugleichen.
- Wenn in der Abfrage im gemeinsamen Index eine Bereichsabfrage vorhanden ist, ist dies für alle Spalten rechts davon nicht möglich indiziert werden
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in das MySQL-Innodb-Indexprinzip (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



MySQL ist ein Open Source Relational Database Management System. 1) Datenbank und Tabellen erstellen: Verwenden Sie die Befehle erstellte und creatEtable. 2) Grundlegende Vorgänge: Einfügen, aktualisieren, löschen und auswählen. 3) Fortgeschrittene Operationen: Join-, Unterabfrage- und Transaktionsverarbeitung. 4) Debugging -Fähigkeiten: Syntax, Datentyp und Berechtigungen überprüfen. 5) Optimierungsvorschläge: Verwenden Sie Indizes, vermeiden Sie ausgewählt* und verwenden Sie Transaktionen.

Sie können PhpMyAdmin in den folgenden Schritten öffnen: 1. Melden Sie sich beim Website -Bedienfeld an; 2. Finden und klicken Sie auf das Symbol phpmyadmin. 3. Geben Sie MySQL -Anmeldeinformationen ein; 4. Klicken Sie auf "Login".

Erstellen Sie eine Datenbank mit Navicat Premium: Stellen Sie eine Verbindung zum Datenbankserver her und geben Sie die Verbindungsparameter ein. Klicken Sie mit der rechten Maustaste auf den Server und wählen Sie Datenbank erstellen. Geben Sie den Namen der neuen Datenbank und den angegebenen Zeichensatz und die angegebene Kollektion ein. Stellen Sie eine Verbindung zur neuen Datenbank her und erstellen Sie die Tabelle im Objektbrowser. Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Daten einfügen, um die Daten einzufügen.

MySQL und SQL sind wesentliche Fähigkeiten für Entwickler. 1.MYSQL ist ein Open -Source -Relational Database Management -System, und SQL ist die Standardsprache, die zum Verwalten und Betrieb von Datenbanken verwendet wird. 2.MYSQL unterstützt mehrere Speichermotoren durch effiziente Datenspeicher- und Abruffunktionen, und SQL vervollständigt komplexe Datenoperationen durch einfache Aussagen. 3. Beispiele für die Nutzung sind grundlegende Abfragen und fortgeschrittene Abfragen wie Filterung und Sortierung nach Zustand. 4. Häufige Fehler umfassen Syntaxfehler und Leistungsprobleme, die durch Überprüfung von SQL -Anweisungen und Verwendung von Erklärungsbefehlen optimiert werden können. 5. Leistungsoptimierungstechniken umfassen die Verwendung von Indizes, die Vermeidung vollständiger Tabellenscanning, Optimierung von Join -Operationen und Verbesserung der Code -Lesbarkeit.

Sie können eine neue MySQL -Verbindung in Navicat erstellen, indem Sie den Schritten folgen: Öffnen Sie die Anwendung und wählen Sie eine neue Verbindung (Strg N). Wählen Sie "MySQL" als Verbindungstyp. Geben Sie die Hostname/IP -Adresse, den Port, den Benutzernamen und das Passwort ein. (Optional) Konfigurieren Sie erweiterte Optionen. Speichern Sie die Verbindung und geben Sie den Verbindungsnamen ein.

Das Wiederherstellen von gelöschten Zeilen direkt aus der Datenbank ist normalerweise unmöglich, es sei denn, es gibt einen Backup- oder Transaktions -Rollback -Mechanismus. Schlüsselpunkt: Transaktionsrollback: Führen Sie einen Rollback aus, bevor die Transaktion Daten wiederherstellt. Sicherung: Regelmäßige Sicherung der Datenbank kann verwendet werden, um Daten schnell wiederherzustellen. Datenbank-Snapshot: Sie können eine schreibgeschützte Kopie der Datenbank erstellen und die Daten wiederherstellen, nachdem die Daten versehentlich gelöscht wurden. Verwenden Sie eine Löschanweisung mit Vorsicht: Überprüfen Sie die Bedingungen sorgfältig, um das Verhandlich von Daten zu vermeiden. Verwenden Sie die WHERE -Klausel: Geben Sie die zu löschenden Daten explizit an. Verwenden Sie die Testumgebung: Testen Sie, bevor Sie einen Löschvorgang ausführen.

Redis verwendet eine einzelne Gewindearchitektur, um hohe Leistung, Einfachheit und Konsistenz zu bieten. Es wird E/A-Multiplexing, Ereignisschleifen, nicht blockierende E/A und gemeinsame Speicher verwendet, um die Parallelität zu verbessern, jedoch mit Einschränkungen von Gleichzeitbeschränkungen, einem einzelnen Ausfallpunkt und ungeeigneter Schreib-intensiver Workloads.

Wie verbinde ich mit PhpMyAdmin mit MySQL? Die URL zum Zugriff auf phpmyadmin ist normalerweise http: // localhost/phpmyadmin oder http: // [Ihre Server -IP -Adresse]/Phpmyadmin. Geben Sie Ihren MySQL -Benutzernamen und Ihr Passwort ein. Wählen Sie die Datenbank aus, mit der Sie eine Verbindung herstellen möchten. Klicken Sie auf die Schaltfläche "Verbindung", um eine Verbindung herzustellen.
