Advanced MySQL - Speicherengines - MyISAM und InnoDB
1. MyISAM
Das war bis Version 5.5.5 das Standardsystem von MySQL. Zumindest unter Linux. Wenn man also eine Tabelle anlegte, ohne eine spezielle "Engine" auszuwählen, so wurde bis dato 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
BLOB
oderTEXT
kö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
Ist wie gesagt seit Version 5.5.5 Standard. 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. (Anmerkung: ab der 5.6 ist es implementiert)
Ein Hinweis dazu
InnoDB ist heutzutage bei MySQL die Standardengine, wenn es um komplexe Internetanwendungen geht. Denn da hat sich die Komplexität in den letzten Jahren immer weiter gesteigert. Insbesondere die Referentielle Integrität spielt eine immer größere Rolle.
Und all das ist mit MyISAM-Tabellen schlichtweg nicht zu schaffen. Darum empfehle ich euch eindringlich, von vornherein mit InnoDB zu arbeiten. Die genauen Vorteile zeige ich euch später und in meinem Monstertutorial (eigentlich sind es sechs) gehe ich dann auf die Praxis ein.
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=InnoDB
ENGINE=INNODB
ENGINE=innodb
Dasselbe gilt natürlich auch für MyISAM.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt