sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur mycket diskutrymme behövs för att lagra ett NULL-värde med postgresql DB?

Laramie har rätt om bitmappen och han länkar till rätt plats i manualen. Ändå är detta nästan, men inte helt korrekt:

Så för en given rad med en eller flera nollor skulle storleken som läggs till den vara bitmappens (N bitar för en N-kolumntabell, avrundat uppåt).

Man måste ta hänsyn till dataanpassning. HeapTupleHeader (per rad) är 23 byte lång, faktisk kolumndata börjar alltid med en multipel av MAXALIGN (vanligtvis 8 byte). Det lämnar en byte av utfyllnad som kan användas av noll-bitmappen. I själva verket är NULL-lagring helt gratis för tabeller upp till 8 kolumner .

Efter det, ytterligare en MAXALIGN (vanligtvis 8) byte tilldelas för nästa MAXALIGN * 8 (vanligtvis 64) kolumner. Etc. Alltid för det totala antalet användarkolumner (allt eller inget ). Men bara om det finns minst ett faktiskt NULL-värde i raden.

Jag körde omfattande tester för att verifiera allt detta. Mer information:

  • Använder inte NULL i PostgreSQL fortfarande en NULL-bitmapp i rubriken?


  1. SQL SELECT INTO-sats

  2. Hur man beräknar marginal i MySQL

  3. SQL Server SELECT i befintlig tabell

  4. Har Oracle ett filtrerat indexkoncept?