Zum Inhalt springen

Storage Engines

  • von

Wenn man eine MySQL-Tabelle erstellt kann man neben den Feldern und Indizes auch die Storage Engine, also die Art, wie die Daten gespeichert werden, angeben. In den meisten Fällen ist man mit der Standardeinstellung gut bedient, aber es gibt auch Fälle, bei denen es sich lohnt sich bewusst für eine andere Engine zu entscheiden. Am Beispiel von MyISAM und InnoDB sollen in diesem Beitrag kurz ein paar Unterschiede und Anwendungsgebiete aufgezeigt werden.

Für die Auswahl der „richtigen“ Storage Engine ist es wichtig, sich darüber klar zu werden wie auf die Daten zugegriffen werden soll (primär lesend oder viele Schreibzugriffe?), ob man mit mehreren Tabellen arbeitet und hier die Konstistenz der Daten wichtig ist (Stichworte: Transaktionen, Fremdschlüssel) oder ob man bestimmte Features braucht, die vielleicht nicht in allen Engines vorhanden sind.

MyISAM

MyISAM ist die Standard-Engine beim Anlegen einer MySQL-Tabelle und für die meisten Anwendungen, bei denen hauptsächlich lesend auf die Daten zugegriffen wird, auch die richtige Wahl. Da die Interne Verwaltung der Zugriffe so einfach wie möglich gehalten ist, gibt es kaum einen Überschuss bezogen auf die einzelne Anfrage. Allerdings bedeutet das auch, dass beim Schreiben/??ndern eines Datensatzes die gesamte Tabelle erstmal gegen alle anderen Zugriffe gesperrt wird, was vor allem bei vielen „gleichzeitigen“ Zugriffen zu langen Antwortzeiten führt.

Transaktionen oder Fremdschlüsselverknüpfungen sind unter MyISAM nicht möglich.

MyISAM bietet dafür mit dem Volltextindex als einzige Storage Engine eine besondere Form der Indizierung an. Dabei wird ein Index über die einzelnen Wörter in den ausgewählten Feldern erstellt, was die Suche nach einem Wort extrem beschleunigt. Allerdings funktioniert das nur für ganze Wörter. Will man nach Wortbestandteilen suchen muss man doch wieder auf eine LIKE-Abfrage zurückgreifen, die dann natürlich entsprechend länger dauert.

InnoDB

InnoDB verwaltet die Zugriffe sehr komplex, was bei jedem Zugriff zu einem hohen Aufwand (seitens der Storage Engine) führt. Allerdings ist es dadurch möglich viele gleichzeitige Zugriffe (insbesondere schreibende) auszuführen, weil immer nur der einzelne Datensatz zur Bearbeitung gesperrt wird.

Transaktionen oder Fremdschlüsselverknüpfungen sind ein Hauptbestandteil von InnoDB, wobei aber anzumerken ist, dass das nur funktioniert wenn alle beteiligten Tabelle InnoDB als Storage Engine verwenden.

Fazit

Neben MyISAM und InnoDB gibt es noch eine ganze Reihe weiterer Storage Engines für MySQL, die normalerweise in dem weiten Raum zwischen den beiden „Extremen“ anzusiedeln sind. Welche Engine im konkreten Fall die bessere ist ist je nach Anforderungen individuell abzuwägen und eventuell auch zu testen. Allgemein läßt sich aber sagen, dass bei einem hohen Anteil an schreibenden Zugriffen (z.B. Foren oder Besucherstatistiken) eher in Richtung InnoDB zu gehen ist.

Schlagwörter: