Chaque ligne d'index de InnoDB
contient
un entête de 6 octets. L'entête est utilisé pour lier des
lignes consécutives ensembles, et aussi pour le
verrouillage de ligne.
Les lignes dans un index en grappe contient des champs pour toutes les colonnes définies par l'utilisateur. De plus, il y a un champ de 6 octets pour l'identification de transaction, et un champs de 7 octets pour le pointeur d'annulation.
Si l'utilisateur n'a pas défini de clé primaire pour la table, chaque ligne de l'index en grappe contient aussi une colonne supplémentaire de 6 octets, qui sert d'identification.
Chaque ligne d'index secondaire contient aussi les champs définis pour la clé de l'index en grappe.
Une ligne contient aussi un pointeur pour chaque champs de la ligne. Si la taille totale des champs représentent moins de 128 octets, alors le pointeur fait 1 octets, sinon 2.
En interne, InnoDB
stocke les colonnes de
taille fixe comme CHAR(10)
dans un format
à taille fixe. InnoDB
supprime les
espaces terminaux des colonnes VARCHAR
.
Notez que MySQL peut convertir en interne les colonnes
CHAR
en VARCHAR
. See
Section 13.2.5.1, « Modification automatique du type de colonnes ».
Une valeur SQL NULL
réserve 0 octets si
elle est stockée dans une colonne à taille variable. Dans
une colonne à taille fixe, elle utilise toute la largeur de
la colonne. La raison de la réservation de toute la colonne
pour les valeurs NULL
est que lors de la
mise à jour de la colonne depuis la valeur
NULL
vers une valeur non-nulle, il n'y
aura pas de fragementation sur le disque.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.