Postgresql

將幾個布爾值儲存為數組是否有意義?

  • July 14, 2016

我有一個包含五個布爾列的表。在 90% 以上的行中,所有列都為空。(對我False來說相當於null。)

我可以有一個包含列舉自定義數據類型數組的數組列,而不是布爾列,從而只儲存非空的列。

我覺得使用數組很奇怪,但我的同事向我指出,並沒有強烈的理由反對使用它們,而且我們實際上可能會看到使用它們的節省,因為我們沒有儲存一堆空列。

使用數組有什麼缺點嗎?具體來說:它們會佔用更多空間、佔用更多時間進行查詢,還是阻止使用 Postgres 功能(例如 gin 索引)?

TL;DR:不要使用數組。使用單個boolean列。


您的同事可能不知道實際的儲存要求。在 Postgres 中,空儲存非常便宜且高效。

一些boolean列也非常便宜和高效 - 是否可以為空。實際上,只有 5boolean列與行大小根本無關——即使已定義NOT NULL。每個 1 個字節,5 個字節,沒有對齊限制。幾乎沒有關係。通常你可以對你的行做更多實質性的事情。(您應該提供您的實際表定義。)

數組有24 個字節的成本。加上實際數據。並且處理不那麼方便且昂貴得多:

  • 在 PostgreSQL 中計算和節省空間

此相關答案對三個相關選項進行了詳細評估:

  1. 單獨的boolean
  2. aninteger最多可編碼 32 個布爾值
  3. 一個位串(bit(n)bit varying(n)

引用自:https://dba.stackexchange.com/questions/143766