Maison >base de données >tutoriel mysql >Quelle quantité d'espace disque les valeurs NULL utilisent-elles réellement dans PostgreSQL ?

Quelle quantité d'espace disque les valeurs NULL utilisent-elles réellement dans PostgreSQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-26 10:53:14418parcourir

How Much Disk Space Do NULL Values Actually Use in PostgreSQL?

Espace disque requis pour les valeurs NULL dans PostgreSQL

Lors de la création d'une table de base de données, il est important de prendre en compte les exigences de stockage de ses colonnes, en particulier lorsqu'il s'agit de valeurs nullables. Comprendre comment les valeurs NULL sont stockées peut optimiser l'utilisation de l'espace disque.

Stockage des valeurs NULL

Dans PostgreSQL, les valeurs NULL sont représentées à l'aide d'un masque de bits, appelé bitmap nul. . Chaque bit du bitmap correspond à une colonne du tableau. Si un bit est mis à 1, cela indique que la colonne correspondante est NULL.

Espace disque occupé par les bitmaps NULL

La taille du bitmap nul dépend de la nombre de colonnes dans le tableau. Pour les tableaux comportant 8 colonnes ou moins, le bitmap occupe 1 octet. Pour les tableaux de 9 à 64 colonnes, il occupe 2 octets, et ainsi de suite. Cependant, en raison de l'alignement des données, l'exigence de stockage minimale pour une ligne contenant au moins une valeur NULL est de 1 octet, quel que soit le nombre de colonnes.

Surcharge pour les colonnes NULL

Outre le bitmap nul, aucun octet supplémentaire n'est requis pour la gestion des colonnes NULL. Cependant, les colonnes supprimées marquées comme « supprimées » dans le catalogue système pg_attribute occupent toujours un bit dans le bitmap nul. Cette surcharge peut persister jusqu'à ce qu'un cycle de vidage/restauration soit effectué.

Exemple et résultats de test

Considérons un tableau avec la définition de colonne suivante :

"MyColumn" smallint NULL

Stocker une valeur de 0 ou 1 dans cette colonne nécessiterait 2 octets. Pour les valeurs NULL, les exigences de stockage suivantes s'appliquent :

  • Pour les tables comportant 8 colonnes ou moins :

    • Aucun espace disque supplémentaire
  • Pour les tables de 9 à 64 personnes colonnes :

    • 1 octet pour le bitmap nul
  • Pour les tableaux de plus de 64 colonnes :

    • Plusieurs octets pour plus MAXALIGNs

Des tests approfondis montrent que ces exigences de stockage sont cohérentes pour toutes les tables. L'optimisation de l'utilisation de l'espace disque en stockant les valeurs NULL dans de petites tables (moins de 9 colonnes) est bénéfique, alors que cela devient moins important dans les tables plus grandes.

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