20
Apr/08
0

Pourquoi il ne faut pas utiliser le type CHAR avec InnoDB

Utilisez le type de colonne VARCHAR au lieu de CHAR si vous stockez des chaînes de taille variable, ou si une colonne peut contenir plusieurs valeurs NULL. Une colonne CHAR(N) prend toujours N bytes pour stocker les données, même si la chaîne est plus petite, ou que sa valeur est NULL.

Mais encore ! InnoDB est un engine complexe qui ajoute des données supplémentaires à chaque entrée et à certaines colonnes. Parmi ces informations se retrouvent notamment les indexes. Vous devez savoir que le type CHAR est fixe et qu’un coup les données supplémentaires ajoutées, il requiert encore plus d’espace en mémoire et sur le disque dur ! Physiquement, les données sont écrites dans des “pages” de 16KB (généralement) ce qui pousse le système à utiliser une page supplémentaire pour stocker les données supplémentaires si le champ CHAR demande 16KB.

Avec un champ de type VARCHAR, si les données sont plus petites que 16KB il sera peut-être possible de stocker les informations supplémentaires dans la même page. Ceci réduira le nombre de lectures du disque dur.

Comme il est difficile de connaitre le nombre de KB exactement utilisé pour un enregistrement d’InnoDB, il est recommandé de toujours utiliser le type VARCHAR. Même avec des champs entièrement fixes, l’espace utilisé varie avec les indexes.

Si vous voulez plus de renseignements sur le fonctionnement de InnoDB : http://forge.mysql.com/wiki/MySQL_Internals_InnoDB.