Detaillierte Erläuterung des Index und der Speicherstruktur der MySQL InnoDB-Engine

Detaillierte Erläuterung des Index und der Speicherstruktur der MySQL InnoDB-Engine

Vorwort

In Datenbanken wie Oracle und SQL Server gibt es nur eine Speicher-Engine und alle Datenspeicherverwaltungsmechanismen sind gleich.

Die MySQL-Datenbank bietet eine Vielzahl von Speicher-Engines. Benutzer können je nach Anforderungen unterschiedliche Speicher-Engines für Datentabellen auswählen oder je nach Bedarf eigene Speicher-Engines schreiben.

Unterschiede zwischen den wichtigsten Speicher-Engines von MySQL

Die Standardspeicher-Engine von MySQL ist MyISAM. Andere häufig verwendete sind InnoDB, MERGE, MEMORY (HEAP) usw.

Mehrere große Speicher-Engines

MyISAM verwaltet nicht transaktionale Tabellen und stellt Hochgeschwindigkeitsspeicherung und -abruf sowie Volltextsuchfunktionen bereit.

MyISAM ist die Standardspeicher-Engine für MySQL. Wenn beim Erstellen einer neuen Tabelle durch „Create“ die Speicher-Engine der neuen Tabelle nicht angegeben ist, wird standardmäßig MyISAM verwendet. Jedes MyISAM wird in drei Dateien auf der Festplatte gespeichert. Die Dateinamen sind dieselben wie die Tabellennamen, mit den Erweiterungen .frm (zum Speichern von Tabellendefinitionen), .MYD (MYData, zum Speichern von Daten) und .MYI (MYIndex, zum Speichern von Indizes). Datendateien und Indexdateien können in verschiedenen Verzeichnissen abgelegt werden, um die E/A gleichmäßig zu verteilen und eine höhere Geschwindigkeit zu erreichen.

Die InnoDB-Speicher-Engine wird für Anwendungen zur Transaktionsverarbeitung verwendet und verfügt über zahlreiche Funktionen, darunter ACID-Transaktionsunterstützung, die Transaktionssicherheit mit Commit-, Rollback- und Crash-Recovery-Funktionen bietet. Im Vergleich zur MyISAM-Speicher-Engine schreibt InnoDB jedoch weniger effizient und benötigt mehr Speicherplatz, um Daten und Indizes beizubehalten.

Im Speicher werden alle Daten gespeichert und können in temporären Tabellen verwendet werden, um einen extrem schnellen Zugriff in Umgebungen zu ermöglichen, in denen eine schnelle Suche nach Referenzen und anderen ähnlichen Daten erforderlich ist. Der Speicher verwendet Hash-Indizes, daher ist die Datenzugriffsgeschwindigkeit sehr hoch.

Durch Merge kann ein MySQL-DBA oder -Entwickler eine Reihe gleichwertiger MyISAM-Tabellen logisch gruppieren und sie als 1 Objekt referenzieren. Es eignet sich sehr gut für VLDB-Umgebungen wie Data Warehousing.

Horizontaler Vergleich verschiedener Speicher-Engines

Merkmale MeinIsAM BDB Erinnerung InnoDB
Speicherlimits NEIN NEIN haben 64 TB
Transaktionssicherheit Unterstützung Unterstützung
Verriegelungsmechanismus Tabellensperre Seitensperre Tabellensperre Zeilensperre
B-Baum-Index Unterstützung Unterstützung Unterstützung Unterstützung
Hash-Index Unterstützung Unterstützung
Volltextindex Unterstützung
Cluster-Index Unterstützung
Datencache Unterstützung Unterstützung
Index-Cache Unterstützung Unterstützung Unterstützung
Daten können komprimiert werden Unterstützung
Raumnutzung Niedrig Niedrig N / A hoch
Speichernutzung Niedrig Niedrig Medium hoch
Stapeleinfügegeschwindigkeit hoch hoch hoch Niedrig
Unterstützt Fremdschlüssel Unterstützung

Anzeigen und Konfigurieren von Speicher-Engine-Vorgängen

1. Verwenden Sie den Befehl „show engines“, um die von der aktuellen Datenbank unterstützten Speicher-Engines anzuzeigen.

2. Um die Tabellendefinitionsstruktur und andere Informationen anzuzeigen, können Sie die folgenden Befehle verwenden:

Desc[ribe] tablename; //Struktur der Datentabelle anzeigen Show create table tablename; //Anweisung zur Tabellenerstellung anzeigen, um die beim Erstellen der Tabelle angegebene ENGINE anzuzeigen
show table status like 'tablename'\G zeigt den aktuellen Statuswert der Tabelle an

3. Legen Sie die Speicher-Engine der Tabelle fest oder ändern Sie sie

Die grundlegende Syntax zum Festlegen der Speicher-Engine beim Erstellen einer Datenbanktabelle lautet:

Tabelle tableName erstellen(
columnName (Spaltenname 1) type (Datentyp) attri (Attributeinstellung),
columnName (Spaltenname 2) type (Datentyp) attri (Attributeinstellung),
……..) Motor = Motorname

Um die Speicher-Engine zu ändern, können Sie den Befehl verwenden

Tabelle ändern Tabellenname Engine = Enginename

Sie müssen nicht für den gesamten Server oder die gesamte Lösung dieselbe Speicher-Engine verwenden; Sie können für jede Tabelle in der Lösung eine andere Speicher-Engine verwenden.

InnoDB-Speicherstruktur

InnoDB verwendet eine Seitenspeicherstruktur. Das Folgende ist das Tabellenbereichsstrukturdiagramm von InnoDB:

Das Seitenspeicherformat ist in der folgenden Abbildung dargestellt:

Der Speicher einer Seite besteht aus folgenden Teilen:

  1. Seitenkopf: zeichnet die Steuerinformationen der Seite auf und belegt insgesamt 150 Bytes, einschließlich der linken und rechten Geschwisterseitenzeiger der Seite, der Seitenspeicherplatznutzung usw. Die detaillierte Beschreibung des Seitenkopfs erfolgt im nächsten Artikel.
  2. Minimaler virtueller Datensatz und maximaler virtueller Datensatz: zwei an festen Orten gespeicherte virtuelle Datensätze, die selbst keine Daten speichern. Der kleinste virtuelle Datensatz ist kleiner als jeder Datensatz und der größte virtuelle Datensatz ist größer als jeder Datensatz.
  3. Datensatzhaufen: bezieht sich auf den orange-gelben Teil der obigen Abbildung. Gibt den Datensatzbereich an, in dem die Seite zugewiesen wurde, und ist gleichzeitig der eigentliche Speicherbereich für Indexdaten. Es gibt zwei Arten von Datensatzhaufen: gültige Datensätze und gelöschte Datensätze. Gültige Datensätze sind Datensätze, die normalerweise vom Index verwendet werden, während gelöschte Datensätze Datensätze sind, die aus dem Index gelöscht wurden und nicht mehr verwendet werden, wie im dunkelblauen Teil der obigen Abbildung dargestellt. Da Datensätze häufiger aktualisiert und gelöscht werden, befinden sich im Datensatzstapel mehr gelöschte Datensätze, das heißt, es entstehen immer mehr Lücken (Fragmente). Diese gelöschten Datensätze werden verbunden, um eine Liste mit freiem Speicherplatz auf der Seite zu erstellen.
  4. Nicht zugeordneter Speicherplatz: bezieht sich auf den Speicherplatz, der nicht von Seiten verwendet wird. Da Seiten kontinuierlich verwendet werden, wird der nicht zugeordnete Speicherplatz immer kleiner. Beim Einfügen eines neuen Datensatzes wird zunächst versucht, einen geeigneten Speicherplatz aus der Liste der freien Speicherplätze (mit ausreichend Speicherplatz) zu erhalten. Wenn kein geeigneter Speicherplatz vorhanden ist, wird er im nicht zugewiesenen Speicherplatz beantragt.
  5. Slot-Bereich: Slot ist ein Zeiger auf einige gültige Datensätze der Seite. Jeder Slot belegt zwei Bytes und speichert den Offset des Datensatzes relativ zur ersten Adresse der Seite. Wenn eine Seite n gültige Datensätze hat, liegt die Anzahl der Slots zwischen n/8+2 und n/4+2. Im nächsten Abschnitt wird der Slot-Bereich im Detail vorgestellt, der der Schlüssel zur Aufzeichnungsseitenreihenfolge und zur binären Suche ist.
  6. Seitenende: Der letzte Teil der Seite, der 8 Bytes belegt und hauptsächlich die Verifizierungsinformationen der Seite speichert.

Der Seitenkopf, der maximale/minimale virtuelle Datensatz und der Seitenfuß haben alle feste Speicherorte auf der Seite.

InnoDB-Indexstruktur

InnoDB verwendet B+Tree zum Speichern von Indizes.

Eine Innodb-Tabelle kann mehrere Indizes enthalten, von denen jeder mithilfe eines B+-Baums gespeichert wird. Der Index umfasst einen Clustered-Index und einen Sekundärindex. Der Clustered-Index verwendet den Primärschlüssel der Tabelle als Indexschlüssel und enthält alle Felder der Tabelle. Ein sekundärer Index enthält nur den Inhalt des Indexschlüssels und des gruppierten Indexschlüssels (Primärschlüssel) und schließt keine anderen Felder ein. Jeder Index ist ein B+-Baum. Jeder B+-Baum besteht aus vielen Seiten und die Größe jeder Seite beträgt im Allgemeinen 16 KB. Aus der Organisationsstruktur des B+-Baums können die Seiten des B-Baums wie folgt unterteilt werden:

Blattknoten: Die Seite auf Ebene 0 des B-Baums, die alle aufgezeichneten Inhalte speichert.
Nicht-Blattknoten: Seiten mit einer B-Baum-Ebene größer als 0, die nur Indexschlüssel und Seitenzeiger speichern.

Eine typische B+-Baumstruktur:

Wie aus der obigen Abbildung ersichtlich ist, sind Seiten auf derselben Ebene durch eine doppelt verknüpfte Liste verbunden.

Im Allgemeinen können Sie, beginnend beim äußersten linken Blattknoten des B+-Baums und scannen nach rechts, alle Daten des B+-Baums von klein bis groß abrufen. Daher gibt es für Blattknoten die folgenden Merkmale:

Die Daten innerhalb einer Seite werden nach Indexschlüssel sortiert.

Der Indexschlüsselwert eines Datensatzes auf einer Seite ist nicht kleiner als der eines Datensatzes auf der linken Geschwisterseite.

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. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Leistungsvergleichstest der beiden Tabellenspeicherstrukturen von MySQL, MyISAM und InnoDB
  • InnoDB-Typ MySql stellt Tabellenstruktur und Daten wieder her
  • Detaillierte Erläuterung der MySQL Innodb-Speicherstruktur und der Speicherung von Nullwerten
  • Detaillierte Erläuterung der Datenseitenstruktur der InnoDB-Speicher-Engine von MySQL
  • Details zur MySQL InnoDB-Speicherstruktur

<<:  VMware12 installiert die Desktopversion von Ubuntu19.04 (Installations-Tutorial)

>>:  Vue ElementUI implementiert einen asynchronen Ladebaum

Artikel empfehlen

Einführung in mögliche Probleme nach der Installation von Tomcat

1. Der Tomcat-Dienst ist nicht geöffnet Geben Sie...

Eine Kurzanleitung zu Docker

Docker bietet eine Möglichkeit, Software automati...

Implementierung der MySQL5.7 mysqldump-Sicherung und -Wiederherstellung

MySQL-Sicherung Kaltes Backup:停止服務進行備份,即停止數據庫的寫入H...

MySQL-Datenbank Daten laden, vielfältige Verwendungsmöglichkeiten

Inhaltsverzeichnis Vielfältige Einsatzmöglichkeit...

Detaillierte Erklärung zur Verwendung von JavaScript-Funktionen

Inhaltsverzeichnis 1. Deklarieren Sie eine Funkti...

Optimierte Implementierung von count() für große MySQL-Tabellen

Das Folgende ist mein Urteil basierend auf der Da...

MySql 5.7.20 Installation und Konfiguration von Daten- und my.ini-Dateien

1. Erster Download von der offiziellen Website vo...

Tabellen dynamisch in HTML hinzufügen_PowerNode Java Academy

Ohne weitere Umschweife werde ich den Code direkt...

Teilen Sie 5 hilfreiche CSS-Selektoren, um Ihr CSS-Erlebnis zu bereichern

Dank unserer umfassenden CSS-Erfahrung als Webdesi...

Einführung in die grundlegenden TypeScript-Typen

Inhaltsverzeichnis 1. Grundtypen 2. Objekttyp 2.1...