[+/-]
MyISAM
ist die Standard-Speicher-Engine. Sie
baut auf dem älteren ISAM
-Code auf, hat aber
viele praktische Erweiterungen. (Beachten Sie, dass MySQL
5.1 ISAM
nicht
mehr unterstützt.)
Jede MyISAM
-Tabelle wird in drei Dateien auf
der Festplatte gespeichert. Die Namen der Dateien beginnen mit dem
Tabellennamen und haben eine Erweiterung, die den Dateityp angibt.
Eine .frm
-Datei speichert das Tabellenformat.
Die Datendatei besitzt die Erweiterung .MYD
(MYData
). Die Indexdatei hat die Erweiterung
.MYI
(MYIndex
).
Um ausdrücklich zu sagen, dass Sie eine
MyISAM
-Tabelle möchten, verwenden Sie die
Tabellenoption ENGINE
:
CREATE TABLE t (i INT) ENGINE = MYISAM;
Der ältere Begriff TYPE
wird aus Gründen der
Abwärtskompatibilität noch als Synonym für
ENGINE
akzeptiert, doch
ENGINE
ist der aktuelle Begriff, während
TYPE
mittlerweile veraltet ist.
Normalerweise ist eine ENGINE
-Angabe für die
MyISAM
-Speicher-Engine unnötig.
MyISAM
ist ohnehin die Standard-Engine, es sei
denn, die Standardeinstellung wurden geändert. Um in solchen
Situationen ganz sicherzugehen, dass MyISAM
verwendet wird, sollten Sie explizit die Option
ENGINE
verwenden.
Zur Prüfung oder Reparatur von MyISAM
-Tabellen
setzen Sie den mysqlcheck-Client oder das
Hilfsprogramm myisamchk ein. Überdies können
Sie MyISAM
-Tabellen mit
myisampack komprimieren, dann belegen sie viel
weniger Speicherplatz. Siehe auch Abschnitt 8.9, „mysqlcheck — Hilfsprogramm für die Wartung und Reparatur von Tabellen“,
Abschnitt 5.10.4.1, „Benutzung von myisamchk
für die Fehlerbeseitigung
nach Abstürzen“, und
Abschnitt 8.4, „myisampack — Erzeugung komprimierter, schreibgeschützter MyISAM Tabellen“.
Kennzeichen von MyISAM
-Tabellen:
Alle Daten werden mit dem niederwertigen Byte zuerst gespeichert. Dadurch werden die Daten maschinen- und betriebssystemunabhängig. Die einzigen Voraussetzungen für die binäre Portierbarkeit der Daten sind, dass der Computer vorzeichenbehaftete Integers (Zweierkomplement) und das IEEE-Fließkommaformat verwendet. Diese Voraussetzungen werden von den üblichen Computern meist erfüllt. Nur bei Embedded-Systemen mit ihren manchmal seltsamen Prozessoren ist die Binärkompatibilität nicht immer gegeben.
Die Verarbeitungsgeschwindigkeit leidet nicht sonderlich, wenn das niederwertige Byte zuerst gespeichert wird. Die Bytes in einer Tabellenzeile werden normalerweise nicht ausgerichtet und es macht zeitmäßig kaum einen Unterschied, ob ein unausgerichtetes Byte in der Reihenfolge oder gegen die Reihenfolge gelesen wird. Darüber hinaus ist der Server-Code, der die Spaltenwerte abruft, im Vergleich zu anderem Code nicht zeitkritisch.
Alle numerischen Schlüsselwerte werden mit dem höchstwertigen Byte zuerst gespeichert, um eine bessere Indexkompression zu ermöglichen.
Große Dateien (bis zu 63 Bit Dateilänge) werden für Datei- und Betriebssysteme, auf denen große Dateien möglich sind, unterstützt.
Eine MyISAM
-Tabelle kann maximal 64 Indizes
haben. Dies lässt sich jedoch durch Rekompilieren ändern: Ab
der Version MySQL 5.1.4 können Sie den Build konfigurieren,
indem Sie configure mit der Option
--with-max-indexes=
aufrufen, wobei N
N
die Höchstzahl
der pro MyISAM
-Tabelle zulässigen Indizes
ist. N
muss kleiner oder gleich 128
sein. In älteren Versionen als MySQL 5.1.4 müssen Sie die
Quelle wechseln.
Ein Index darf maximal 16 Spalten haben.
Die Höchstlänge für Schlüssel beträgt 1000 Bytes. Auch dies lässt sich durch Wechseln der Quelle und Rekompilieren ändern. Ist ein Schlüssel länger als 250 Bytes wird ein größerer als der standardmäßig 1024 Bytes große Schlüsselblock verwendet.
Werden Zeilen sortiert eingefügt (wie zum Beispiel mit einer
AUTO_INCREMENT
-Spalte), wird der Indexbaum
aufgespalten, so dass der höchste Knoten nur einen Schlüssel
enthält. So wird der Platz im Indexbaum besser ausgenutzt.
Intern wird eine AUTO_INCREMENT
-Spalte pro
Tabelle unterstützt. MyISAM
aktualisiert
diese Spalte bei INSERT
- und
UPDATE
-Operationen automatisch. Das macht
AUTO_INCREMENT
-Spalten schneller (um
mindestens 10%). Werte am Anfang der Folge werden nach ihrer
Löschung nicht wiederverwendet. (Wenn eine
AUTO_INCREMENT
-Spalte als die letzte Spalte
eines Mehrspalten-Indizes definiert ist, werden gelöschte
Werte vom Anfang einer Folge doch wiederverwendet.) Der
AUTO_INCREMENT
-Wert kann mit ALTER
TABLE
oder myisamchk
zurückgesetzt werden.
Zeilen mit dynamischer Größenanpassung werden bei einer Mischung von Lösch-, Änderungs- und Einfügeoperationen viel weniger stark fragmentiert, da aneinander grenzende gelöschte Blöcke automatisch zusammengefasst und Blöcke, deren Nachbarblock gelöscht werden, automatisch erweitert werden.
Hat eine Tabelle in der Mitte der Datendatei keine freien
Blöcke, können Sie neue Zeilen mit INSERT
einfügen, während gleichzeitig andere Threads die Tabelle
lesen. (Man nennt dies "nebenläufige Einfügeoperationen".)
Wird eine Zeile gelöscht oder werden in eine Zeile
dynamischer Länge mehr Daten geschrieben, als sie zuvor
enthalten hatte, kann ein freier Block entstehen. Wenn alle
freien Blöcke aufgebraucht (ausgefüllt) wurden, werden
zukünftige Einfügeoperationen wieder nebenläufig. Siehe
Abschnitt 7.3.3, „Gleichzeitige Einfügevorgänge“.
Mit den Tabellenoptionen DATA DIRECTORY
und
INDEX DIRECTORY
von CREATE
TABLE
können Sie die Daten- und die Indexdatei in
unterschiedliche Verzeichnisse legen, um mehr Geschwindigkeit
zu erzielen. Siehe Abschnitt 13.1.5, „CREATE TABLE
“.
BLOB
- und TEXT
-Spalten
können indiziert werden.
NULL
-Werte sind in indizierten Spalten
zulässig. Hierfür werden 0 bis 1 Byte pro Schlüssel
gebraucht.
Jede Zeichenspalte kann einen anderen Zeichensatz haben. Siehe Kapitel 10, Zeichensatz-Unterstützung.
In der MyISAM
-Indexdatei gibt es ein Flag,
das anzeigt, ob die Tabelle ordentlich geschlossen wurde. Wenn
mysqld mit der Option
--myisam-recover
gestartet wird, werden
MyISAM
-Tabellen beim Öffnen automatisch
überprüft und repariert, wenn sie nicht richtig geschlossen
wurden.
myisamchk markiert Tabellen als geprüft,
wenn Sie es mit der Option --update-state
ausführen. myisamchk --fast prüft nur
diejenigen Tabellen, die diese Markierung nicht tragen.
myisamchk --analyze speichert Statistikdaten sowohl für Teilschlüssel als auch für vollständige Schlüssel.
myisampack kann BLOB
-
und VARCHAR
-Spalten packen.
MyISAM
unterstützt auch folgende Funktionen:
Unterstützung für einen echten
VARCHAR
-Typ; eine
VARCHAR
-Spalte beginnt mit einer
Längenangabe, die in einem oder zwei Byte(s) gespeichert ist.
Tabellen mit VARCHAR
-Spalten können Zeilen
mit fester oder dynamischer Länge haben.
Die Summe der Längen der VARCHAR
-und
CHAR
-Spalten in einer Tabelle kann bis zu
64KB betragen.
Für UNIQUE
kann ein berechneter Hash-Index
verwendet werden. So ist UNIQUE
für jede
beliebige Spaltenkombination in einer Tabelle zulässig.
(Allerdings können auf einem berechneten
UNIQUE
-Index keine Suchoperationen
durchgeführt werden.)
Ein spezielles Forum für die Speicher-Engine
MyISAM
finden Sie unter
http://forums.mysql.com/list.php?21.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.