MySQL-Tabellentypen: Ein Vergleich

MySQL bietet verschiedene Tabellentypen bzw. -formate. Als Standard wird MyISAM verwendet, aber daneben gibt es auch InnoDB, BDB, MemoryDB und andere. Dieser Artikel soll die Eigenschaften der verschiedenen Systeme vorstellen und sie miteinander vergleichen.

Grundlegend wird in transaktionsbasierte (z.B. InnoDB, BDB, Gemini) und nicht-transaktionsbasierte Formate (z.B. MyISAM, ISAM, HEAP, MERGE) unterschieden. Transaktionen sind untrennbare Blöcke.
Ein gern genommenes Beispiel ist die Überweisung bei einer Bank:

UPDATE konten SET saldo=saldo-100 WHERE ktonr=1234;
  UPDATE banken SET saldo=saldo-100 WHERE filialnr=(SELECT filialnr FROM konten WHERE ktonr=1234);
  UPDATE konten SET saldo=saldo+100 WHERE ktonr=4322;
  UPDATE banken SET saldo=saldo+100 WHERE filialnr=(SELECT filialnr FROM konten WHERE ktonr=4322);

Es sollten entweder alle Befehle ausgeführt werden oder gar keiner (nicht auszudenken, was passieren würde, wenn der Server nach dem ersten oder zweiten Befehl einen Fehler bekommt – dann ist das Geld im Nirwana verschwunden). Deshalb umschließt man diesen Block mit BEGIN und COMMIT;. Dann wird der DB-Zustand nur gespeichert, wenn das COMMIT erreicht wird – also alle Befehle ausgeführt wurden.

Nun aber zu den einzelnen Formaten:
MyISAM (stellvertetend für nicht-transaktionsorientierte Tabellentypen)

InnoDB (stellvertetend für transaktionsorientierte Tabellentypen)

Memory-Engine (Heap-Tabellen)
Diese Tabellen existieren vollständig im RAM. Das ist gleichzeitig Fluch und Segen:

Das sind die wichtigsten Unterschiede. Natürlich gibt es auch noch andere Tabellentypen, aber in der Praxis kommen eigentlich nur diese drei zum Einsatz (was MySQL angeht).

Fazit:
InnoDB, Gemini und BDB sollten dann eingesetzt werden, wenn die Konsistenz der Datenbank auf keinen Fall gefährdet werden darf. Die Daten können nach einem Absturz von MySQL automatisch wiederhergestellt werden. Zugleich stellen Transaktionen sicher, dass nicht mehrere Anwender simultan Datensätze verändern, und sichern damit die Integrität der Datenbank.
Verknüpfte Tabellen verweisen nur auf tatsächlich existierende Datensätze und nicht ins Leere. Transaktions-sichere Tabellen sind aber langsamer als das am häufigsten verwendete MyISAM-Format.
Noch schneller als diese sind Heap Tables, die vollständig im Speicher residieren, aber nach einem Absturz oder Reboot natürlich verschwunden sind und sich deshalb nur für eine temporäre Datenhaltung eigen.


Deprecated: Directive 'allow_url_include' is deprecated in Unknown on line 0