PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie viel Speicherplatz wird benötigt, um einen NULL-Wert mit postgresql DB zu speichern?

Laramie hat Recht mit der Bitmap und er verlinkt an der richtigen Stelle im Handbuch. Dies ist jedoch fast, aber nicht ganz richtig:

Für jede gegebene Zeile mit einer oder mehreren Nullen wäre die hinzugefügte Größe also die der Bitmap (N Bits für eine N-Spalten-Tabelle, aufgerundet).

Man muss den Datenabgleich berücksichtigen. Der HeapTupleHeader (pro Zeile) ist 23 Byte lang, tatsächliche Spaltendaten beginnen immer bei einem Vielfachen von MAXALIGN (normalerweise 8 Bytes). Dadurch bleibt ein Füllbyte übrig, das von der Null-Bitmap verwendet werden kann. Tatsächlich ist NULL-Speicher für Tabellen mit bis zu 8 Spalten absolut kostenlos .

Danach noch ein MAXALIGN (typischerweise 8) Bytes werden für den nächsten MAXALIGN * 8 zugewiesen (normalerweise 64) Spalten. Etc. Immer für die Gesamtzahl der Benutzerspalten (alles oder nichts ). Aber nur, wenn es mindestens einen tatsächlichen NULL-Wert in der Zeile gibt.

Ich habe umfangreiche Tests durchgeführt, um all das zu überprüfen. Weitere Einzelheiten:

  • Verwendet die Nichtverwendung von NULL in PostgreSQL immer noch eine NULL-Bitmap im Header?