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

Quanto spazio su disco è necessario per memorizzare un valore NULL utilizzando il DB postgresql?

Laramie ha ragione sulla bitmap e si collega al posto giusto nel manuale. Eppure, questo è quasi, ma non del tutto corretto:

Quindi, per ogni data riga con uno o più valori null, la dimensione aggiunta ad essa sarebbe quella della bitmap (N bit per una tabella a N colonne, arrotondata per eccesso).

Uno deve tenere conto dell'allineamento dei dati. Il HeapTupleHeader (per riga) è lungo 23 byte, i dati effettivi della colonna iniziano sempre con un multiplo di MAXALIGN (tipicamente 8 byte). Ciò lascia un byte di riempimento che può essere utilizzato dalla bitmap nulla. In effetti L'archiviazione NULL è assolutamente gratuita per le tabelle fino a 8 colonne .

Dopodiché, un altro MAXALIGN (tipicamente 8) byte vengono allocati per il successivo MAXALIGN * 8 (in genere 64) colonne. Etc. Sempre per il numero totale di colonne utente (tutto o niente ). Ma solo se nella riga è presente almeno un valore NULL effettivo.

Ho eseguito test approfonditi per verificare tutto ciò. Maggiori dettagli:

  • Non si usa NULL in PostgreSQL, utilizza ancora una bitmap NULL nell'intestazione?