我想为人口稀少的列创建最有效的索引。我只需要相等操作,所以 HASH 索引应该是有益的。
现在我想知道为什么部分哈希索引不小于完整哈希索引:
CREATE INDEX full_hash ON mytable USING HASH(my_id); # 256 MB
CREATE INDEX partial_hash ON mytable USING HASH(my_id) WHERE my_ID IS NOT NULL; # 256 MB
CREATE INDEX full_btree ON mytable (my_id); # 537 MB
CREATE INDEX partial_btree ON mytable (my_id) WHERE my_ID IS NOT NULL; # 32 MB
Run Code Online (Sandbox Code Playgroud)
两个哈希索引占用的空间量完全相同(如 pgHero 所示)。但是,在使用标准 BTREE 索引时,部分索引仅占用完整索引空间的 5%。
PostgreSQL 10 不支持部分 HASH 索引吗?