28.6 Reihen - Formate (row format)
MySQL kennt keine echten SQL VARCHAR Typen, dafür besitzt MySQL 3
verschiedene Möglichkeiten, Einträge zu speichern und VARCHAR zu emulieren.
Falls eine Tabelle keine VARCHAR, BLOB oder TEXT Spalten enthält, dann wird
intern in der MySQL Datenbank eine feste Größe einer Spalte angenommen.
Andernfalls, also wenn nur eine einzige Spalte von einem variablen Typ ist,
dann wird eine dynamische Spaltengröße angenommen. CHAR und VARCHAR Spalten
werden dann aus der Sicht der Anwendung identisch behandelt.
Das Format der Tabellen kann man mit dem SHELL-Befehl isamchk -d
.... (das d steht für beschreibe die Tabelle) ausgeben lassen.
MySQL besitzt 3 verschiedene Tabellenformate, fest, dynamisch und
compressed. Diese werden nun im einzelnen vorgestellt:
- Fest ist das Standardformat. Es wird verwendet, wenn die
Tabelle keine VARCHAR, BLOB oder TEXT Spalten enthält. Die Vorteile sind,
daß die Datenbank sehr schnell ist, leicht zu cachen, leicht zu reparieren
(Im Falle eines Crash), benötigt keine ständige Reorganisation (isamchk),
solange nicht Einträge in größerer Anzahl gelöscht werden, verbarucht aber
auch gewöhnlich mehr Speicherplatz, als dynamische Tabellen (überflüssige
Platzhalter).
- Dynamisch wird automatisch eingesetzt, sobald VARCHAR, BLOB
oder TEXT Felder definiert werden, oder die Länge größer als 4 Bytes ist.
Dynamische Felder besitzen einige Eigenheiten:
- Alle Spaltenwerte werden auf dynamisch gesetzt.
- Jeder Eintrag besitzt eine Bitmap, die anzeigt, welche Spalte leer
ist. Hierzu werden doppelte Anführungszeichen oder 0 verwendet. Nicht leere
Strings enthalten zuerst die Länge, danach folgt der Inhalt.
- Dynamische Felder verbrauchen viel weniger Platz
- Wenn Einträge größer werden, dann findet eine automatische
Fragmentierung statt, die von Zeit zu Zeit mit isamchk -r bereinigt
werden muß. Der Befehl isamchk -ei tbl_name zeigt Statistiken an.
- Dynamische Tabellen sind schwieriger zu rekonstruieren, weil eventuell
ein Teil der Fragmentierungsinformationen verlorengegengen ist.
- Komprimierte Tabellen sind read-only Tabellen, die zuvor mit
dem pack_isam Utility komprimiert wurden. Alle registrierten User
mit erweitertem E-Mail Support erhalten eine Kopie dieses Programmes.
Diese Tabellen verbrauchen sehr wenig Speicherplatz. Jeder Eintrag wird
separat komprimiert (wichtig zu wissen, da die Kompression insgesamt dann
nicht so gut ist, als wenn man alle Einträge komprimieren würde, wie bei
ZIP, also weg damit !). Blob und TEXT Spalten werden nicht komprimiert !!!