sql >> Database >  >> RDS >> PostgreSQL

Hoeveel schijfruimte is er nodig om een ​​NULL-waarde op te slaan met behulp van postgresql DB?

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?


  1. LEFT OUTER JOIN of RIGHT OUTER JOIN vinden met ORACLE JOIN (+)

  2. DevOps Database Woordenlijst voor de MySQL-beginner

  3. Azure Database for MySQL Server maken en implementeren met behulp van Azure Portal en Workbench

  4. retourwaarde op een positie van STRING_SPLIT in SQL Server 2016