Comment utiliser les transactions de InnoDB avec différentes API
<<<
Convertir des tables MyISAM vers InnoDB Comment les colonnes AUTO_INCREMENT fonctionnent avec InnoDB
>>>

16.7 Créer des tables InnoDB
16 Tables InnoDB
 Manuel de Référence MySQL 4.1 : Version Française

Comment utiliser les transactions de InnoDB avec différentes API
->Convertir des tables MyISAM vers InnoDB
Comment les colonnes AUTO_INCREMENT fonctionnent avec InnoDB
Contraintes de clés étrangères FOREIGN KEY
InnoDB et la réplication MySQL
Multiple tablespaces - putting each table into its own .ibd file

16.7.2 Convertir des tables MyISAM vers InnoDB

InnoDB n'a pas d'optimisation particulière pour séparer la création d'index. Par conséquent, cela ne sert à rien d'exporter et de réimporter les données de la table pour créer les index après. Le moyen le plus rapide pour mettre la table au format InnoDB est d'insérer directement les lignes dans une table InnoDB, c'est à dire, utiliser ALTER TABLE ... TYPE=INNODB , ou créer un table InnoDB vide, avec la même définition et de faire l'insertion de toutes les lignes avec INSERT INTO ... SELECT * FROM ... .

Pour avoir un meilleur contrôle sur le processus d'insertion, il est mieu de faire les insertions des grosses tables par blocs :


INSERT INTO newtable SELECT * FROM oldtable
   WHERE yourkey > something AND yourkey <= somethingelse;
Une fois que toutes les données ont été insérées dans la table, vous pouvez la renommer.

Durant la conversion des grosses tables, vous pouvez donner à InnoDB un gros buffer pour réduire les accès disques. Ne le portez pas au dela de 80% de votre mémoire physique. Donnez aussi de gros fichiers de logs, et un buffer de log important.

Assurez vous que vous n'allez pas manquer d'espace : les tables InnoDB prennent beaucoup plus d'espace que les tables MyISAM. Si la commande ALTER TABLE manque d'espace, elle va lancer une annulation, et cela peut prendre des heures sur un disque plein. Durant les insertions, InnoDB utiliser un buffer d'insertion pour rassembler les lignes d'index secondaires avec les index, en groupe. Cela économise beaucoup d'accès disques. Durant l'annulation, ce mécanisme n'est pas utilisé, et elle peut prendre jusqu'à 30 fois plus de temps.

Dans le cas d'un annulation immensément longue, si vous n'avez pas de données critiques dans votre base, il est mieux de tuer le processus, d'effacer toutes les tables et les fichiers de logs, ainsi que le fichier de table InnoDB .frm , et de recommencer, plutôt que d'attendre la fin de l'annulation.

<< Convertir des tables MyISAM vers InnoDB >>
Comment utiliser les transactions de InnoDB avec différentes API Créer des tables InnoDB Comment les colonnes AUTO_INCREMENT fonctionnent avec InnoDB