OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name
[,tbl_name
] ...
OPTIMIZE TABLE
sollte verwendet werden,
wenn Sie einen umfangreichen Teil einer Tabelle gelöscht oder
viele Änderungen an einer Tabelle mit Datensätzen variabler
Länge (also Tabellen mit VARCHAR
-,
VARBINARY
-, BLOB
- oder
TEXT
-Spalten) vorgenommen haben. Gelöschte
Datensätze werden zu einer verknüpften Liste hinzugefügt.
Nachfolgende INSERT
-Operationen verwenden
die alten Datensatzpositionen neu. Sie können mit
OPTIMIZE TABLE
nichtverwendeten Speicher in
der Tabelle freigeben und die Datendatei defragmentieren.
In den meisten Konfigurationen müssen Sie OPTIMIZE
TABLE
gar nicht ausführen. Auch wenn Sie viele
Änderungen an Datensätzen variabler Länge vorgenommen
haben, ist die Wahrscheinlichkeit, dass Sie dies häufiger als
einmal in der Woche oder im Monat tun müssen, sehr gering –
und selbst dies nur bei bestimmten Tabellen.
OPTIMIZE TABLE
funktioniert nur bei
MyISAM
-, BDB
- und
InnoDB
-Tabellen.
Bei MyISAM
-Tabellen funktioniert
OPTIMIZE TABLE
wie folgt:
Wenn die Tabelle gelöschte oder geteilte Datensätze aufweist, wird die Tabelle repariert.
Wenn die Indexseiten nicht sortiert sind, werden sie sortiert.
Wenn die Tabellenstatistiken nicht aktuell sind (und eine Reparatur durch Sortierung des Indexes nicht erfolgreich war), werden sie aktualisiert.
Bei BDB
wird OPTIMIZE
TABLE
zurzeit auf ANALYZE TABLE
umgesetzt. Siehe auch Abschnitt 13.5.2.1, „ANALYZE TABLE
“.
Bei InnoDB
wird OPTIMIZE
TABLE
auf ALTER TABLE
umgesetzt,
wodurch die Tabelle neu erstellt wird, um Indexstatistiken zu
aktualisieren und ungenutzten Speicher im Cluster-Index
freizugeben.
Sie können OPTIMIZE TABLE
auch bei anderen
Speicher-Engines zum Laufen bringen, indem Sie
mysqld mit den Optionen
--skip-new
oder --safe-mode
starten. In diesem Fall wird OPTIMIZE TABLE
einfach auf ALTER TABLE
umgesetzt.
OPTIMIZE TABLE
gibt eine Ergebnismenge mit
den folgenden Spalten zurück:
Spalte | Wert |
Table |
der Tabellenname |
Op |
ist immer optimize
|
Msg_type |
status , error ,
info oder
warning
|
Msg_text |
die Nachricht |
Beachten Sie, dass MySQL die Tabelle während der Laufzeit von
OPTIMIZE TABLE
sperrt.
OPTIMIZE TABLE
-Anweisungen werden in das
Binärlog geschrieben, sofern das optionale Schlüsselwort
NO_WRITE_TO_BINLOG
(oder sein Alias
LOCAL
) nicht verwendet wird. Dies wird
gemacht, damit OPTIMIZE TABLE
-Anweisungen,
die auf einem MySQL Server verwendet werden, der als
Replikationsmaster agiert, standardmäßig auf den
Replikationsslave repliziert werden.
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.