sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvor meget diskplads er nødvendig for at gemme en NULL-værdi ved hjælp af postgresql DB?

Laramie har ret med hensyn til bitmap, og han linker til det rigtige sted i manualen. Alligevel er dette næsten, men ikke helt korrekt:

Så for en given række med en eller flere nuller, vil størrelsen, der føjes til den, være den for bitmap'et (N bits for en N-kolonnetabel, rundet op).

Man skal tage højde for datatilpasning. HeapTupleHeader (pr. række) er 23 bytes lang, faktiske kolonnedata starter altid med et multiplum af MAXALIGN (typisk 8 bytes). Det efterlader en byte af polstring, der kan bruges af null bitmap. Faktisk er NULL-lagerplads helt gratis for tabeller op til 8 kolonner .

Derefter en anden MAXALIGN (typisk 8) bytes allokeres til den næste MAXALIGN * 8 (typisk 64) kolonner. Osv. Altid for det samlede antal brugerkolonner (alt eller intet ). Men kun hvis der er mindst én faktisk NULL-værdi i rækken.

Jeg kørte omfattende test for at bekræfte alt det. Flere detaljer:

  • Bruger der ikke brug af NULL i PostgreSQL stadig en NULL bitmap i headeren?


  1. gem installation:Kunne ikke bygge gem native extension (kan ikke finde header-filer)

  2. StarJoinInfo i udførelsesplaner

  3. Indfangning af linkede serverfejl

  4. Sådan skifter du database ved hjælp af PostgreSQL