Laramie heeft gelijk over de bitmap en hij linkt naar de juiste plek in de handleiding. Toch is dit bijna, maar niet helemaal correct:
Dus voor elke rij met een of meer nulls, zou de toegevoegde grootte die van de bitmap zijn (N bits voor een N-kolomtabel, naar boven afgerond).
Men moet rekening houden met gegevensuitlijning. De HeapTupleHeader
(per rij) is 23 bytes lang, werkelijke kolomgegevens beginnen altijd met een veelvoud van MAXALIGN
(meestal 8 bytes). Dat laat één byte opvulling over die kan worden gebruikt door de null-bitmap. In feite is NULL-opslag helemaal gratis voor tabellen tot 8 kolommen .
Daarna nog een MAXALIGN
(meestal 8) bytes worden toegewezen voor de volgende MAXALIGN * 8
(meestal 64) kolommen. Enz. Altijd voor het totale aantal gebruikerskolommen (alles of niets ). Maar alleen als er ten minste één werkelijke NULL-waarde in de rij staat.
Ik heb uitgebreide tests uitgevoerd om dat allemaal te verifiëren. Meer details:
- Gebruikt het gebruik van NULL in PostgreSQL nog steeds een NULL-bitmap in de koptekst?