Dans PostgreSQL, les exigences de stockage pour les colonnes qui autorisent les valeurs NULL diffèrent de celles qui imposent des valeurs. Considérez la définition de colonne de tableau suivante :
"MyColumn" smallint NULL
Le stockage d'entiers tels que 0, 1 ou toute autre valeur nécessite 2 octets. Cependant, la question se pose : quelle quantité d'espace disque est consommée lorsque « MyColumn » est défini sur NULL ? Occupe-t-il 0 octet ?
Bitmap vs stockage NULL
Contrairement à l'hypothèse initiale d'une consommation de 0 octet, les valeurs NULL ne prennent pas de place. Au lieu de cela, PostgreSQL utilise un bitmap pour suivre l'état NULL de chaque colonne d'une table. Chaque bit du bitmap représente l'état NULL/NOT NULL pour une ligne spécifique.
Cependant, le bitmap n'est pas alloué pour chaque ligne. L’alignement des données est plutôt un facteur à prendre en compte. Le HeapTupleHeader, qui inclut des informations sur chaque ligne, occupe 23 octets. Les données sont alignées pour commencer par des multiples de MAXALIGN (généralement 8 octets), laissant un octet de remplissage pour le bitmap nul.
Espace disque requis
En raison de Ces facteurs, le stockage nul est effectivement gratuit pour les tables comportant jusqu'à 8 colonnes. Cependant, pour les tables comportant plus de colonnes, un espace disque supplémentaire est requis comme suit :
Tests dans le monde réel
Des tests approfondis ont confirmé ces observations. Pour plus de détails, reportez-vous à la discussion sur :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!