Laut MySQL Certification Guide:
Die Anweisung OPTIMIZE TABLE bereinigt eine MyISAM-Tabelle, indem sie defragmentiert wird. Dies beinhaltet die Rückgewinnung von nicht verwendetem Speicherplatz, der aus Löschungen und Aktualisierungen resultiert, und das Zusammenführen von Datensätzen, die aufgeteilt und nicht zusammenhängend gespeichert wurden. OPTIMIZE TABLE sortiert auch die Indexseiten, wenn sie nicht in Ordnung sind, und aktualisiert die Indexstatistik
Funktioniert auch für InnoDB-Tabellen, ist jedoch ALTER TABLE zugeordnet, wodurch die Tabelle neu erstellt wird. Dadurch werden die Indexstatistiken aktualisiert und Speicherplatz im Clustered-Index freigegeben.
Also im Falle von InnoDB:
Innodb ist ACID-konform. Die Optimierungstabelle kopiert einfach alle Datensätze in eine neue Tabelle
- Wenn die Indexseiten nicht sortiert sind, sortieren Sie sie,
- Wenn die Statistiken der Tabelle nicht aktuell sind (und die Reparatur nicht durch Sortieren des Index durchgeführt werden konnte), aktualisieren Sie sie.
- Wenn die Tabelle Zeilen gelöscht oder geteilt hat, reparieren Sie die Tabelle.
Und wenn Sie versuchen, es zu töten, während es läuft, verlieren Sie keine Datensätze.
Bei InnoDB mit innodb_defragment=1
ist kein ROLLBACK erforderlich, da dies in diesem Fall OPTIMIZE TABLE
inkrementell ist.