| 15.1.3 Formats de table MyISAM
 15.1 Le moteur de tables MyISAM
 15 Types de tables MySQL
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Caractéristiques des tables statiques (taille fixée)
 ->Caractéristiques des tables à format de ligne dynamiques
 . Caractéristiques des tables compressées
 
 
 | 
  15.1.3.2 Caractéristiques des tables à format de ligne dynamiques   
 
Ce format est utilisé avec les tables qui contiennent des colonnes de type 
 
VARCHAR
 ,  
BLOB
  ou  
TEXT
 , ou si la table a été créée 
avec l'option  
ROW_FORMAT=dynamic
 .
Ce format est un peu plus complexe, car chaque ligne doit avoir un entête
pour indiquer sa longueur. Une ligne peut aussi être répartie sur plusieurs
blocs, lorsqu'elle est agrandie lors d'une modification.  
Vous pouvez utiliser la commande SQL  
OPTIMIZE table
  ou Shell  
myisamchk
 
pour défragmenter une table. Si vous avez des données statiques que vous modifiez
souvent dans la même table, avec des colonnes  
VARCHAR
  ou  
BLOB
 , il peut
être une bonne idée de placer des colonnes dans une autre table, pour éviter la 
fragmentation :
 
Toutes les colonnes de type chaîne sont dynamiques (hormis celle qui sont de taille
inférieure à 4).
Chaque ligne est précédée d'un octet qui indique quelles sont les lignes
vides ( 
''
 , bit à 1) et celle qui le ne sont pas (bit à 0).
Une colonne vide n'est pas la même choses qu'une colonne qui contient 
 
NULL
 . Si une colonne a une taille de zéro après avoir supprimé
les espaces finaux, ou un nombre a une valeur de zéro, il est marqué 
dans cet octet, et la colonne sera ignorée sur le disque. Les chaînes non
vides sont sauvées avec un octet de plus pour y stocker la taille.
Ce format prend généralement moins de place que des tables à format fixe.
Chaque ligne consomme autant d'espace que nécessaire. Si une ligne devient
trop grande, elle sera coupée en blocs et écrites dans le fichier de données.
Cela engendre la fragmentation du fichier de données. Par exemple, 
si vous modifiez une ligne avec des informations qui excèdent la capacité
courante de la ligne, la ligne sera fragmentée. Dans ce cas, vous pouvez
avoir à exécuter la commande  
myisamchk -r
  de temps en temps pour 
améliorer les performances. Utilisez  
myisamchk -ei tbl_name
  pour obtenir des
statistiques.
Ce format de table n'est pas toujours facile à reconstituer après un crash, car
une ligne peut être fragmentée en de nombreux  blocs, et un fragment peut
manquer.
La taille d'une ligne de format variable se calcule avec :  
Il y a un aussi un supplément de 6 octets pour chaque lien. Une ligne de format
dynamique utilise un lien à chaque fois qu'une modification cause un agrandissement
de la ligne. Chaque nouveau bloc lié fait au moins 20 octets, pour que le prochain
agrandissement utilise aussi ce bloc. Si ce n'est pas le cas, un nouveau bloc sera
lié, avec un autre coût de 6 octets. Vous pouvez vérifier le nombre de liens dans
une table avec la commande  
myisamchk -ed
 . Tous les liens sont supprimés avec
la commande  
myisamchk -r
 .| 
3+ (nombre de colonnes + 7) / 8
 + (nombre de colonnes de tailles chars)
 + taille compactée des colonnes numériques
 + taille des chaînes
 + (nombre de colonne de valeur NULL + 7) / 8
 | 
 |