Heim > Datenbank > MySQL-Tutorial > Hauptteil

[MySQL] MySQL-Speicher-Engine

黄舟
Freigeben: 2017-02-25 10:23:53
Original
986 Leute haben es durchsucht


Beim Erstellen einer Tabelle können Sie den Typ der Tabelle angeben, bei dem es sich um die Speicher-Engine der Tabelle handelt. Die Speicher-Engine einer Tabelle bestimmt, wie Daten gespeichert und abgerufen werden und wie Transaktionen gespeichert werden. Die Speicher-Engine einer Tabelle hat großen Einfluss auf den Speicherplatz und die Geschwindigkeit, die für die Verarbeitung von SQL-Anweisungen erforderlich sind. Verschiedene Speicher-Engines weisen unterschiedliche Eigenschaften auf. Einige Speicher-Engines eignen sich sehr gut für die Verarbeitung vieler komplexer SELECT-Anweisungen, während andere eher für schnelle Aktualisierungen geeignet sind.

InnoDB

InnoDB ist die Standard-Transaktions-Engine von MySQL und die wichtigste und am weitesten verbreitete Speicher-Engine. Es ist für die Abwicklung einer großen Anzahl kurzlebiger Transaktionen konzipiert. Kurzlebige Transaktionen werden in den meisten Fällen normal übermittelt und selten zurückgesetzt. Die Leistung und die Funktionen zur automatischen Wiederherstellung nach einem Absturz machen InnoDB beliebt für nicht-transaktionale Speicheranforderungen.

Sofern keine besonderen Gründe vorliegen, andere Speicher-Engines zu verwenden, sollte der InnoDB-Engine Vorrang eingeräumt werden. ————„Hochleistungs-MySQL“

  • InnoDB verwendet MVCC zur Unterstützung hoher Parallelität und implementiert vier Standardisolationsstufen. Die Standardstufe ist REPEATABLE READ, und die Gap-Lock-Strategie verhindert Phantom-Lesevorgänge.

  • InnoDB gibt an, dass

  • basierend auf dem Clustered-Index Fremdschlüsseleinschränkungen unterstützt.

  • Unterstützt das automatische Hinzufügen des Spaltenattributs AUTO_INCREMENT.

  • Angelegenheiten. Die InnoDB-Speicher-Engine ist eine Standard-MySQL-Speicher-Engine, die Transaktionen unterstützt.

  • Es ist nicht erforderlich, die gesamten Tabellendaten zu kopieren, wenn Sie einen Index löschen oder hinzufügen.

InnoDB hat viele interne Optimierungen vorgenommen, darunter vorhersehbares Vorauslesen beim Lesen von Daten von der Festplatte und einen adaptiven Hash-Index, der automatisch einen Hash-Index im Speicher erstellen kann, um Vorgänge zu beschleunigen Ein Einfügepuffer, der Einfügevorgänge beschleunigt.

InnoDB-Tabellen werden auf Basis von Clustered-Indizes erstellt. Die Indexstruktur von InnoDB unterscheidet sich stark von der anderer MySQL-Engines und bietet eine hohe Leistung für Primärschlüsselabfragen. Der Sekundärindex muss jedoch die Primärschlüsselspalte enthalten. Wenn die Primärschlüsselspalte also groß ist, sind auch alle anderen Indizes groß. Wenn die Tabelle viele Indizes enthält, sollte der Primärschlüssel daher so klein wie möglich sein.

MyISAM

MyISAM bietet eine große Anzahl von Funktionen, einschließlich Volltextindizierung, Komprimierung, räumliche Funktionen (GIS) usw., aber MyISAM unterstützt keine Transaktionen und Sperren auf Zeilenebene. und daran besteht kein Zweifel. Der Nachteil besteht darin, dass es nach einem Absturz nicht sicher wiederhergestellt werden kann. In MySQL 5.1 und früheren Versionen ist MyISAM die Standardspeicher-Engine. Obwohl MySQL seit langem Transaktionen unterstützt, ist MySQL in der Vorstellung vieler Menschen immer noch eine nicht-transaktionale Datenbank.

  • MyISAM sperrt die gesamte Tabelle, nicht die Zeilen.

  • Unterstützt die Volltextindizierung.

  • Unterstützt komprimierte Tabellen. Komprimierte Tabellen können nicht geändert werden und können die Speicherplatznutzung erheblich reduzieren, wodurch E/A-Vorgänge auf der Festplatte reduziert und dadurch die Abfrageleistung verbessert werden.

Speicherung

MyISAM speichert die Tabelle in zwei Dateien: der Datendatei und der Indexdatei mit den Erweiterungen .MYD bzw. .MYI. MyISAM-Tabellen können dynamische oder statische Zeilen enthalten. MySQL entscheidet anhand der Tabellendefinition, welches Zeilenformat verwendet werden soll.
Wenn die MyISAM-Tabelle in MySQL5.0 Zeilen variabler Länge enthält, kann die Standardkonfiguration nur 256 TB Daten verarbeiten.

Funktionen

Als eine der frühesten Speicher-Engines von MySQL Es gibt noch einige Funktionen.

Sperren und Parallelität – Tabellensperre

MyISAM sperrt die gesamte Tabelle, nicht Zeilen. Beim Lesen werden allen Tabellen, die gelesen werden müssen, gemeinsame Sperren hinzugefügt, und beim Schreiben werden den Tabellen exklusive Sperren hinzugefügt. Während die Tabelle jedoch über Leseabfragen verfügt, können auch neue Datensätze in die Tabelle eingefügt werden (gleichzeitige Einfügung).

Reparatur

Für MyISAM-Tabellen kann MySQL Inspektions- und Wartungsvorgänge manuell oder automatisch durchführen, aber die hier erwähnte Reparatur ist ein anderes Konzept als Transaktionswiederherstellung und Absturzwiederherstellung.

Indexfunktionen

Für MyISAM-Tabellen können sogar lange Felder wie BLOB und TEXT Indizes basierend auf ihren ersten 500 Zeichen erstellen. MyISAM unterstützt auch die Volltextindizierung, einen Index, der auf Wortsegmentierung basiert und komplexe Abfragen unterstützen kann.
Verzögerte Aktualisierung von Indexschlüsseln
Wenn beim Erstellen einer MyISAM-Tabelle die Option DELAY_KEY_WRITE angegeben ist, werden die geänderten Indexdaten nicht sofort nach Abschluss jeder Änderung auf die Festplatte geschrieben.
 

MyISAM-Leistung

Die MyISAM-Engine ist einfach konzipiert und die Daten werden in einem kompakten Format gespeichert, sodass die Leistung in bestimmten Szenarien sehr gut ist. Das Vorhandensein von Tabellensperren hat jedoch große Auswirkungen auf die Leistung.

Archivierungs-Engine

Archivierungsspeicher-Engine unterstützt nur INSERT und SELECT. Die Archiv-Engine speichert alle Schreibvorgänge im Cache und verwendet zlib zum Komprimieren von Einfügungen, sodass weniger Festplatten-E/A erforderlich ist als bei MyISAM-Tabellen. Aber jede SELECT-Abfrage muss einen vollständigen Tabellenscan durchführen. Daher eignen sich Archivtabellen für Protokoll- und Datenerfassungsanwendungen, die häufig vollständige Tabellenscans zur Datenanalyse erfordern.

Die Archiv-Engine unterstützt Sperren auf Zeilenebene und dedizierte Puffer, sodass Einfügungen mit hoher Parallelität erreicht werden können. Archive verhindert die Ausführung anderer SELECTs, bis alle in der Tabelle vorhandenen Zeilen zurückgegeben wurden, bevor eine Abfrage gestartet wird, um konsistente Lesevorgänge zu erreichen. Darüber hinaus sind auch Batch-Einfügungen implementiert, die für Lesevorgänge unsichtbar sind, bis sie abgeschlossen sind. Dieser Mechanismus ahmt einige Funktionen von Transaktionen und MVCC nach, aber die Archiv-Engine ist keine Transaktions-Engine, sondern eine Engine, die für das Einfügen und Komprimieren mit hoher Geschwindigkeit optimiert ist.

CSV-Speicher-Engine

Diese Engine kann gewöhnliche CSV-Dateien als MySQL-Tabellen verarbeiten, diese Tabelle unterstützt jedoch keine Indizes. Sie müssen die CSV-Datei lediglich in das Datenverzeichnis der CSV-Speicher-Engine kopieren und sie kann mithilfe der in MySQL aufgeführten Regeln geöffnet und verwendet werden.

Memory Engine

Wenn Sie schnell auf Daten zugreifen müssen und die Daten nach dem Neustart nicht geändert werden oder verloren gehen, ist die Verwendung von Speichertabellen sehr nützlich. Speichertabellen sind um eine Größenordnung schneller als MyISAM-Tabellen, da alle Daten im Speicher gespeichert werden und keine Festplatten-E/A-Vorgänge erforderlich sind. Die Struktur der Speichertabelle bleibt nach dem Neustart erhalten, die Daten gehen jedoch verloren.

  • unterstützt den Hash-Index, sodass der Suchvorgang sehr schnell ist.

  • ist eine Sperre auf Tabellenebene, daher ist die Leistung beim gleichzeitigen Schreiben gering.

  • unterstützt keine Spalten vom Typ BLOB oder TEXT und die Länge jeder Zeile ist festgelegt. Auch wenn varchar angegeben ist, wird es im tatsächlichen Speicher in char konvertiert.

Hinweis

Es sei denn, Sie müssen einige Funktionen verwenden, die InnoDB nicht hat und es keine andere Möglichkeit gibt, diese zu ersetzen, sollten Sie diesen Vorrang geben InnoDB-Engine – „Hochleistungs-MySQL“

Darüber hinaus werden oben nur einige häufig vorkommende Speicher-Engines aufgeführt, was keinen Anspruch auf Vollständigkeit erhebt.

Beim Erstellen einer Tabelle können Sie den Typ der Tabelle angeben, bei dem es sich um die Speicher-Engine der Tabelle handelt. Die Speicher-Engine einer Tabelle bestimmt, wie Daten gespeichert und abgerufen werden und wie Transaktionen gespeichert werden. Die Speicher-Engine einer Tabelle hat großen Einfluss auf den Speicherplatz und die Geschwindigkeit, die für die Verarbeitung von SQL-Anweisungen erforderlich sind. Verschiedene Speicher-Engines weisen unterschiedliche Eigenschaften auf. Einige Speicher-Engines eignen sich sehr gut für die Verarbeitung vieler komplexer SELECT-Anweisungen, während andere eher für schnelle Aktualisierungen geeignet sind.

InnoDB

InnoDB ist die Standard-Transaktions-Engine von MySQL und die wichtigste und am weitesten verbreitete Speicher-Engine. Es ist für die Abwicklung einer großen Anzahl kurzlebiger Transaktionen konzipiert. Kurzlebige Transaktionen werden in den meisten Fällen normal übermittelt und selten zurückgesetzt. Die Leistung und die Funktionen zur automatischen Wiederherstellung nach einem Absturz machen InnoDB beliebt für nicht-transaktionale Speicheranforderungen.

Sofern keine besonderen Gründe vorliegen, andere Speicher-Engines zu verwenden, sollte der InnoDB-Engine Vorrang eingeräumt werden. ————„Hochleistungs-MySQL“

  • InnoDB verwendet MVCC zur Unterstützung hoher Parallelität und implementiert vier Standardisolationsstufen. Die Standardstufe ist REPEATABLE READ, und die Gap-Lock-Strategie verhindert Phantom-Lesevorgänge.

  • InnoDB gibt an, dass

  • basierend auf dem Clustered-Index Fremdschlüsseleinschränkungen unterstützt.

  • Unterstützt das automatische Hinzufügen des Spaltenattributs AUTO_INCREMENT.

  • Angelegenheiten. Die InnoDB-Speicher-Engine ist eine Standard-MySQL-Speicher-Engine, die Transaktionen unterstützt.

  • Es ist nicht erforderlich, die gesamten Tabellendaten zu kopieren, wenn Sie einen Index löschen oder hinzufügen.

InnoDB hat viele interne Optimierungen vorgenommen, darunter vorhersehbares Vorauslesen beim Lesen von Daten von der Festplatte und einen adaptiven Hash-Index, der automatisch einen Hash-Index im Speicher erstellen kann, um Vorgänge zu beschleunigen Ein Einfügepuffer, der Einfügevorgänge beschleunigt.

InnoDB-Tabellen werden auf Basis von Clustered-Indizes erstellt. Die Indexstruktur von InnoDB unterscheidet sich stark von der anderer MySQL-Engines und bietet eine hohe Leistung für Primärschlüsselabfragen. Der Sekundärindex muss jedoch die Primärschlüsselspalte enthalten. Wenn die Primärschlüsselspalte also groß ist, sind auch alle anderen Indizes groß. Wenn die Tabelle viele Indizes enthält, sollte der Primärschlüssel daher so klein wie möglich sein.

MyISAM

MyISAM bietet eine große Anzahl von Funktionen, einschließlich Volltextindizierung, Komprimierung, räumliche Funktionen (GIS) usw., aber MyISAM unterstützt keine Transaktionen und Sperren auf Zeilenebene. und daran besteht kein Zweifel. Der Nachteil besteht darin, dass es nach einem Absturz nicht sicher wiederhergestellt werden kann. In MySQL 5.1 und früheren Versionen ist MyISAM die Standardspeicher-Engine. Obwohl MySQL seit langem Transaktionen unterstützt, ist MySQL in der Vorstellung vieler Menschen immer noch eine nicht-transaktionale Datenbank.

  • MyISAM sperrt die gesamte Tabelle, nicht die Zeilen.

  • Unterstützt die Volltextindizierung.

  • Unterstützt komprimierte Tabellen. Komprimierte Tabellen können nicht geändert werden und können die Speicherplatznutzung erheblich reduzieren, wodurch E/A-Vorgänge auf der Festplatte reduziert und dadurch die Abfrageleistung verbessert werden.

Speicherung

MyISAM speichert die Tabelle in zwei Dateien: der Datendatei und der Indexdatei mit den Erweiterungen .MYD bzw. .MYI. MyISAM-Tabellen können dynamische oder statische Zeilen enthalten. MySQL entscheidet anhand der Tabellendefinition, welches Zeilenformat verwendet werden soll.
Wenn die MyISAM-Tabelle in MySQL5.0 Zeilen variabler Länge enthält, kann die Standardkonfiguration nur 256 TB Daten verarbeiten.

Funktionen

Als eine der frühesten Speicher-Engines von MySQL Es gibt noch einige Funktionen.

Sperren und Parallelität – Tabellensperren

MyISAM sperrt die gesamte Tabelle, nicht Zeilen. Beim Lesen werden allen Tabellen, die gelesen werden müssen, gemeinsame Sperren hinzugefügt, und beim Schreiben werden den Tabellen exklusive Sperren hinzugefügt. Während die Tabelle jedoch über Leseabfragen verfügt, können auch neue Datensätze in die Tabelle eingefügt werden (gleichzeitige Einfügung).

Reparatur

Für MyISAM-Tabellen kann MySQL Inspektions- und Wartungsvorgänge manuell oder automatisch durchführen, aber die hier erwähnte Reparatur ist ein anderes Konzept als Transaktionswiederherstellung und Absturzwiederherstellung.

Indexfunktionen

Für MyISAM-Tabellen können sogar lange Felder wie BLOB und TEXT Indizes basierend auf ihren ersten 500 Zeichen erstellen. MyISAM unterstützt auch die Volltextindizierung, einen Index, der auf Wortsegmentierung basiert und komplexe Abfragen unterstützen kann.
Verzögerte Aktualisierung von Indexschlüsseln
Wenn beim Erstellen einer MyISAM-Tabelle die Option DELAY_KEY_WRITE angegeben ist, werden die geänderten Indexdaten nicht sofort nach Abschluss jeder Änderung auf die Festplatte geschrieben.
 

MyISAM-Leistung

Die MyISAM-Engine ist einfach konzipiert und die Daten werden in einem kompakten Format gespeichert, sodass die Leistung in bestimmten Szenarien sehr gut ist. Das Vorhandensein von Tabellensperren hat jedoch große Auswirkungen auf die Leistung.

Archivierungs-Engine

Archivierungsspeicher-Engine unterstützt nur INSERT und SELECT. Die Archiv-Engine speichert alle Schreibvorgänge im Cache und verwendet zlib zum Komprimieren von Einfügungen, sodass weniger Festplatten-E/A erforderlich ist als bei MyISAM-Tabellen. Aber jede SELECT-Abfrage muss einen vollständigen Tabellenscan durchführen. Daher eignen sich Archivtabellen für Protokoll- und Datenerfassungsanwendungen, die häufig vollständige Tabellenscans zur Datenanalyse erfordern.

Die Archiv-Engine unterstützt Sperren auf Zeilenebene und dedizierte Puffer, sodass hochgradig gleichzeitige Einfügungen erreicht werden können. Archive verhindert die Ausführung anderer SELECTs, bis alle in der Tabelle vorhandenen Zeilen zurückgegeben wurden, bevor eine Abfrage gestartet wird, um konsistente Lesevorgänge zu erreichen. Darüber hinaus sind auch Batch-Einfügungen implementiert, die für Lesevorgänge unsichtbar sind, bis sie abgeschlossen sind. Dieser Mechanismus ahmt einige Funktionen von Transaktionen und MVCC nach, aber die Archiv-Engine ist keine Transaktions-Engine, sondern eine Engine, die für das Einfügen und Komprimieren mit hoher Geschwindigkeit optimiert ist.

CSV-Speicher-Engine

Diese Engine kann gewöhnliche CSV-Dateien als MySQL-Tabellen verarbeiten, diese Tabelle unterstützt jedoch keine Indizes. Sie müssen die CSV-Datei nur in das Datenverzeichnis der CSV-Speicher-Engine kopieren und sie kann nach den in MySQL aufgeführten Regeln geöffnet und verwendet werden.

Memory Engine

Wenn Sie schnell auf Daten zugreifen müssen und die Daten nach dem Neustart nicht geändert werden oder verloren gehen, ist die Verwendung von Speichertabellen sehr nützlich. Speichertabellen sind um eine Größenordnung schneller als MyISAM-Tabellen, da alle Daten im Speicher gespeichert werden und keine Festplatten-E/A-Vorgänge erforderlich sind. Die Struktur der Speichertabelle bleibt nach dem Neustart erhalten, die Daten gehen jedoch verloren.

  • unterstützt den Hash-Index, sodass der Suchvorgang sehr schnell ist.

  • ist eine Sperre auf Tabellenebene, daher ist die Leistung beim gleichzeitigen Schreiben gering.

  • unterstützt keine Spalten vom Typ BLOB oder TEXT und die Länge jeder Zeile ist festgelegt. Auch wenn varchar angegeben ist, wird es im tatsächlichen Speicher in char konvertiert.

Hinweis

Es sei denn, Sie müssen einige Funktionen verwenden, die InnoDB nicht hat und es keine andere Möglichkeit gibt, diese zu ersetzen, sollten Sie diesen Vorrang geben InnoDB-Engine – „Hochleistungs-MySQL“

Darüber hinaus werden oben nur einige häufig vorkommende Speicher-Engines aufgeführt, was keinen Anspruch auf Vollständigkeit erhebt.

Das Obige ist der Inhalt der [MySQL] MySQL-Speicher-Engine. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage