Lors de la définition d'une colonne comme smallint nullable, l'hypothèse est que le stockage de valeurs telles que 0 ou 1 nécessiterait 2 octets . Cependant, la question se pose : combien d'espace est occupé lorsque la colonne est définie sur NULL ?
Dans PostgreSQL, les valeurs NULL ne nécessitent aucun espace de stockage dédié. Au lieu de cela, un bitmap est utilisé pour indiquer quelles colonnes d'une ligne contiennent des valeurs NULL. Pour toute ligne contenant un ou plusieurs valeurs nulles, un bitmap de la taille appropriée (arrondi à l'octet le plus proche) est ajouté à l'en-tête de la ligne.
L'alignement des données joue un rôle crucial rôle dans la gestion de la mémoire. Dans PostgreSQL, le HeapTupleHeader (en-tête de ligne) occupe 23 octets et les données de colonne sont toujours alignées sur des multiples de MAXALIGN (généralement 8 octets). Par conséquent, il existe un octet de remplissage dans l'en-tête de ligne qui peut être utilisé par le bitmap nul.
En raison de l'alignement des données susmentionné, les tables avec jusqu'à à 8 colonnes peuvent stocker des valeurs NULL absolument gratuitement. Au-delà de cette limite, des octets MAXALIGN supplémentaires sont alloués pour les 64 colonnes suivantes, et ainsi de suite. Cependant, cet espace supplémentaire n'est occupé que s'il y a de réelles valeurs nulles dans la ligne.
Même lorsque des colonnes sont supprimées d'une table, elles continuent d'occuper un peu dans le bitmap nul s'ils restent répertoriés dans le catalogue système pg_attribute. Par conséquent, les colonnes supprimées peuvent contribuer à l'espace nécessaire pour le bitmap nul, qui peut persister même après des opérations VACUUM FULL.
Les valeurs NULL dans PostgreSQL sont stockées efficacement à l'aide d'un mécanisme bitmap. . Cependant, l'alignement des données et le nombre de colonnes dans une table peuvent influencer la quantité d'espace disque requise pour stocker ces valeurs. Comprendre ces techniques d'optimisation peut aider à optimiser les performances de la base de données et à minimiser les besoins de stockage.
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!