Letzte Änderung am 10. Juli 2020

In diesem Kapitel werden wir über MySQL-Speicher-Engines sprechen.

Eine Speicher-Engine ist ein Softwaremodul, das ein Datenbankverwaltungssystem zum Erstellen, Lesen und Aktualisieren von Daten in einer Datenbank verwendet. Es gibt zwei Arten von Speicher-Engines in MySQL: transaktionale und nicht-transaktionale.

Für MySQL 5.5 und später ist die Standard-Speicher-Engine InnoDB. Die Standard-Speicher-Engine für MySQL vor Version 5.5 war MyISAM. Die Wahl der richtigen Speicher-Engine ist eine wichtige strategische Entscheidung, die sich auf die zukünftige Entwicklung auswirken wird. In diesem Lehrgang werden wir die Speicher-Engines MyISAM, InnoDB, Memory undCSV verwenden. Wenn Sie neu bei MySQL sind und sich mit dem MySQL-Datenbankverwaltungssystem vertraut machen wollen, ist dies nicht weiter von Belang. Wenn Sie eine Produktionsdatenbank planen, werden die Dinge komplizierter.

Liste der Speicher-Engines

MySQL unterstützt Speicher-Engines:

  • InnoDB
  • MyISAM
  • Memory
  • CSV
  • Merge
  • Archive
  • Federated
  • Blackhole
  • Beispiel

InnoDB ist die am weitesten verbreitete Storage Engine mit Transaktionsunterstützung. Es handelt sich um eine ACID-konforme Speichermaschine. Sie unterstützt Sperren auf Reihenebene, Wiederherstellung bei Abstürzen und Gleichzeitigkeitskontrolle in mehreren Versionen. Es ist die einzige Engine, die eine referenzielle Fremdschlüsselintegritätsbeschränkung bietet. Oracle empfiehlt die Verwendung von InnoDB für Tabellen, außer für spezielle Anwendungsfälle.

MyISAM ist die ursprüngliche Speicher-Engine. Es handelt sich um eine schnelle Speicher-Engine, die keine Transaktionen unterstützt. MyISAM bietet Tabellen-Level-Locking. Es wird hauptsächlich im Web und im Data Warehousing verwendet.

Memory Storage Engine erstellt Tabellen im Speicher. Sie ist die schnellste Engine. Sie bietet Sperren auf Tabellenebene. Die Memory-Storage-Engine ist ideal für die Erstellung temporärer Tabellen oder für schnelle Nachschlagewerke. Die Daten gehen verloren, wenn die Datenbank neu gestartet wird.

CSV speichert Daten in CSV-Dateien. Es bietet große Flexibilität, da Daten in diesem Format leicht in andere Anwendungen integriert werden können.

Merge arbeitet mit zugrunde liegenden MyISAM-Tabellen. Merge-Tabellen helfen, große Datenmengen einfacher zu verwalten. Es gruppiert eine Reihe von identischen MyISAM-Tabellen logisch und referenziert sie als ein Objekt – gut für Data-Warehousing-Umgebungen.

Die Archivspeicher-Engine ist für eine hohe Einfügegeschwindigkeit optimiert. Sie komprimiert die Daten beim Einfügen. Sie unterstützt keine Transaktionen. Sie ist ideal für die Speicherung und den Abruf großer Mengen selten referenzierter historischer, archivierter Daten.

Das Blackhole-Speichermodul nimmt Daten an, speichert sie aber nicht. Abrufe geben immer eine leere Menge zurück. Die Funktionalität kann in verteilten Datenbanken verwendet werden, in denen Daten automatisch repliziert, aber nicht lokal gespeichert werden. Diese Speicher-Engine kann zur Durchführung von Leistungstests oder anderen Tests verwendet werden.

Die föderierte Speicher-Engine bietet die Möglichkeit, MySQL-Server zu trennen, um eine logische Datenbank aus vielen physischen Servern zu erstellen.Abfragen auf dem lokalen Server werden automatisch auf den entfernten (föderierten) Tabellen ausgeführt. Sie eignet sich gut für verteilte Umgebungen.

mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 2. row *************************** Engine: CSV Support: YES Comment: CSV storage engineTransactions: NO XA: NO Savepoints: NO...

Der Befehl SHOW ENGINES zeigt alle verfügbaren Engines an, die der Server unterstützt.

Auswahl der richtigen Engine

Keine Speicher-Engine ist ideal für alle Bedingungen. Einige funktionieren unter bestimmten Bedingungen am besten, während sie in anderen Situationen schlechter abschneiden. Es gibt Kompromisse, die in Betracht gezogen werden müssen. Eine sicherere Lösung erfordert mehr Ressourcen; sie könnte langsamer sein, mehr CPU-Zeit und mehr Speicherplatz benötigen. MySQL ist sehr flexibel, da es mehrere verschiedene Speicher-Engines bietet. Einige von ihnen, wie die Archive-Engine, wurden für bestimmte Situationen entwickelt.

In einigen Fällen ist die Antwort klar. Wann immer wir mit Zahlungssystemen zu tun haben, sind wir verpflichtet, die sicherste Lösung zu verwenden. Wir können es uns nicht leisten, solch sensible Daten zu verlieren. InnoDB ist der richtige Weg. Wenn wir eine Volltextsuche wollen, können wir entweder MyISAM oder InnoDB wählen. Nur InnoDB unterstützt die Einschränkung der referenziellen Integrität von Fremdschlüsseln, und wenn wir planen, diese Einschränkung zu verwenden, dann ist die Wahl klar.

Speicher-Engines festlegen und ändern

Die Speicher-Engine wird zum Zeitpunkt der Tabellenerstellung festgelegt.

mysql> CREATE TABLE Cars(Id INTEGER PRIMARY KEY, Name VARCHAR(50), -> Cost INTEGER) ENGINE='MyISAM';

Das Schlüsselwort ENGINE legt die Speicher-Engine fest, die für diese bestimmte Tabelle verwendet wird.

Wenn wir die Speicher-Engine nicht explizit angeben, wird die Standard-Speicher-Engine benutzt. Vor MySQL 5.5 war die Standard-Speicher-Engine MyISAM. Ab MySQL 5.5 ist die Standard-Speicher-Engine InnoDB.

Es ist möglich, auf eine andere Speicher-Engine zu migrieren. Beachten Sie, dass die Migration einer großen Tabelle sehr lange dauern kann. Außerdem kann es bei der Migration von Tabellen zu Problemen kommen. Einige Funktionen werden möglicherweise nicht in beiden Tabellen unterstützt.

mysql> SELECT ENGINE FROM information_schema.TABLES -> WHERE TABLE_SCHEMA='mydb' -> AND TABLE_NAME='Cars';+--------+| ENGINE |+--------+| InnoDB |+--------+1 row in set (0,05 sec)

Diese SQL-Anweisung ermittelt die Speicher-Engine, die für eine Cars Tabelle in der mydb Datenbank verwendet wird. Wir könnten auch die SQL-Anweisung SELECT CREATE TABLE Cars verwenden. Die information_schema ist eine Tabelle, die technische Informationen über unsere Tabellen speichert.

mysql> ALTER TABLE Cars ENGINE='MyISAM';

Diese SQL-Anweisung ändert die Speicher-Engine der Tabelle Cars in MyISAM.

mysql> SELECT ENGINE FROM information_schema.TABLES -> WHERE TABLE_SCHEMA='mydb' -> AND TABLE_NAME='Cars';+--------+| ENGINE |+--------+| MyISAM |+--------+1 row in set (0,00 sec)

Das Speichermodul der Tabelle ist jetzt MyISAM.

In diesem Teil des MySQL-Tutorials haben wir die Speicher-Engines behandelt.

Articles

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.