À partir de la documentation :
Pour les tables InnoDB, OPTIMIZE TABLE est mappé à ALTER TABLE, qui reconstruit la table pour mettre à jour les statistiques d'index et libérer de l'espace inutilisé dans l'index clusterisé. À partir de MySQL 5.1.27, cela s'affiche dans la sortie de OPTIMIZE TABLE lorsque vous l'exécutez sur une table InnoDB, comme illustré ici :
mysql> OPTIMIZE TABLE foo;
+----------+----------+----------+-----------------------------------------------------------
| Table | Op | Msg_type | Msg_text
+----------+----------+----------+-----------------------------------------------------------
| test.foo | optimize | note | Table does not support optimize, doing recreate + analyze ...
| test.foo | optimize | status | OK
+----------+----------+----------+-----------------------------------------------------------
Vous pouvez faire fonctionner OPTIMIZE TABLE sur d'autres moteurs de stockage en démarrant mysqld avec l'option --skip-new ou --safe-mode. Dans ce cas, OPTIMIZE TABLE est simplement mappé sur ALTER TABLE.