PRATIQUE OUTILS 
MyISAM, InnoDB... : les différents types de stockage SQL
 
"Depuis que j'utilise MySQL, je n'ai jamais utilisé que des tables de type MyISAM, sans vraiment savoir à quoi servaient les autres (InnoDB…). Pouvez-vous m'expliquer simplement les différences entre eux ?" (12/05/2004)


Un problème, une interrogation ? Adressez-vous à la rédaction de JDNet Développeurs

MyISAM est effectivement le type de table le plus utilisé sous MySQL, bien que ce SGBD reconnaisse aussi par défaut les types HEAP/Memory, InnoDB et NDB. Il existe en outre d'autres types, comme ISAM, Berkeley DB ou Merge, et même des types spécifiques à un SGBD.

ISAM est le type le plus répandu, stable et éprouvé, mais en perte de vitesse due à son manque de fonctionnalité : pas de transaction, pas de récupération en cas de crash.
MyISAM est une évolution de ISAM, capable de fonctionner avec de larges données et très rapide pour les SELECT à rallonge. Ces tables prennent moins de places que leurs confrères, reconnaît les index full-text et les tables compressées.
InnoDB est obligatoire dès que l'on doit travailler avec les transactions (type ACID) et les clés étrangères. En revanche, toutes les mises à jour doivent se faire par transaction, ce qui peut ralentir le système. Autre handicap, il n'y est pas possible d'utiliser d'appel fulltext, ce qui ralentit d'autant plus le travail. InnoDB dispose d'un système de récupération automatique en cas de crash, et fait un gros usage de l'espace disque et mémoire.
Heap (ou Memory) l'inconvénient de son avantage : ce type est stocké en mémoire, donc est extrêmement rapide, mais en contrepartie, tout redémarrage provoque la perte des données construites pendant la session… Par ailleurs, il ne reconnaît les colonnes de types VARCHAR, BLOB et TEXT.
NBD : pas un type de table en soi, mais un nœud central pour groupe de bases. Cela optimiser la montée en charge.
Berkeley DB est proche de InnoDB dans sa conception.

Pour un site lambda, utiliser MyISAM permettra de se tirer de la plupart des situations. Dès que le SGBD plie sous le poids des requêtes, il faudra alors songer à revoir sa structure… ou à intégrer un système de cache.
Il est également possible de mélanger les type de table pour les optimiser selon le contenu de chacune. Le site de MySQL suggère d'utiliser MyISAM pour la connexion et la recherche, InnoDB pour les informations de connexion et le système de publicité, et Heap pour les tables temporaires et le données très demandées.

  Forum

Réagissez dans les forums de JDN Développeurs

Voilà pour ce résumé rapide des types de stockage possibles; les administrateurs de SGBD se doivent de se documenter à leur propos pour optimiser au mieux leur système.

 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page