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
Espaces de tables multiples : chaque table InnoDB a son fichier @filename{.ibd}

16.7.2 Convertir des tables MyISAM vers InnoDB

Important : vous ne devez pas convertir les tables de la base mysql , telles que user ou host ) en type InnoDB . Ces tables doivent conserver le moteur MyISAM .

Si vous voulez que toutes les tables non-système soient crées directement en MySQL, depuis MySQL 3.23.43, ajoutez la ligne default-table-type=innodb dans la section [mysqld] de votre fichier my.cnf ou my.ini .

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 ... .

Si vous avez une contrainte UNIQUE sur des clés secondaires, depuis MySQL 3.23.52, vous pouvez accélérer l'importation dans les tables en désactivant la vérification de cette contrainte durant l'insertion : SET UNIQUE_CHECKS=0; Pour les grosses tables, cela économise beaucoup d'accès disques car InnoDB peut alors utiliser un buffer d'insertion pour écrire les lignes par bloc.

Pour avoir un meilleur contrôle sur le processus d'insertion, il est mieux 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-delà 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 tous les fichiers, et de recommencer, plutôt que d'attendre la fin de l'annulation. Pour la procédure complète, voyez Forcer la restauration .

<< 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