http://dev.mysql.com/doc/refman/5.5/en/optimize-table.html
Pour les tables InnoDB, OPTIMIZE TABLE est mis en correspondance avec ALTER TABLE, qui reconstitue la table (...)
Par conséquent, je n'attendre à une amélioration de passer à InnoDB, comme le suggère probablement Quassnoi.
Par définition, OPTIMIZE TABLE a besoin de quelques accès exclusif à la table, d'où les performances dégradées au cours OPTIMIZE'ation
Néanmoins, il pourrait y avoir quelques mesures à prendre pour réduire le temps pris par OPTIMIZE, selon la façon dont votre la table est "énorme":
- Si votre table comporte de nombreux champs, il se peut que votre table doive être normalisée. Inversement, vous pourriez vouloir normaliser votre table en étalant vos colonnes dans plusieurs tables "plus étroites", et établir des relations un-à-un.
- Si votre table contient de nombreux enregistrements, implémentez une partition «manuelle» dans votre code d'application. Une simple étape consisterait à créer une table "archive" contenant des enregistrements rarement mis à jour. De cette façon, vous n'avez besoin d'optimiser qu'un plus petit ensemble d'enregistrements (la table non-archive). Optimisez la commande de table verrouiller la table, il diminue les performances.
Y at-il une raison que vous utilisez 'MyISAM'? – Quassnoi
Juste pour avoir une meilleure vitesse dans SELECT. –