MyISAM / InnoDB différences

On se pose souvent la question sur l’utilisation de MyISAM ou d’InnoDB pour une base de données MySQL. Cet article décrit rapidement les principaux avantages et inconvénients de ces deux moteurs de stockage.

 

1. MyISAM

Les avantages :

  • très rapide pour les requêtes de type SELECT ou INSERT
  • il supporte les index fulltext : permet d’effectuer des recherches sur des mots en se basant sur un index spécifique, accélérant ainsi les recherches
  • il gère les conflits d’accès (ou lock) : permet de verrouiller une table pour des opérations bien précises
  • très facile à administrer : possibilité de recopier directement les fichiers d’un serveur vers un autre, support des tables compressées …

Les inconvénients :

  • il ne supporte pas les transactions
  • il ne supporte pas les clés étrangères

Note : en plus du fichier .frm, chaque table est représentée par un fichier de données .myd (MYisamData) et un fichier d’index .myi (MYisamIndex).

2. InnoDB

Les avantages :

  • il supporte ACID : permet d’assurer que chaque enregistrement sera complètement réussi, ou complètement échoué, ainsi les risques d’erreurs sont impossibles, même en cas de panne
  • il gère les transactions (instructions sql BEGIN, COMMIT, ROLLBACK …)
  • il supporte les clés étrangères et les intégrités référentielles
  • il possède un système de récupération automatique en cas de crash

Les inconvénients :

  • il ne permet pas les index fulltext
  • son administration est un peu plus complexe (gestion de tablespace, paramètres supplémentaires dans le my.cnf …)
  • le moteur de stockage est plus lent que d’autres et gourmand en ressources mémoires et en espace disque

Note : chaque table est représentée par un fichier .frm.

3. Changement du moteur de stockage

On gardera à l’esprit que le choix du moteur n’est jamais définitif. Il peut être changé dynamiquement avec la commande ALTER TABLE comme ceci :

ALTER TABLE maTable1 ENGINE=INNODB;
ALTER TABLE maTable2 ENGINE=MYISAM;

Ce système permet notamment d’utiliser plusieurs types de stockage pour différentes tables d’une même base de données. Cela permettra dans certains cas d’obtenir les meilleurs performances et avantages.

4. Conclusion

Pour conclure, on optera pour InnoDB principalement lorsque l’on utilisera un système d’information qui n’admet pas les erreurs ou qui doit utiliser des clés étrangères ou des intégrités référentielles.

MyISAM restera quant à lui le meilleur choix dans le cas où l’on fait principalement des requêtes de lecture ou d’insertion.

extradrmtech

Since 20 years I work on Database Architecture and data migration protocols. I am also a consultant in Web content management solutions. I am an experienced web-developer with over 10 years developing PHP/MySQL, C#, VB.Net applications ranging from simple web sites to extensive web-based business applications. When not writing code, I like to dance salsa and swing and have fun with my little family.

You may also like...

Leave a Reply