Login

InnoDB oder MyISAM

Haben Sie sich schon einmal gefragt, was es mit den unterschiedlichen sog. MySQL-Storage-Engines auf sich hat und wo eigentlich der Unterschied besteht? Bei diesem Thema trifft man unweigerlich auf die beiden gängigsten Typen: InnoDB und MyISAM

Die Frage selbst, welcher der beiden Typen nun der Bessere ist, tritt immer wieder auf und man findet so viele Befürworter wie wenn man die Frage stellen würde: Apple- oder Microsoft-Produkte?

Die Unterschiede

Wir beschränken uns auf die harten Fakten, die eine Übersicht der beiden Formate geben wird.

MyISAM
  Es wird bei einem Zugriff immer die ganze Tabelle gesperrt
  INSERT und UPDATE sind dadurch langsamer
  SELECT wird schneller ausgeführt
  Integrierte Volltextsuche
  viele Jahre Standard-Engine bei MySQL

InnoDB
  Zugriff sperrt nur den Datensatz (Row) anstelle der Tabelle
  INSERT und UPDATE werden schneller ausgeführt als bei MyISAM
  Unterstützt Fremdschlüssel
  Nach einem Absturz der Datenbank Möglichkeit der Wiederherstellung
  Höherer Bedarf an Arbeits- und Festplattenspeicher
  SELECT ist dafür langsamer
  Insgesamt etwas langsamere Verarbeitung von SQL-Statements
  Es gibt keine Volltextsuche (künftig geplant)
  Seit MySQL 5.5.6 Standard-Engine bei MySQL

Sieht man sich moderne CMS, Blogs, Shops oder Wikis an, so stellt man fest, dass mittlerweile nahezu alle ausschließlich InnoDB für alle Ihre Tabellen einsetzen. Viele Erweiterungen und Plugins nutzen jedoch auch MyISAM.

InnoDB eignet sich bei großen Datenbanken in denen 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 (z.B. Mediawiki, Magento).

Mischbetrieb und JOINs

Hat man viele Lesezugriffe auf die Tabellen und große Datensätze, ist MyISAM sicherlich die bessere Wahl. Dies ist auch der Grund, warum so viele Erweiterungen zu aktuellen Systemen auch auf MyISAM setzen, denn im Regelfall werden nur zusätzliche Informationen bereitgestellt und mit dem jeweiligen Plugin ausgelesen. Wenn dann seltener einmal auch eine Änderung/Speicherung erfolgt, ist dies zu vernachlässigen.

Dieser Mischbetrieb allerdings ist schlecht, spätestens wenn ein JOIN (Erklärung bei selfhtml.org) verwendet wird und eine der damit verknüpften Tabellen vom Typ MyISAM ist. Denn jede Abfrage mit einem JOIN auf eine MyISAM-Tabelle verursacht einen Table-Lock, was bei vielen Datenbank-Queries die Reaktionszeit deutlich beeinträchtigt.

Ist man sich sicher, dass keine bis sehr wenige JOINs im Einsatz sind und die klare Trennung der Funktionen findet eben aus dem Grund statt, für den jeweiligen Anwendungszweck die passendste Storage Engine zu verwenden, ist ein Mischbetrieb problemlos möglich. Beispielsweise MyISAM für eine Tabelle mit Volltextsuche, InnoDB für Tabellen mit Sessions oder Einstellungen eines Benutzers.

Tabelle umwandeln

Soll eine bestehende Tabelle einer Datenbank in MyISAM umgewandelt werden, so lautet der Befehl im phpMyAdmin dafür:
ALTER TABLE tablename ENGINE=myisam;

Tabelle einer Datenbank in InnoDB umwandeln:
ALTER TABLE tablename ENGINE=innodb;

Vorher sollte jedoch unbedingt ein Backup der Datenbank erstellt werden!

Fazit

mysql-logoInnoDB ist grundsätzlich neuer, wenn auch komplexer und benötigt im Vergleich zu MyISAM eine deutlich performantere Datenbank-Umgebung. Allerdings werden auch die Web-Anwendungen immer komplexer und benötigen die Möglichkeiten, die InnoDB ihnen bietet (Spätestens wenn Fremdschlüssel und/oder Transaktionen benötigt werden).

Egal wofür man sich letztlich entscheidet, sollte von einem Mischbetrieb beider Storage-Engines – wie erwähnt – im besten Fall abgesehen werden.

Haben Sie sich schon einmal über die MySQL-Storage-Engines Gedanken gemacht und bevorzugen Sie eine der Erwähnten?

1 Kommentar

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *
Bitte beachte, dass sich Dein Kommentar auf den Artikel beziehen sollte. Wenn Du ein persönliches Kundenanliegen besprechen möchtest, wende Dich bitte an unseren Kundenservice auf Facebook, Twitter oder über unsere Support-Seite.