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 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 :
    
    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
    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 .

<< Caractéristiques des tables à format de ligne dynamiques >>
Caractéristiques des tables statiques (taille fixée) Formats de table MyISAM Caractéristiques des tables compressées