Nullwertspeicher in PostgreSQL-Datenbanken verstehen
Bei der Arbeit mit Datenbanken ist es wichtig, den Speicherplatz für eine effiziente Leistung zu optimieren. Beim Umgang mit NULL-Werten stellt sich häufig die Frage: Wie viel Speicherplatz ist zum Speichern eines NULL-Werts erforderlich?
In PostgreSQL unterscheidet sich die Speicherung von NULL-Werten je nach Kontext. Betrachten wir das gegebene Beispiel, in dem die Spalte „MyColumn“ als „smallint NULL“ definiert ist. In diesem Fall würde das Speichern eines Werts wie 0 oder 1 im Allgemeinen 2 Bytes erfordern.
Speichern von NULL-Werten
Wenn „MyColumn“ auf NULL gesetzt ist, entspricht der Speicherbedarf wird nuancierter. Entgegen der Intuition belegen NULL-Werte nicht 0 Bytes. Stattdessen verwendet PostgreSQL eine Technik namens Bitmap-Indizierung, um Nullen zu verfolgen. Für jede Zeile in einer Tabelle wird eine Bitmap erstellt, um zu markieren, welche Spalten NULL-Werte enthalten.
Lassen Sie uns nun die Speicherauswirkungen dieses Ansatzes aufschlüsseln:
-
Tabellen mit weniger als 8 Spalten: Bei Tabellen mit bis zu 8 Spalten wird die Null-Bitmap im Zeilenkopf gespeichert, wobei ein ansonsten ungenutztes Byte verwendet wird der Polsterung. Daher verursacht das Speichern von NULL-Werten in solchen Tabellen praktisch keinen zusätzlichen Speicherplatzaufwand.
-
Tabellen mit 8 oder mehr Spalten: Für Tabellen mit 8 oder mehr Spalten erfordert die Null-Bitmap zusätzlichen Speicherplatz von MAXALIGN Bytes (normalerweise 8 Bytes). Dieser Platz wird jeder Zeile zugewiesen, unabhängig davon, ob Spalten NULL-Werte enthalten.
Zusätzliche Überlegungen
-
Ausrichtung: Zeilendaten müssen an bestimmten Grenzen ausgerichtet sein, um den Speicherzugriff zu optimieren. Wenn die Null-Bitmap nicht in den verbleibenden Füllraum passt, können zusätzliche Ausrichtungsbytes hinzugefügt werden, was möglicherweise den Speicherbedarf erhöht.
-
Entfernte Spalten: Sogar Spalten, die aus einer Tabelle entfernt wurden Die Definition wird möglicherweise immer noch in der Null-Bitmap widergespiegelt und nimmt etwas Platz ein. VACUUM FULL kann diesen Speicherplatz nicht entfernen und erfordert einen Dump-/Wiederherstellungszyklus, um ihn zurückzugewinnen.
Das obige ist der detaillierte Inhalt vonWie viel Speicherplatz verbraucht ein NULL-Wert tatsächlich in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn