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 VARCAHR
, TEXT
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
, VARCHAR
, TEXT
. 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.