Advanced MySQL - Speicherengines - MyISAM und InnoDB
1. MyISAM
Das ist das Standardsystem von MySQL. Zumindest unter Linux. Wenn man also eine Tabelle anlegt, ohne eine spezielle "Engine" auszuwählen, so wird MyISAM genommen. Diese Speicherengine wurde vor allem für eine sehr schnelle Verarbeitung von Abfragen optimiert.
Kennzeichen
- Die Daten werden unabhängig vom Betriebssystem gespeichert und können im Normalfall ohne Probleme auf andere Systeme übertragen werden.
- Eine Tabelle kann maximal 64 Indizes haben.
- Ein Index (siehe oben) darf aus maximal 16 Spalten bestehen.
- Spalten vom Typ
BLOBoderTEXTkönnen einen Index (siehe oben) haben. - MyISAM-Tabellen unterstützen
FULLTEXT(dazu später mehr).
Vorteile
- Eine sehr schnelle Ausführung von
SELECT-Anweisungen.
Nachteile
- Die Tabellen werden nicht auf referentielle Integrität von Fremdschlüsseln geprüft (dazu später mehr).
- Die Tabellen sind nicht transaktionssicher (dazu später auch mehr).
2. InnoDB
Diese Engine wurde entwickelt, um die Nachteile von MyISAM auszugleichen. Leider bedeutet das auch, dass man dafür andere in Kauf nehmen muss.
Kennzeichen
- Es werden Transaktionen unterstützt.
- InnoDB unterstützt Fremdschlüssel.
- Tabellen und Indizes werden in einen eigenen "Tablespace" gespeichert.
Vorteile
- Transaktionssicher (siehe oben).
- Die referentielle Integrität von Fremdschlüsseln wird geprüft (siehe auch oben).
- InnoDB wurde für die Verarbeitung großer Datenmengen optimiert.
Nachteile
- Die Geschwindigkeit ist langsamer als bei MyISAM, wenn man mit Fremdschlüsseln arbeitet.
- Es ist keine
FULLTEXT-Suche möglich.
3. Schreibweisen bei der Definition
Wie ich vorhin schon sagte, wir der Typ einer Tabelle bei der Definition über ENGINE festgelegt. Da MySQL bei Anweisungen(!)
nicht zwischen Groß- und Kleinschreibung unterscheidet, ist das hier auch völlig lattens. Es gibt daher folgende Möglichkeiten.
ENGINE=InnoDBENGINE=INNODBENGINE=innodb
Dasselbe gilt natürlich auch für MyISAM.
4. Und welche nimmt man nun?
Ganz einfach, die die man gerade benötigt. Ich selber bevorzuge eindeutig InnoDB, da die Vorteile die Nachteile deutlich aufwiegen. Mit MyISAM dagegen arbeite ich nur dann, wenn ich Datentabellen ohne Relation habe oder eine Volltextsuche benötige.