MyISAM versus InnoDB

MySQL Logo

Für das relationale Datenbankmanagementsystem MySQL existieren verschiedene Storage-Engines. Die Storage-Engine kümmert sich um den Hauptteil der Transaktionsverwaltung. Außerdem verwaltet sie Indizes und referenzielle Integritäten. Die bekanntesten Storage-Engines für MySQL sind MyISAM und InnoDB. MyISAM war die Standard-Engine von MySQL bis Version 5.1. Seit Version 5.5 ist dies InnoDB.

Doch welche Unterschiede bestehen zwischen MyISAM und InnoDB? Wo liegen die Vor- und Nachteile und wie sieht die Performance aus?

MyISAM

Vorteile:

  • vor allem bei vielen Lesezugriffen zeichnet sich MyISAM durch eine hohe Effizienz aus
  • leistungsfähige integrierte Volltextsuche
  • Tabellendateien können auf einen anderen PC kopiert werden und stehen sofort in der Datenbank zur Verfügung

Nachteile:

  • MyISAM unterstützt keine Transaktionen
  • keine referenzielle Integrität, d.h. Integrität auf Beziehungsebene
  • bei Schreiboperationen wird immer die gesamte Tabelle gesperrt, sodass währenddessen auf die gesamte Tabelle weder gelesen noch geschrieben werden kann
  • Tabelle kann beim Serverausfall reparaturbedürftig sein

InnoDB

Vorteile:

  • Unterstützung von Transaktionen
  • referenzielle Integrität
  • sperrt bei Schreiboperationen nur die betroffene Zeile der Tabell
  • sehr schnell

Nachteile:

  • keine Volltextsuche (kommt in MySQL 5.6)

Fazit

Mit MySQL 5.5 sollte man auf alle Fälle die neue Standard-Engine InnoDB verwenden. Sie bietet einige Vorteile und ist praktisch immer schneller als MyISAM (Quelle). Einziger Punkt der für MyISAM spricht ist die Volltextsuche. Allerdings wird sich das mit MySQL  5.6 ändern, denn dann soll InnoDB ebenfalls über eine Volltextsuche verfügen. Spätestens dann kann man bedenkenlos auf InnoDB setzen.

Tobi

Hallo, mein Name ist Tobias und ich habe diesen Blog im April 2009 ins Leben gerufen. Seitdem blogge ich hier über Software, Internet, Windows und andere Themen, die mich interessieren. SSDblog ist mein zweiter Blog, indem es rund um das Thema SSDs geht. Ich würde mich freuen, wenn ihr meinen Feed abonniert oder mir auf Twitter und Facebook folgt.

Eine Antwort

  1. Frank sagt:

    “….sollte man auf alle Fälle…”

    Das würde ich so nicht schreiben.
    InnoDB ist Oracles liebstes Kind, darum fällt dieser “Test” von Oracle klar für innoDB aus.
    Wer sehr viele Lesezugriffe hat, fuhr bisher mit MyISAM ganz gut.
    Die Volltext-Suche muss Oracle bei innoDB erst einmal unter Beweis stellen und wer große Datenmengen auf einen anderen Server kopieren möchte, um sie dort schnell weiter verwenden zu können, wird MyISAM ebenfalls schätzen.
    “Auf alle Fälle” würde ich zumindest einschränken.

    Mir hatte ein innoDB-Jünger regelmäßig erzählt, wie langsam doch MyISAM wäre (das hatte er wohl irgendwo gelesen, denn praktisch konnte er es mir nicht beweisen).
    Als ich ihm die Microtimes für die DB-Aktionen zeigte, konnte er es immer noch nicht glauben, dass eine MyISAM Tabelle so schnell sein könne.

    Was jedoch tatsächlich bei sehr vielen Abfragen und sehr großen Tabellen ein Horror war und ist, dass MyISAM die komplette Tabelle sperrt, wenn eine Abfrage mal länger dauert. Da hängen sofort tausende Anfragen im “pending”.

Schreibe einen Kommentar zu Frank Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert