De acuerdo con la Guía de certificación de MySQL:
La instrucción OPTIMIZE TABLE limpia una tabla MyISAM al desfragmentarla. Esto implica recuperar espacio no utilizado como resultado de eliminaciones y actualizaciones, y fusionar registros que se han dividido y almacenado de forma no contigua. OPTIMIZE TABLE también clasifica las páginas de índice si están fuera de servicio y actualiza las estadísticas del índice
También funciona para tablas InnoDB, pero se asigna a ALTER TABLE, que reconstruye la tabla. Esto actualiza las estadísticas del índice y libera espacio en el índice agrupado.
Entonces, en caso de InnoDB:
Innodb es compatible con ACID, la tabla de optimización simplemente copia todos los registros en una nueva tabla
- Si las páginas de índice no están ordenadas, ordénelas,
- Si las estadísticas de la tabla no están actualizadas (y la reparación no se pudo realizar clasificando el índice), actualícelas.
- Si la tabla ha eliminado o dividido filas, repare la tabla.
Y si intentas matarlo cuando se está ejecutando, no perderás ningún registro.
Además, en el caso de InnoDB con innodb_defragment=1
, no se requerirá ROLLBACK, ya que en este caso OPTIMIZE TABLE
es incremental.