LINUXMAKER, OpenSource, Tutorials

MyISAM oder InnoDB – welche Maschine ist die Richtige?

Genauso wie die Entscheidung für Linux gegen macOS oder Windows, oder umgekehrt, ist diese Entscheidung stark davon abhängig, welche Präferenzen man gerade hat. So haben beide Storage Engines ihre Vorteile und je nachdem, was gerade benötigt wird, wird MyISAM (My Indexed Sequential Access Method) oder InnoDB (Innobase Oy Inc.) benutzt. Mit dem Wissen um die Vorteile und Nachteile beider MySQL Storage Engines hat man eine gute Entscheidungsgrundlage für die Verwendung in dem jeweiligen Fall.

Eigenschaften von MyISAM

  • Wird häufiger genutzt und ist der gängige Standard da eine hohe Stabilität besteht.
  • INSERT und UPDATE werden schneller ausgeführt als bei InnoDB.
    Jedoch ist dafür SELECT langsamer.
  • Integrierte Volltextsuche ist möglich.
  • Die Schreibzugriffe erfolgen nur auf ganze Tabellen.

Im Dateisystem werden für jede MyISAM-Tabelle drei Dateien angelegt. Die Namen der Dateien bestehen dabei aus dem Namen der Tabelle und einer Dateinamenserweiterung, die den Dateityp kennzeichnet. So steht für die Tabellendefinition .frm, für die Daten steht .MYD (MYData) und für den Index steht .MYI (MyIndex).

Initialisierung von MyISAM

Um explizit eine MyISAM-Tabelle zu erstellen, kann in SQL die ENGINE Option vorgegeben werden.

CREATE TABLE t (i INT) ENGINE = MYISAM;

Eigenschaften von InnoDB

  • Die Referentielle Integrität wird automatisch eingehalten
    Das muss jedoch im Vorfeld explizit festgelegt werden.
  • SELECT wird schneller ausgeführt.
    Im Gegenzug sind INSERT und UPDATE dafür langsamer.
  • Großer Vorteil ist die Möglichkeit der Sperrung der Schreibzugriffe auf Datensätze.
  • Transaktionen werden unterstützt:
    • Wiederholte Lesezugriffe innerhalb einer Transaktion sind von Schreibzugriffen anderer Transaktionen nicht beeinflusst (Isolation aus ACID).
    • Die in der Transaktion erfolgten Schreiboperationen können durch einen Transaktionsabbruch (abort) widerrufen werden (rollback).
    • Schreibzugriffe in einer Transaktion bewirken eine Schreibsperre der betroffenen Datensätze für alle anderen Transaktionen (Row level locking).

InnoDB speichert die Tabellenstruktur in frm-Dateien, Nutzdaten und Indizes in einem Tabellenraum. Der Tabellenraum wird vor Beginn der Arbeit mit dem Datenbankserver eingestellt und kann sich über eine oder mehrere Dateien erstrecken. Die Dateien des Tabellenraums können auf verschiedene Verzeichnisse verteilt werden. Ähnlich einer Festplattenpartition kann die Konfiguration des Tabellenraums nicht nachträglich angepasst werden, ohne Datenverlust zu riskieren.

Initialisierung von InnoDB

Um explizit eine Tabelle mit InnoDB als Speichersubsystem anzulegen, kann die SQL-Option ENGINE verwendet werden.

CREATE TABLE t (i INT) ENGINE = InnoDB;

Wann wird MyISAM eingesetzt?

Bei kleinen Datenbanken oder Anwendungen wo viel und oft Daten geändert werden, ist der Einsatz von MyISAM sinnvoll. MyISAM ist daneben für Tabellen empfehlenswert, die deutlich häufiger gelesen werden (SELECT), als in sie geschrieben wird (INSERT/UPDATE).  Hier ist MyISAM deutlich performanter, weil INSERT und UPDATE schneller sind. Vor allem wird eine leistungsfähige Volltextsuche unterstützt, was Sinn macht, wenn Texte durchsucht werden sollen. Durch die fehlende Unterstützung von Transaktionen können im Fehlerfall inkonsistente Daten in der Datenbank zurückbleiben, sofern von mehreren zusammengehörigen Queries einige bereits ausgeführt wurden und andere Queries noch nicht. Ebenso fehlt MyISAM die referenzielle Integrität.
Beispiele für MyISAM ist bei WordPress oder bei Joomla zu finden.

Wann ist INNoDB sinnvoll?

InnoDB eignet sich vorallem bei großen Datenbanken, wenn viele Daten miteinander verknüpft werden. Sobald 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.
Einsatz findet InnoDB bei Typo3 CMS oder bei MediaWiki.