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