Beim Definieren einer Spalte als nullbares Smallint wird davon ausgegangen, dass das Speichern von Werten wie 0 oder 1 2 Bytes erfordern würde . Es stellt sich jedoch die Frage: Wie viel Platz wird belegt, wenn die Spalte auf NULL gesetzt ist?
In PostgreSQL erfordern NULL-Werte keinen dedizierten Speicherplatz. Stattdessen wird eine Bitmap verwendet, um anzugeben, welche Spalten in einer Zeile NULL-Werte enthalten. Für jede Zeile mit einer oder mehreren Nullen wird dem Zeilenkopf eine Bitmap der entsprechenden Größe (aufgerundet auf das nächste Byte) hinzugefügt.
Die Datenausrichtung spielt eine entscheidende Rolle Rolle bei der Speicherverwaltung. In PostgreSQL belegt der HeapTupleHeader (Zeilenkopf) 23 Bytes und Spaltendaten werden immer an Vielfachen von MAXALIGN (normalerweise 8 Bytes) ausgerichtet. Folglich ist im Zeilenkopf ein Byte Auffüllung vorhanden, das von der Null-Bitmap genutzt werden kann.
Aufgrund der oben genannten Datenausrichtung Tabellen mit up Bis zu 8 Spalten können absolut kostenlos NULL-Werte speichern. Über diese Grenze hinaus werden zusätzliche MAXALIGN-Bytes für die nächsten 64 Spalten usw. zugewiesen. Dieser zusätzliche Platz wird jedoch nur dann belegt, wenn tatsächlich Nullwerte in der Zeile vorhanden sind.
Selbst wenn Spalten aus einer Tabelle gelöscht werden, belegen sie weiterhin etwas in der Null-Bitmap, wenn sie weiterhin im pg_attribute-Systemkatalog aufgeführt bleiben. Infolgedessen können gelöschte Spalten zum Platzbedarf für die Null-Bitmap beitragen, die auch nach VACUUM FULL-Vorgängen bestehen bleiben kann.
NULL-Werte in PostgreSQL werden mithilfe eines Bitmap-Mechanismus effizient gespeichert . Allerdings können die Datenausrichtung und die Anzahl der Spalten in einer Tabelle Einfluss darauf haben, wie viel Speicherplatz zum Speichern dieser Werte erforderlich ist. Das Verständnis dieser Optimierungstechniken kann dazu beitragen, die Datenbankleistung zu optimieren und den Speicherbedarf zu minimieren.
Das obige ist der detaillierte Inhalt vonWie viel Speicherplatz verbrauchen NULL-Werte tatsächlich in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!