Postgresql

postgres set null 會提高稀疏數據的性能嗎?

  • October 7, 2021

我有大約 5000 萬個數據條目,而其中大多數(可能 80%)在一列中有空值(目前我為這些空條目分配了一個虛擬值)。但是,我經常搜尋非空(關於該列)條目。

我不確定空值和索引背後的性能影響是什麼。(如果空值會損害我的案例中的性能,我可以做的是為那些 80% 的數據分配一個虛擬值)

我猜空條目將從正常索引中排除(可能放入一些空索引),當我明確搜尋非空值時,這應該能夠提高性能,因為在我的情況下索引大小要小得多

NULL 值與所有其他值一樣儲存在索引中。

如果您希望索引來加快對值不為 NULL 的列的查詢,您可以使用部分索引,它只會索引滿足條件的行:

CREATE INDEX ON tab (...) WHERE somecol IS NOT NULL;

優點是:

  • 這將適用somecol IS NOT NULL於具有WHERE條件並隱式索引該條件的查詢
  • 索引更小
  • 如果修改comecol為 NULL 的列,則無需為索引維護付出代價

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