Postgresql
postgres set null 會提高稀疏數據的性能嗎?
我有大約 5000 萬個數據條目,而其中大多數(可能 80%)在一列中有空值(目前我為這些空條目分配了一個虛擬值)。但是,我經常搜尋非空(關於該列)條目。
我不確定空值和索引背後的性能影響是什麼。(如果空值會損害我的案例中的性能,我可以做的是為那些 80% 的數據分配一個虛擬值)
我猜空條目將從正常索引中排除(可能放入一些空索引),當我明確搜尋非空值時,這應該能夠提高性能,因為在我的情況下索引大小要小得多
NULL 值與所有其他值一樣儲存在索引中。
如果您希望索引來加快對值不為 NULL 的列的查詢,您可以使用部分索引,它只會索引滿足條件的行:
CREATE INDEX ON tab (...) WHERE somecol IS NOT NULL;
優點是:
- 這將適用
somecol IS NOT NULL
於具有WHERE
條件並隱式索引該條件的查詢- 索引更小
- 如果修改
comecol
為 NULL 的列,則無需為索引維護付出代價