Tables fixes / Tables Dynamiques

Les tables MySQL peuvent se distinguer en deux grandes catégories : les tables fixes et dynamiques. Une autre catégorie permet de convertir une table d’un des deux types, en une table compressée. Voyons en les caractéristiques de chacune d’entre elles.

Les tables Fixes

Quand on crée un table, ne contenant ni champ de type VARCAHRTEXT ou BLOB, MySQL considère cette table comme de type fixe. Si on précise ROW_FORMAT=FIXED, et que la table ne contient pas de type BLOB, ni TEXT, les VARCHAR seront alors convertis implicitement en CHAR. Les avantages de ce type de table sont multiples :

  • Accès beaucoup plus rapide
  • Table beaucoup plus consistante (pas de fragmentation des données)

Les données en demeurent plus stables également, et les tables MyISAM crashent moins.
Un petit inconvénient à ne pas négliger, cela peut occuper beaucoup plus d’espace disque.

Les tables dynamiques

MySQL crée une table dynamique automatiquement (c’est à dire si on ne pécise pas le type de table dans le CREATE TABLE via l’option ROW_FORMAT=FIXED) lorsque celle-ci contient des champs de type BLOB, VARCHARTEXT. Pour forcer le type DYNAMIC sur une table :

ALTER TABLE employee SET ROW_FORMAT=DYNAMIC;

L’avantage de ce type de table :

  • Occupe beaucoup moins d’espace disque que le type FIXED.

Mais les inconvénients ne sont pas des moindres :

  • Fragmentation des données
  • En moyenne 50% + lent qu’une table FIXED.

On peut toutefois procéder à quelques optimisations sur ce type de table pour en améliorer les performances, en définissant en paramètre du CREATE TABLE les options AVG_ROW_LENGTH et MAX_ROWS, qui définissent pour la première la taille moyenne d’un ligne en octets, et pour la deuxième le nombre de lignes maximum prévues pour cette table. Cela a pour conséquence d’optimiser la gestion du fichier disque, et d’améliorer de 10% environ les temps de calculs. Je vous renvoie à la doc mysql pour plus de détails sur ces paramètres.

Les tables compressées

Ce n’est pas vraiment un troisième type de table, dans le sens ou ces tables ne sont pas vraiment exploitables. Un fois compressée, cette table n’est accessible qu’en lecture seule. C’est donc dans un esprit d’archivage pur qu’on se situe ici. On utilisera l’utilitaire myisampack pour compresser ces tables :

myisampack [options] filename ...

Comme son nom l’indique, seules les tables MyISAM peuvent être traitées de la sorte. Je vous renvoie à la doc pour les détails.

  • Permet de gagner 40 à 70% d’espace disque
  • En lecture seule uniquement.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *