Answers:
根据MySQL认证指南:
OPTIMIZE TABLE语句通过对MyISAM表进行碎片整理来清理它。这涉及回收因删除和更新而产生的未使用空间,以及合并已拆分和非连续存储的记录。OPTIMIZE TABLE还会对索引页进行排序(如果它们不按顺序排列)并更新索引统计信息
也适用于InnoDB表,但映射到ALTER TABLE,后者将重建表。这将更新索引统计信息并释放聚集索引中的空间。
所以在InnoDB的情况下:
Innodb符合ACID,优化表仅将所有记录复制到新表中
而且,如果尝试在运行时杀死它,则不会丢失任何记录。
另外,如果InnoDB使用innodb_defragment=1
,则不需要ROLLBACK,因为在这种情况下OPTIMIZE TABLE
是增量的。