Définition de NOT NULL
n'a aucun effet en soi sur les performances. Quelques cycles pour le contrôle - sans importance.
Mais vous pouvez améliorer les performances en utilisant réellement des valeurs NULL au lieu de valeurs factices. Selon les types de données, vous pouvez économiser beaucoup d'espace disque et de RAM , accélérant ainsi .. tout.
Le bitmap nul n'est alloué que s'il y a des valeurs NULL dans la ligne . C'est un bit pour chaque colonne dans la ligne (NULL ou non). Pour les tables jusqu'à 8 colonnes, le bitmap nul est effectivement totalement gratuit, en utilisant un octet de réserve entre l'en-tête de tuple et les données de ligne. Après cela, l'espace est alloué en multiples de MAXALIGN
(typiquement 8 octets, couvrant 64 colonnes). La différence est perdue pour le rembourrage. Vous payez donc le prix complet (bas !) pour la première valeur NULL de chaque ligne . Les valeurs NULL supplémentaires ne peuvent qu'économiser de l'espace.
Le stockage minimum requis pour toute valeur non nulle est de 1 octet (boolean
, "char"
, ...) ou généralement beaucoup plus, plus (éventuellement) un rembourrage pour l'alignement. Renseignez-vous sur les types de données
ou vérifiez les détails sanglants dans la table système pg_type
.
En savoir plus sur le stockage nul :
- L'utilisation de NULL dans PostgreSQL n'utilise-t-elle pas toujours un bitmap NULL dans l'en-tête ?
- Le manuel.