Manchmal wurde ich in Interviews gefragt: Welche Vorteile hat InnoDB gegen MyISAM und wann ist MyISAM besser als InnoDB? Der erste Teil der Frage ist klar: InnoDB ist transaktionskonform, Blockierung auf Zeilenebene statt Sperren auf Tabellenebene, Fremdschlüsselunterstützung und einige andere, diese Punkte kamen mir sofort in den Sinn.
Aber wenn MyISAM wirklich besser ist als InnoDB?
MyISAM ist besser als InnoDB, wenn Sie diese erweiterten Funktionen nicht benötigen und die Speichergeschwindigkeit ist wichtiger als andere Bedenken. MyISAM ermöglicht auch die Durchführung von Volltextsuchen innerhalb der Datenbank-Engine selbst. anstatt die Ergebnisse abfragen zu müssen und sie dann als Array oder was auch immer in Ihrer Anwendung zu suchen.
InnoDB ist eine vernünftige Wahl, wenn Sie Daten mit einem hohen Grad an Genauigkeit mit komplizierten Interaktionen und Beziehungen speichern müssen. MyISAM ist eine vernünftige Wahl, wenn Sie eine große Anzahl von Datensätzen in kurzer Zeit speichern oder laden müssen.
Ich würde die Verwendung von MyISAM für wichtige Daten nicht empfehlen. Es eignet sich hervorragend für Logging- oder Kommentarfelder oder andere Dinge, bei denen es Ihnen nicht besonders wichtig ist, ob eine Aufzeichnung in den verschlungenen Unterwelt verschwindet. InnoDB ist gut, wenn Sie sich um Ihre Daten kümmern, keine schnellen Suchvorgänge benötigen und für die Verwendung von MySQL benötigen.
Erwähnenswert ist auch, dass InnoDB Sperren auf Zeilenebene unterstützt, während MyISAM nur Sperren auf Tabellenebene unterstützt. Das heißt, dass InnoDB in vielen gebräuchlichen Situationen erheblich schneller sein kann, da mehr Abfragen parallel ausgeführt werden.
>Die Quintessenz: Verwenden Sie InnoDB, es sei denn, Sie müssen unbedingt MyISAM verwenden. Alternativ entwickeln Sie gegen PostgreSQL und nutzen das Beste aus beiden.
MyISAM unterstützt keine Transaktionen (und die anderen erwähnten Dinge), so dass es schneller arbeiten kann. MyISAM ist eine Möglichkeit, in solchen Situationen höhere Leistung zu erzielen, wenn Sie diese Funktionen nicht benötigen.
MyISAM unterstützt wie erwähnt Volltext, unterstützt aber auch den Tabellentyp MERGE. Dies ist praktisch, wenn Sie eine große Tabelle haben und Teile davon regelmäßig "austauschen" / archivieren möchten. Denken Sie an eine Protokollierung oder melden Sie Daten, die Sie im letzten Quartal und / oder Jahr aufbewahren möchten. MyISAM behandelt große Datenmengen besser, wenn Sie hauptsächlich nur selten Daten eingeben oder löschen oder löschen.
Die Leistung von InnoDB sinkt ziemlich schnell und dramatisch, wenn Sie die Indizes nicht mehr im Speicher ablegen können. Wenn Ihr Primärschlüssel keine Nummer ist (d. H. Automatisches Inkrement), sollten Sie InnoDB überdenken. Der Primärschlüssel wird für jeden Index einer InnoDB-Tabelle repliziert. Wenn Sie also einen großen Primärschlüssel und einige andere Indizes haben, wird Ihre InnoDB-Tabelle sehr schnell sehr groß.
MyISAM hat im Vergleich zu InnoDB eine sehr einfache Struktur. Es gibt keine Zeilenversionsverwaltung, es gibt eine Datei pro Tabelle und Zeilen werden sequenziell gespeichert. Während es gleichzeitige Einfügungen unterstützt (SELECTs und 1 INSERT können zusammen ausgeführt werden), verfügt es jedoch auch über Sperren auf Tabellenebene (bei zwei INSERT-Anweisungen in derselben Tabelle muss 1 warten). Außerdem sind UPDATE und DELETE aufgrund der Struktur der Datendateien langsam.
MyISAM unterstützt keine Transaktionen oder Fremdschlüssel.
Im Allgemeinen sollte MyISAM besser sein, wenn Sie an allgemeinen Trends arbeiten (so dass Sie sich nicht um die Korrektheit einzelner Zeilen kümmern) und die Daten bei Nacht oder nie aktualisiert werden. Außerdem können einzelne Tabellen über das Dateisystem von einem Server auf einen anderen verschoben werden.
InnoDB unterstützt sehr gut Nebenläufigkeit und Transaktionen. Hat eine angemessene Unterstützung für Volltext und eine fast anständige Unterstützung für Fremdschlüssel.