MyISAM vs. InnoDB – was ist besser?

Diese Frage lässt sich eigentlich nicht beantworten, denn wie es sooft der Fall ist (z.B. auch bei Windows vs. Linux vs. Mac), haben beide Systeme ihre Vorteile und je nachdem, was man gerade braucht, nutzt man besser MyISAM oder InnoDB. Aber woher weiß man, welches der beiden MySQL-Storage-Engines man braucht? Dazu muss man wissen, welche Vorteile und Nachteile die Systeme haben. Ich habe dazu mal einiges an Wissen zusammengetragen.

Eigenschaften von InnoDB

  • Referentielle Integrität wird automatisch eingehalten
    • Das muss zuvor explizit festgelegt werden
  • SELECT wird schneller ausgeführt
    • INSERT und UPDATE ist dafür langsamer
  • Schreibzugriffe auf Datensätze können gesperrt werden

Eigenschaften MyISAM

  • Häufiger genutzt und gängigster Standard (hohe Stabilität)
  • INSERT und UPDATE werden schneller ausgeführt als bei InnoDB
    • SELECT ist dafür langsamer
  • Integrierte Volltextsuche
  • Schreibzugriffe nur auf ganze Tabellen

Wann setzt man InnoDB ein?

InnoDB eignet sich vor allem bei großen Datenbanken, wo viele Daten miteinander verknüpft sind. Wenn hier Daten gelöscht werden, löscht InnoDB alle referenzierten Daten automatisch mit. Das macht es der Anwendung hinter der Datenbank leichter, die referentielle Integrität einzuhalten.
Prominente Beispiele für Web-Anwendungen mit InnoDB sind unter anderem:

Wann setzt man MyISAM ein?

Bei kleinen Datenbanken oder Anwendungen, wo viel und oft Daten geändert werden. Hier ist MyISAM deutlich performanter, weil INSERT und UPDATE schneller sind. Und natürlich wenn man Texte durchsuchen möchte (Volltextsuche).
Prominente Beispiele für Web-Anwendungen mit MyISAM sind unter anderem:

Und wenn ich beides brauche?
Natürlich ist es möglich, beide Storage Engines für verschiedene Tabellen in der selben Datenbank zu verwenden. So setzt Mediawiki z.B. für die Standard-Suche die MySQL Volltextsuche von MyISAM ein und der Rest der Datenbank verwendet InnoDB.

Schlusswort

Es gibt also nicht DIE beste Storage Engine für MySQL. Je nach Verwendungszweck eignet sich InnoDB oder MyISAM besser.
Ich persönlich nutze lieber InnoDB, aber ihr könnt euch nun selbst eine Meinung bilden.