Hauptmenü

Untermenü

Advanced MySQL - Speicherengines

1. Der feine Unterschied

MySQL bietet derzeit 10 verschiedene "Storage engines" an. Und jede von denen wurde für einen ganz bestimmten Zweck optimiert. Meiner Meinung nach sind davon eigentlich nur drei wirklich interessant, ich stelle euch trotzdem mal alle vor.

2. Und nun?

Na ja, für BDB wurde der Support ab 5.1 eingestellt. EXAMPLE ist was für Leute, die selber eigene Speicherengines für MySQL programmieren möchten. Bei FEDERATED geht es um den Zugriff auf externe Datenbanktabellen und BLACKHOLE wird wohl hauptsächlich bei sehr großen Datenbanken und Replikationen eingesetzt. Details dazu findet ihr hier. Konzentrieren wir uns also auf den Rest. Zunächst mal kümmern wir uns um die "Unwichtigen".

ARCHIVE

Damit kann man sehr große Datenmengen abspeichern und hat trotzdem einen geringen Speicherbedarf. Leider gibt es hier keine Möglichkeit einen Index zu setzen.

CSV

Speichert die Tabellen im so genannten CSV-Format. Ich selber hatte noch nie damit zu tun, aber ihr könnt es gerne ausprobieren. Nur müsst ihr das ohne meine Hilfe machen.

3. Die "interessanten" Engines

MEMORY

Hier wird nur die Struktur in einer Datei abgespeichert. Die Inhalte selber landen direkt im Arbeitsspeicher. Der Vorteil ist, dass Abfragen rattenschnell abgearbeitet werden. Darum wird dieser Typ auch sehr gerne bei temporären Tabellen eingesetzt. Leider bringt das auch einen Nachteil mit sich. Sobald der Server heruntergefahren oder neu gestartet wird, gehen alle Einträge hops.

MyISAM

Dies war lange Zeit die Standardengine von MySQL. Leider gibt es dabei ein paar Nachteile, aber dazu komme ich gleich.

MERGE

Hier werden mehrere MyISAM-Tabellen zu einer zusammengefasst. Klingt interessant, aber da ich damit noch nie gearbeitet habe, ignoriere ich diesen Typ bis auf weiteres.

InnoDB

Hier wurden die Nachteile von MyISAM ausgemerzt, allerdings gibt es auch hier ein paar Probleme. Auf die Details gehe ich gleich ein.

4. Und welche Engines kann ich nutzen?

Dafür reicht eine einfache Anweisung aus, nämlich SHOW ENGINES;. Und das Ergebnis könnte dann so aussehen. Die "unwichtigen" Informationen habe ich aus Platzgründen einfach mal weggelassen.


+--------------------+---------+--------------+
| Engine             Support Transactions |
+--------------------+---------+--------------+
| FEDERATED          NO      NULL         |
| MRG_MYISAM         YES     NO           |
| MyISAM             YES     NO           |
| BLACKHOLE          YES     NO           |
| CSV                YES     NO           |
| MEMORY             YES     NO           |
| ARCHIVE            YES     NO           |
| InnoDB             | DEFAULT | YES          |
+--------------------+---------+--------------+


Wichtig

... sind hier die Spalten Support und Transactions. Erstere bezieht sich auf die Verfügbarkeit und die zweite auf die Unterstützung von Transaktionen. Das DEFAULT zeigt die Standardeinstellung, wenn man beim Erzeugen einer Tabelle keine Speicherengine angibt. Unter Windows ist InnoDB der Standard, unter Linux MyISAM.

5. Eine Speicherengine definieren

Dazu muss man beim Anlegen einer Tabelle einfach hinter der schließenden Klammer den Typ mittels ENGINE angeben. Die ältere Version TYPE ist mittlerweile als "deprecated" (missbilligt) eingestuft worden.


CREATE TABLE blubb
(
  ...
) ENGINE=InnoDB;

CREATE TABLE blubber
(
  ...
) ENGINE=MyISAM;

Ein wichtiger Hinweis

Die Definition einer Engine bezieht sich auf Tabellen(!) und nicht auf Datenbanken! Man kann folglich in einer Datenbank Tabellen mit den unterschiedlichsten Formaten haben. Es gibt zwar ein paar Einschränkungen, aber darauf werde ich unter den folgenden Abschnitten dezidiert eingehen. Konzentrieren wir uns zunächst auf die beiden gängigsten Tabellentypen.

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt