Speicher-Engines sind MySQL-Komponenten, die die SQL-Operationen für verschiedene Tabellentypen verarbeiten. InnoDB
ist die Standard- und allgemeinste Speicher-Engine, und Oracle empfiehlt, sie für Tabellen zu verwenden, außer für spezielle Anwendungsfälle. (Die CREATE TABLE
-Anweisung in MySQL 8.0 erzeugt standardmäßig InnoDB
-Tabellen.)
MySQL verwendet eine steckbare Speicher-Engine-Architektur, die es ermöglicht, Speicher-Engines in einen laufenden MySQL-Server zu laden und von ihm zu entfernen.
Um festzustellen, welche Speicher-Engines Ihr Server unterstützt, verwenden Sie die SHOW ENGINES
-Anweisung. Der Wert in der Spalte Support
gibt an, ob eine Engine verwendet werden kann. Ein Wert von YES
, NO
oder DEFAULT
zeigt an, dass eine Engine verfügbar, nicht verfügbar oder verfügbar und derzeit als Standard-Speicher-Engine festgelegt ist.
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...
Dieses Kapitel behandelt Anwendungsfälle für spezielle MySQL-Speicher-Engines. Es behandelt nicht die Standard-Speicher-Engine InnoDB
oder die Speicher-Engine NDB
, die in Kapitel 15, Die InnoDB-Speicher-Engine und Kapitel 23, MySQL NDB Cluster 8.0 behandelt werden. Für fortgeschrittene Benutzer enthält er auch eine Beschreibung der Pluggable-Storage-Engine-Architektur (siehe Abschnitt 16.11, „Überblick über die MySQL-Storage-Engine-Architektur“).
Informationen über die in den kommerziellen MySQL-Binärprogrammen angebotenen Funktionen finden Sie unter MySQL-Editionen auf der MySQL-Website. Die verfügbaren Speicher-Engines können davon abhängen, welche Edition von MySQL Sie verwenden.
Antworten auf häufig gestellte Fragen zu MySQL-Speicher-Engines finden Sie in Abschnitt A.2, „MySQL 8.0 FAQ: Speicher-Engines“.
MySQL 8.0 Unterstützte Speicher-Engines
-
InnoDB
: Die Standard-Speicher-Engine in MySQL 8.0.InnoDB
ist eine transaktionssichere (ACID-konforme) Speicher-Engine für MySQL, die über Commit-, Rollback- und Crash-Recovery-Funktionen zum Schutz der Benutzerdaten verfügt.InnoDB
Sperren auf Zeilenebene (ohne Eskalation zu Sperren mit gröberer Granularität) und konsistente, nicht sperrende Lesevorgänge im Stil von Oracle erhöhen die Gleichzeitigkeit und Leistung für mehrere Benutzer.InnoDB
speichert Benutzerdaten in geclusterten Indizes, um die E/A für allgemeine Abfragen auf der Grundlage von Primärschlüsseln zu reduzieren. Zur Wahrung der Datenintegrität unterstütztInnoDB
auchFOREIGN KEY
referentielle Integritätsbeschränkungen. Weitere Informationen überInnoDB
finden Sie in Kapitel 15, Die InnoDB Storage Engine. -
MyISAM
: Diese Tabellen haben einen geringen Platzbedarf. Sperren auf Tabellenebene schränken die Leistung bei Lese-/Schreib-Workloads ein und werden daher häufig bei Nur-Lese- oder Nur-Lese-Workloads in Web- und Data-Warehousing-Konfigurationen verwendet. -
Memory
: Speichert alle Daten im RAM, um einen schnellen Zugriff in Umgebungen zu ermöglichen, in denen schnelle Abfragen von nicht kritischen Daten erforderlich sind. Diese Engine war früher alsHEAP
-Engine bekannt. Ihre Anwendungsfälle sind rückläufig;InnoDB
bietet mit seinem Pufferpool-Speicherbereich eine universelle und dauerhafte Möglichkeit, die meisten oder alle Daten im Speicher zu halten, undNDBCLUSTER
bietet schnelle Schlüsselwert-Suchvorgänge für große verteilte Datensätze. -
CSV
: Die Tabellen sind eigentlich Textdateien mit durch Komma getrennten Werten. Mit CSV-Tabellen können Sie Daten im CSV-Format importieren oder ausgeben, um Daten mit Skripten und Anwendungen auszutauschen, die dasselbe Format lesen und schreiben. Da CSV-Tabellen nicht indiziert sind, behalten Sie die Daten während des normalen Betriebs normalerweise inInnoDB
-Tabellen und verwenden CSV-Tabellen nur während der Import- oder Exportphase. -
Archive
: Diese kompakten, nicht indizierten Tabellen sind für die Speicherung und den Abruf großer Mengen an selten referenzierten historischen, archivierten oder Sicherheitsaudit-Informationen vorgesehen. -
Blackhole
: Die Blackhole-Speicher-Engine nimmt Daten entgegen, speichert sie aber nicht, ähnlich wie das Unix-Gerät/dev/null
. Abfragen geben immer eine leere Menge zurück. Diese Tabellen können in Replikationskonfigurationen verwendet werden, bei denen DML-Anweisungen an Replikationsserver gesendet werden, aber der Quellserver keine eigene Kopie der Daten behält. -
NDB
(auch bekannt alsNDBCLUSTER
): Diese geclusterte Datenbank-Engine ist besonders für Anwendungen geeignet, die ein Höchstmaß an Betriebszeit und Verfügbarkeit erfordern. -
Merge
: Ermöglicht es einem MySQL-DBA oder -Entwickler, eine Reihe identischerMyISAM
-Tabellen logisch zu gruppieren und sie als ein Objekt zu referenzieren. Gut geeignet für VLDB-Umgebungen wie Data Warehousing. -
Federated
: Bietet die Möglichkeit, separate MySQL-Server zu verknüpfen, um eine logische Datenbank aus vielen physischen Servern zu erstellen. Sehr gut geeignet für verteilte oder Data-Mart-Umgebungen. -
Example
: Diese Engine dient als Beispiel im MySQL-Quellcode, das veranschaulicht, wie man mit dem Schreiben neuer Speicher-Engines beginnt. Sie ist in erster Linie für Entwickler von Interesse. Die Speicher-Engine ist ein „Stub“, der nichts tut. Sie können mit dieser Engine Tabellen erstellen, aber es können keine Daten in ihnen gespeichert oder aus ihnen abgerufen werden.
Sie sind nicht darauf beschränkt, dieselbe Speicher-Engine für einen ganzen Server oder ein Schema zu verwenden. Sie können die Speicher-Engine für jede Tabelle angeben. Beispielsweise könnte eine Anwendung hauptsächlich InnoDB
-Tabellen verwenden, mit einer CSV
-Tabelle für den Export von Daten in eine Tabellenkalkulation und einigen MEMORY
-Tabellen für temporäre Arbeitsbereiche.
Auswahl einer Speicher-Engine
Die verschiedenen Speicher-Engines, die mit MySQL geliefert werden, sind für unterschiedliche Anwendungsfälle konzipiert. Die folgende Tabelle gibt einen Überblick über einige Speicher-Engines, die mit MySQL geliefert werden, mit erläuternden Hinweisen im Anschluss an die Tabelle.
Tabelle 16.1 Storage Engines Feature Summary
Feature | MyISAM | Memory | InnoDB | Archive | NDB |
---|---|---|---|---|---|
B-Baumindizes | Ja | Ja | Ja | Nein | Nein |
Backup/Point-intime recovery (note 1) | Ja | Ja | Ja | Ja | Ja |
Cluster-Datenbankunterstützung | Nein | Nein | Nein | Nein | Ja |
Gruppierte Indizes | Nein | Nein | Ja | Nein | Nein |
Komprimierte Daten | Ja (Anmerkung 2) | Nein | Ja | Ja | Nein |
Daten-Caches | Nein | N/A | Ja | Nein | Ja |
Verschlüsselte Daten | Ja (Anmerkung 3) | Ja (Anmerkung 3) | Ja (Anm. 4) | Ja (Anm. 3) | Ja (Anm. 3) |
Fremdschlüsselunterstützung | Nein | Nein | Ja | Nein | Ja (Hinweis 5) |
Voll-.Text-Suchindizes | Ja | Nein | Ja (Anmerkung 6) | Nein | Nein |
Geospatial Datentyp-Unterstützung | Ja | Nein | Ja | Ja | Ja |
Geospatial-Indexierung Unterstützung | Ja | Nein | Ja (Anmerkung 7) | Nein | Nein |
Hash-Indizes | Nein | Ja | Nein (Anmerkung 8) | Nein | Ja |
Index-Caches | Ja | N/A | Ja | Nein | Ja |
Locking-Granularität | Tabelle | Tabelle | Reihe | Reihe | Reihe |
MVCC | Nein | Nein | Ja | Nein | Nein |
Replikationsunterstützung (Anmerkung 1) | Ja | Beschränkt (Anmerkung 9) | Ja | Ja | Ja |
Speichergrenzen | 256TB | RAM | 64TB | Keine | 384EB |
T-Baumindizes | Nein | Nein | Nein | Nein | Ja |
Transaktionen | Nein | Ja | Nein | Ja | |
Statistiken für Datenwörterbuch aktualisieren | Ja | Ja | Ja | Ja |
Anmerkungen:
1. Im Server und nicht in der Speicher-Engine implementiert.
2. Komprimierte MyISAM-Tabellen werden nur bei Verwendung des komprimierten Zeilenformats unterstützt. Tabellen, die das komprimierte Zeilenformat mit MyISAM verwenden, sind nur lesbar.
3. Im Server über Verschlüsselungsfunktionen implementiert.
4. Im Server über Verschlüsselungsfunktionen implementiert; in MySQL 5.7 und höher wird Data-at-Rest-Verschlüsselung unterstützt.
5. Unterstützung für Fremdschlüssel ist in MySQL Cluster NDB 7.3 und höher verfügbar.
6. Unterstützung für FULLTEXT-Indizes ist in MySQL 5.6 und höher verfügbar.
7. Unterstützung für Geospatial-Indizierung ist in MySQL 5.7 und höher verfügbar.
8. InnoDB verwendet intern Hash-Indizes für seine Funktion Adaptive Hash Index.
9. Siehe die Diskussion weiter unten in diesem Abschnitt.