Selon le guide de certification MySQL:
L'instruction OPTIMIZE TABLE nettoie une table MyISAM en la défragmentant. Cela implique de récupérer l'espace inutilisé résultant des suppressions et des mises à jour, et de fusionner les enregistrements qui ont été divisés et stockés de manière non contiguë. OPTIMIZE TABLE trie également les pages d'index si elles sont en panne et met à jour les statistiques d'index
Fonctionne également pour les tables InnoDB, mais correspond à ALTER TABLE, qui reconstruit la table. Cela met à jour les statistiques d'index et libère de l'espace dans l'index cluster.
Donc, dans le cas d'InnoDB:
Innodb est conforme à ACID, la table d'optimisation copie simplement tous les enregistrements dans une nouvelle table
- Si les pages d'index ne sont pas triées, triez-les,
- Si les statistiques de la table ne sont pas à jour (et que la réparation n'a pas pu être effectuée en triant l'index), mettez-les à jour.
- Si le tableau a supprimé ou fractionné des lignes, réparez le tableau.
Et si vous essayez de le tuer lorsqu'il est en cours d'exécution, vous ne perdrez aucun enregistrement.
De plus, dans le cas d'InnoDB avec innodb_defragment=1
, aucun ROLLBACK ne sera requis, car dans ce cas, il OPTIMIZE TABLE
est incrémentiel.