PostgreSQL 中的 HASH 索引

问题描述 投票:0回答:1

我正在重温 16 年前关于 PostgreSQL HASH 索引与 B-TREE 的一个老问题。当时,HASH 索引在空间和时间方面的效率似乎远低于 B-TREE,并且共识是 HASH 索引在许多用例中没有提供显着的性能优势。

我很好奇2024年情况有变化吗? 对这个答案(以及链接的文档)的评论表明,对 PostgreSQL 中的 HASH 索引进行了一些优化,使其变得可行。它们重要吗?

主要问题:

关于何时在 Postgres 中使用 HASH 索引而不是 B-TREE,目前的最佳实践是什么?

其他注意事项:

HASH 索引是否有需要注意的特定陷阱,特别是:

  • BOOL 列?
  • 具有很少唯一值的列(例如,仅存在 3 个不同值的 HASH 索引)?

原始线程中的一条评论指出,“事实上,使用索引来匹配 99% 的行将非常低效,比 seqscan 慢得多。”这在今天仍然适用吗?或者情况是否随着现代优化而发生了变化?

很想听听您在 2024 年关于 PostgreSQL 中 HASH 索引的经验和建议!

database postgresql indexing
1个回答
0
投票

哈希索引发生的一件事是,它们在 PostgreSQL v10 中变得安全可靠。现在,您不必在操作系统崩溃后重建索引。

除此之外,没有什么太大改变。哈希索引仍然比 B 树索引受到更少的喜爱,因此它们通常不会优于 B 树索引。如果你有一列包含许多相同的值,它们必然是低效的,但是在我在 2023 年的实验中我没有发现任何哈希索引优于 B 树索引的实际情况。

我的建议是忘记哈希索引。

© www.soinside.com 2019 - 2024. All rights reserved.