Comprendre le stockage de valeurs nulles dans les bases de données PostgreSQL
Lorsque vous travaillez avec des bases de données, il est essentiel d'optimiser l'espace de stockage pour des performances efficaces. Une question courante se pose lorsqu'on traite des valeurs NULL : combien d'espace disque est nécessaire pour stocker une valeur NULL ?
Dans PostgreSQL, le stockage des valeurs NULL diffère selon le contexte. Considérons l'exemple donné où la colonne "MyColumn" est définie comme "smallint NULL". Dans ce cas, le stockage d'une valeur telle que 0 ou 1 nécessiterait généralement 2 octets.
Stockage des valeurs NULL
Lorsque "MyColumn" est défini sur NULL, les exigences de stockage devient plus nuancé. Contrairement à l'intuition, les valeurs NULL n'occupent pas 0 octet. Au lieu de cela, PostgreSQL utilise une technique appelée indexation bitmap pour suivre les valeurs nulles. Pour chaque ligne d'un tableau, un bitmap est créé pour marquer les colonnes contenant des valeurs NULL.
Décomposons maintenant les implications de stockage de cette approche :
-
Tableaux avec moins de 8 colonnes : Pour les tableaux comportant jusqu'à 8 colonnes, le bitmap nul est stocké dans l'en-tête de la ligne, en utilisant un octet autrement inutilisé de rembourrage. Par conséquent, le stockage des valeurs NULL dans de telles tables n'entraîne pratiquement aucune surcharge d'espace supplémentaire.
-
Tables avec 8 colonnes ou plus : Pour les tables avec 8 colonnes ou plus, le bitmap nul nécessite un espace supplémentaire de MAXALIGN octets (généralement 8 octets). Cet espace est alloué pour chaque ligne, que des colonnes contiennent ou non des valeurs NULL.
Considérations supplémentaires
-
Alignement : Les données de ligne doivent s'aligner sur des limites spécifiques pour optimiser l'accès à la mémoire. Si le bitmap nul ne rentre pas dans l'espace de remplissage restant, des octets d'alignement supplémentaires peuvent être ajoutés, augmentant potentiellement les besoins de stockage.
-
Colonnes supprimées : Même les colonnes qui ont été supprimées d'une table la définition peut toujours être reflétée dans le bitmap nul, occupant un peu d'espace. VACUUM FULL ne peut pas supprimer cet espace, nécessitant un cycle de vidage/restauration pour le récupérer.
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!
Déclaration:Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn