Согласно Руководству по сертификации MySQL:
Оператор OPTIMIZE TABLE очищает таблицу MyISAM, дефрагментируя ее. Это включает в себя восстановление неиспользуемого пространства, полученного в результате удалений и обновлений, и объединение записей, которые были разделены и сохранены несмежно. OPTIMIZE TABLE также сортирует страницы индекса, если они вышли из строя, и обновляет статистику индекса
Также работает для таблиц InnoDB, но отображается на ALTER TABLE, которая перестраивает таблицу. Это обновляет статистику индекса и освобождает пространство в кластерном индексе.
Так что в случае InnoDB:
Innodb совместим с ACID, таблица оптимизации просто копирует все записи в новую таблицу
- Если страницы индекса не отсортированы, сортируйте их,
- Если статистика таблицы не обновлена (и восстановление не может быть выполнено путем сортировки индекса), обновите их.
- Если в таблице удалены или разбиты строки, восстановите таблицу.
И если вы попытаетесь убить его во время работы, вы не потеряете никаких записей.
Кроме того, в случае InnoDB с innodb_defragment=1
, ROLLBACK не требуется, так как в этом случае OPTIMIZE TABLE
является инкрементным.