Postgresql
將幾個布爾值儲存為數組是否有意義?
我有一個包含五個布爾列的表。在 90% 以上的行中,所有列都為空。(對我
False
來說相當於null
。)我可以有一個包含列舉自定義數據類型數組的數組列,而不是布爾列,從而只儲存非空的列。
我覺得使用數組很奇怪,但我的同事向我指出,並沒有強烈的理由反對使用它們,而且我們實際上可能會看到使用它們的節省,因為我們沒有儲存一堆空列。
使用數組有什麼缺點嗎?具體來說:它們會佔用更多空間、佔用更多時間進行查詢,還是阻止使用 Postgres 功能(例如 gin 索引)?
TL;DR:不要使用數組。使用單個
boolean
列。您的同事可能不知道實際的儲存要求。在 Postgres 中,空儲存非常便宜且高效。
一些
boolean
列也非常便宜和高效 - 是否可以為空。實際上,只有 5boolean
列與行大小根本無關——即使已定義NOT NULL
。每個 1 個字節,5 個字節,沒有對齊限制。幾乎沒有關係。通常你可以對你的行做更多實質性的事情。(您應該提供您的實際表定義。)數組有24 個字節的成本。加上實際數據。並且處理不那麼方便且昂貴得多:
- 在 PostgreSQL 中計算和節省空間
此相關答案對三個相關選項進行了詳細評估:
- 單獨的
boolean
列- an
integer
最多可編碼 32 個布爾值- 一個位串(
bit(n)
或bit varying(n)
)