在 PostgreSQL 中,允許 NULL 值的資料列的儲存要求與強制值的資料列不同。考慮下面的表格列定義:
"MyColumn" smallint NULL
儲存整數(例如 0、1 或任何其他值)需要 2 個位元組。但是,問題來了:當「MyColumn」設定為NULL時,會消耗多少磁碟空間?它佔用 0 位元組嗎?
點陣圖與 NULL 儲存
與最初假設的 0 位元組消耗相反,NULL 值不佔用任何空間。相反,PostgreSQL 使用 位圖 來追蹤表中每列的 NULL 狀態。點陣圖中的每一位元代表特定行的 NULL/NOT NULL 狀態。
但是,點陣圖並未指派給每一行。相反,數據對齊是一個需要考慮的因素。 HeapTupleHeader包含每行的信息,佔用23位元組。資料以 MAXALIGN 的倍數(通常為 8 個位元組)開始對齊,為空位圖留下一個位元組的填充。
磁碟空間需求
由於這些因素,空儲存對於最多 8 列的表來說實際上是免費的。但是,對於具有更多列的表,需要額外的磁碟空間,如下所示:
真實世界測試
廣泛的測試已經證實了這些觀察結果。有關更多詳細信息,請參閱以下討論:
以上是PostgreSQL 中的 NULL 值實際消耗多少磁碟空間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!