In PostgreSQL unterscheiden sich die Speicheranforderungen für Spalten, die NULL-Werte zulassen, von denen, die Werte erzwingen. Betrachten Sie die folgende Tabellenspaltendefinition:
"MyColumn" smallint NULL
Das Speichern von Ganzzahlen wie 0, 1 oder einem anderen Wert erfordert 2 Bytes. Es stellt sich jedoch die Frage: Wie viel Speicherplatz wird verbraucht, wenn „MyColumn“ auf NULL gesetzt ist? Belegt es 0 Bytes?
Bitmap vs. NULL-Speicher
Entgegen der anfänglichen Annahme eines 0-Byte-Verbrauchs belegen NULL-Werte keinen Platz. Stattdessen verwendet PostgreSQL eine Bitmap, um den NULL-Status für jede Spalte in einer Tabelle zu verfolgen. Jedes Bit in der Bitmap stellt den NULL/NOT NULL-Status für eine bestimmte Zeile dar.
Die Bitmap wird jedoch nicht jeder Zeile zugewiesen. Stattdessen ist die Datenausrichtung ein zu berücksichtigender Faktor. Der HeapTupleHeader, der Informationen zu jeder Zeile enthält, belegt 23 Bytes. Die Daten werden so ausgerichtet, dass sie bei Vielfachen von MAXALIGN beginnen (normalerweise 8 Bytes), wobei ein Byte Auffüllung für die Null-Bitmap verbleibt.
Anforderungen an den Festplattenspeicher
Als Ergebnis von Aufgrund dieser Faktoren ist Nullspeicher für Tabellen mit bis zu 8 Spalten praktisch kostenlos. Für Tabellen mit mehr Spalten ist jedoch zusätzlicher Speicherplatz wie folgt erforderlich:
Realwelttests
Umfangreiche Tests haben diese Beobachtungen bestätigt. Weitere Einzelheiten finden Sie in der Diskussion unter:
Das obige ist der detaillierte Inhalt vonWie viel Speicherplatz verbrauchen NULL-Werte in PostgreSQL wirklich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!