Die Qual der Tabellen-Wahl

Tabellenarten für MySQL

MySQL arbeitet standardmäßig mit MyISAM. Doch andere Tabellenarten haben durchaus ihre Vorzüge. Der Workshop zeigt die Unterschiede zu InnoDB.

MySQL Logo Symbol

© Archiv

MySQL Logo Symbol

Normalerweise muss sich der Entwickler bei einer Datenbank nicht darum kümmern, wie die Daten gespeichert werden. Das erledigt die Storage Engine der Datenbank automatisch. Bei MySQL gibt es allerdings eine Besonderheit, MySQL AB, die Firma hinter der MySQL-Entwicklung, setzt auf mehrere Storage Engines. Bei neuen technologischen Ansätzen wird so nicht die gesamte Datenbank geändert, sondern nur eine neue Storage Engine entwickelt. Dies geschieht beispielsweise mit Falcon. Diese Storage Engine ist für MySQL 6 in Arbeit (www.mysql.de/why-mysql/white-papers/falcon-getting- started.php).

Alternativen

Aber nicht nur zukünftige Storage Engines sind eine Überlegung wert. Auch die bestehenden sind durchaus interessant. Welche aktuell installiert sind, erfahren Sie beispielsweise im phpMyAdmin. Wechseln Sie dort in der Ansicht für den Server auf Formate. Hier sehen Sie alle Storage Engines, die verfügbar sind.MyISAM ist der Standard, andere sind dagegen ausgegraut. Das heißt, sie stehen nicht zur Verfügung. Welche das sind, richtet sich nach der Installation: InnoDB und BerkeleyDB sind in der Binärdistribution von MySQL ab 5.0 aktiviert, in der Source-Distribution dagegen nicht. Auch bei vorkonfigurierten Webservern ist die Situation deswegen uneinheitlich.

Bei Xampp als lokalem Test- Webserver ist beispielsweise nur MyISAM aktiviert. Wenn Sie auf ein Format klicken, erhalten Sie eine ausführliche Übersicht mit Konfigurationseinstellungen. Die Konfigurationseinstellungen werden in MySQL über die zentrale Konfigurationsdatei my.cnf gesetzt. Sie befindet sich je nach Systemaufbau unter Linux oft im /etc-Verzeichnis (und dort beispielsweise unter mysql). Unter Windows ist sie meist im bin-Verzeichnis von MySQL zu finden. In der Konfigurationsdatei findet sich für die meisten Storage Engines eine eigene Sektion. Für InnoDB beispielsweise die zentrale Einstellung: skip-innodb. Wenn Sie diese mit einem Doppelkreuz auskommentieren, steht das Tabellenformat zur Verfügung:

Special: Tabellenarten für MySQL

© Archiv

Standard: MyISAM ist die Default-Einstellung.

Daneben finden Sie hier noch einige Einstellungen für die InnoDB-Tabelle. Hier ein Auszug aus der Xampp-Installation:

#skip-innodb

InnoDB speichert die Daten standardmäßig in eine Datendatei. Den Speicherort können Sie über innodb_data_home_dir steuern.

innodb_data_home_dir = "C:/Programme/
xampp/mysql/"
innodb_data_file_path = ibdata1:10M:
autoextend
innodb_log_group_home_dir = "C:/
Programme/xampp/mysql/"
innodb_log_arch_dir = "C:/Programme/
xampp/mysql/"
## You can set .._buffer_pool_size up
to 50 - 80 %
## of RAM but beware of setting
memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
## Set .._log_file_size to 25 % of
buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_
commit = 1
innodb_lock_wait_timeout = 50

Formate ändern

Standardmäßig setzt MySQL wie erwähnt auf MyISAM. Wollen Sie ein anderes Tabellenformat verwenden, stellen Sie zuerst (wie im letzten Abschnitt gezeigt) sicher, dass es aktiviert ist. Anschließend können Sie beispielsweise über die Konsole (Eingabeaufforderung in Windows) die entsprechende MySQL- Variable setzen:

SET storage_engine=MYISAM;
SET table_type=INNODB;

Die Standard-Engine steuern Sie über default-storage-engine, den Tabellentyp über default- table-type. Unter Windows lässt sich diese Einstellung auch im Konfigurator bei der Installation vornehmen. In Paketen wie Xampp ändern Sie die Einstellung in der my.cnf-Datei.

Special: Tabellenarten für MySQL

© Archiv

Deaktiviert: Je nach Konfiguration steht InnoDB unter Umständen nicht zur Verfügung.

Den Standard müssen Sie allerdings nicht unbedingt wechseln. Es reicht auch, eine neue Tabelle mit dem entsprechenden Tabellenformat anzulegen. Dies funktioniert direkt beim Anlegen der Tabelle in phpMyAdmin. Oder aber Sie bestimmen das Format direkt im CREATE-Statement. Dafür verwenden Sie den SQL-Befehl ENGINE:

Als Alternative zu ENGINE kann auch TYPE zum Einsatz kommen:

CREATE TABLE 'internetmagazin'.
'autoren' ('id' INT NOT NULL , 'name' 
VARCHAR( 255 ) NOT NULL , 
PRIMARY KEY ( 'id' ) 
) ENGINE = MYISAM

Um den Typ einer Tabelle nachträglich zu ändern, verwenden Sie das ALTER-Statement. Vorsicht, das führt natürlich zu Problemen, wenn Sie Engine-spezifische Funktionen wie beispielsweise Transaktionen für InnoDB verwendet haben.

CREATE TABLE 'internetmagazin'.
'autoren' (
'id' INT NOT NULL ,
'name' VARCHAR( 255 ) NOT NULL ,
PRIMARY KEY ( 'id' )
) TYPE = InnoDB

Der Typ ist jeweils für eine Tabelle eindeutig. Innerhalb einer Datenbank können Tabellen mit unterschiedlichen Typen vorkommen. In der Praxis ist diese Verbindung sogar sehr interessant, da so die Stärken der einzelnen Engines optimal genutzt werden. Einen guten Überblick über die verfügbaren Einstellungsmöglichkeiten liefert auch die MySQL-Referenz unter http://dev.mysql.com/doc/ refman/5.0/en/stoarage- engines.html.

ALTER TABLE autoren ENGINE = MYISAM;

Vor- und Nachteile

Die Frage ist nun, wann man auf welche Storage Engine setzt. Einige sind schon dem Namen nach zweckgebunden beziehungsweise arbeiten in einer bestimmten Art: ARCHIVE speichert Daten und ist nicht auf schnellen Zugriff sondern eben auf die reine Datenablage optimiert. MEMORY speichert die Daten im Hauptspeicher und ist damit für temporäre Tabellen ein Mittel der Wahl. CSV speichert Komma-separierte Daten in einer Textdatei.

MyISAM ist die Allzwecktabelle von MySQL. Früher gab es noch den Vorgänger ISAM, der wurde in Version 5 entfernt.

Special: Tabellenarten für MySQL

© Archiv

Verfügbar: InnoDB ist als Format für Tabellen verfügbar.

Die Stärke von MyISAM liegt neben der vielseitigen Verwendbarkeit in der guten Auslesperformance. Gegenüber MyISAM bietet InnoDB einige Datenbankfunktionalitäten, die heute eigentlich zum Standard gehören: InnoDB unterstützt echte Fremdschlüssel und Transaktionen. Dies erlaubt beispielsweise, mehrere Anweisungen in einer Transaktion zusammenzufassen. Am Ende wird die Transaktion dann mit dem SQL-Befehl COMMIT ausgeführt. Ergibt sich im Lauf einer Transaktion ein Fehler, wird alles rückabgewickelt. Mit dem SQL-Befehl ROLLBACK können Sie auch selbst die Rückabwicklung starten. Einen Funktionsvergleich finden Sie unter http://dev.mysql.com/tech-resources/articles/storage- engine/part_3.html.

Insgesamt breitet sich InnoDB auf der Festplatte deutlich stärker aus und auch die Performance bei Abfragen kann in vielen Fällen nicht mit MyISAM mithalten. Bei der Gesamtperformance scheiden sich Geister und Performance-Tests. Da InnoDB nicht die ganze Tabelle sondern nur Reihen sperrt, kann es beim Schreiben und Aktualisieren je nach Messung auch Vorteile für InnoDB geben. Interessante Messansätze und Erkenntnisse liefert beispielsweise der MySQL Performance Blog). Dort finden Sie eine Test-Suite und interessante Messergebnisse).

Sicher und schnell

Für sehr viele Anwendungsfälle reicht der Standard, also MyISAM, vollkommen aus. Allerdings gibt es gerade bei hochperformanten Anwendungen durchaus auch gute Gründe, über alternative Storage Engines nachzudenken. Und auch die Transaktionssicherheit kann ein Grund sein, beispielsweise auf InnoDB zu setzen. Da sich mehrere Tabellenformate auch in einer Datenbank mischen lassen, bietet MySQL hier viele Möglichkeiten.

Special: Tabellenarten für MySQL

© Archiv

Auswahl: Beim Anlegen einer neuen Tabelle wählen Sie den Typ.

Mehr zum Thema

Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
Amazon Blitzangebote
Technik-Deals

Die Highlights der Amazon Blitzangebote - heute mit Sennheiser-Headset, Xbox-One-Tagesangeboten, Asustor-NAS, Powerline-Set und mehr.
Tipps zum leisen PC
Tipps und Tricks

Die Komponenten eines PCs erzeugen Hitze. Lüfter sorgen meist für eine lästige Geräuschkulisse. Mit unseren Tricks wird Ihr PC flüsterleise.
SSD Mythen Tipps
Solid State Disk

SSD-Tuning - was ist wahr, was ist falsch? Wir verraten, welche SSD-Mythen Sie vergessen können und welche Tipps wirklich helfen.
Urlaubsbilder
Fotografieren im Sommer

Von Sommerlicht bis Sonnernuntergang: Unsere 7 Tipps verraten, wie Sie Urlaubsfotos richtig machen und schöne Bilder mit nachhause bringen.