10.17 Quel sont les différents formats de lignes? Quand utiliser VARCHAR/CHAR?

MySQL n'a pas de type SQL VARCHAR à proprement parler.

A la place, , MySQL possède trois manières d'enregistrer les informations, et d'émuler le type VARCHAR.

Si une table n'a aucune colonne de type VARCHAR, BLOB ou TEXT, la table est considéré à taille de ligne constante. Sinon, c'est une ligne à taille variable. Les colonnes CHAR et VARCHAR sont alors traitées de manière identique du point de vue de l'application :@: dans les deux cas, les espaces de fin de chaînes sont supprimés à la lecture.

Vous pouvez vérifier le format utilisé dans une table avec isamchk -d (-d signifie ``description de la table``).

MySQL possède trois formats de tables différents :@: taille fixe, taille variable, compressé. En voici la comparaison :

Tables à taille fixe

Tables à taille variable


3

+ (nombre de colonnes + 7) / 8

+ (nombre de colonne de type char)

+ taille compactee des colonnes de type numerique

+ longueur des chaînes

+ (nombre de valeur NULL + 7) / 8

Il y a aussi une pénalité de 6 octet pour chaque fragment de record. Un record de taille variable est fragmenté à chaque fois qu'il grandit de taille. Chaque nouveau fragment prendra au moins 20 octets, ce qui fait que plusieurs aggrandissements pourront partager le même fragment. Sinon, un autre fragment sera généré. Vous pouvez compter le nombre de fragment avec la commande isamchk -ed. Tous ces fragments peuvent être supprimés avec isamchk -r.

Table compressée

MySQL peut supporter différents types d'index, mais le format standard est NISAM. C'est un index de type B-tree dont on peut grossièrement calculer la taille avec la formule (key_length+4)*0.67, appliquée à toutes les clés. (Ce qui correspond au pire cas, quand toutes les clés sont insérée en ordre).

Les index de chaînes subissent une compression sur les espaces. Si la première partie de l'index est une chaîne, elle sera aussi compressée. La compression des espaces réduit la taille si la colonne a beaucoup d'espace de remplissage, ou si une colonne de type VARCHAR n'est pas toujours remplie. La compression par préfixe est particulièrement utile si plusieurs chaînes commencent de même.