PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Combien d'espace disque est nécessaire pour stocker une valeur NULL à l'aide de la base de données postgresql ?

Laramie a raison sur le bitmap et il renvoie au bon endroit dans le manuel. Pourtant, c'est presque, mais pas tout à fait correct :

Ainsi, pour toute ligne donnée avec un ou plusieurs NULL, la taille ajoutée serait celle du bitmap (N bits pour un tableau à N colonnes, arrondi).

Il faut tenir compte de l'alignement des données. Le HeapTupleHeader (par ligne) a une longueur de 23 octets, les données de colonne réelles commencent toujours à un multiple de MAXALIGN (généralement 8 octets). Cela laisse un octet de remplissage qui peut être utilisé par le bitmap nul. En effet, le stockage NULL est absolument gratuit pour les tables jusqu'à 8 colonnes .

Après cela, un autre MAXALIGN (typiquement 8) octets sont alloués pour le prochain MAXALIGN * 8 (généralement 64) colonnes. Etc. Toujours pour le nombre total de colonnes utilisateur (tout ou rien ). Mais seulement s'il y a au moins une valeur NULL réelle dans la ligne.

J'ai effectué des tests approfondis pour vérifier tout cela. Plus de détails :

  • L'utilisation de NULL dans PostgreSQL n'utilise-t-elle pas toujours un bitmap NULL dans l'en-tête ?