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

Erhöht das Festlegen von NOT NULL für eine Spalte in postgresql die Leistung?

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: