Setzen von NOT NULL
wirkt sich per se nicht auf die Leistung aus. Ein paar Zyklen für den Check - egal.
Sie können die Leistung jedoch verbessern, indem Sie tatsächlich NULL-Werte anstelle von Dummy-Werten verwenden. Je nach Datentyp können Sie viel Speicherplatz und RAM sparen , wodurch .. alles beschleunigt wird.
Die Null-Bitmap wird nur zugewiesen, wenn NULL-Werte in der Zeile vorhanden sind . Es ist ein Bit für alle Spalte in der Zeile (NULL oder nicht). Für Tabellen mit bis zu 8 Spalten ist die Null-Bitmap effektiv völlig frei, wobei ein Ersatzbyte zwischen Tupel-Header und Zeilendaten verwendet wird. Danach wird der Speicherplatz in Vielfachen von MAXALIGN
zugewiesen (normalerweise 8 Bytes, die 64 Spalten abdecken). Der Unterschied geht durch Polsterung verloren. Sie zahlen also den vollen (niedrigen!) Preis für den ersten NULL-Wert in jeder Zeile . Zusätzliche NULL-Werte können nur Platz sparen.
Die Mindestspeicheranforderung für alle Nicht-Null-Werte beträgt 1 Byte (boolean
, "char"
, ...) oder typischerweise viel mehr, plus (möglicherweise) Polsterung für die Ausrichtung. Informieren Sie sich über Datentypen
oder überprüfen Sie die blutigen Details in der Systemtabelle pg_type
.
Mehr über Nullspeicher:
- Verwendet die Verwendung von NULL in PostgreSQL nicht immer noch eine NULL-Bitmap im Header?
- Das Handbuch.