postgresql - 为什么 postgresql "disrespects"哈希索引?

标签 postgresql indexing

我知道 postgresql 不鼓励使用哈希索引。他们实际上说:

"Caution Hash index operations are not presently WAL-logged, so hash indexes might need to be rebuilt with REINDEX after a database crash. They are also not replicated over streaming or file-based replication. For these reasons, hash index use is presently discouraged."

这是完全不使用它们的好理由,但我不明白为什么 postgresql 开发人员不努力使哈希索引成为一等公民并鼓励在某些情况下使用它们而不是劝阻这样做完全没有。

其实如果只求相等的话,哈希索引应该比任何一种树都优越,因为它在o(1)中进行查找、插入和删除,而平衡树自然不可能比o好(日志(n))。在最坏的情况下,哈希索引可以为 o(n) 工作,但是有很多已知的技术可以避免最坏的情况。如果我是数据库引擎架构师,这样的论点肯定会决定我将哈希索引作为一个可行的替代方案,但对于 postgresql 来说,这似乎有所不同。这是否有技术原因,或者这样的决定不是出于技术原因?

最佳答案

树索引,例如使用 B+-trees 及其变体,非常高效,以至于它们被认为具有 O(c) 的成本,其中 c,树的高度,是一个小常量(c = 3 或 4 你可以索引数百万条记录),通常至少缓存一到两层这样的树,这样在大多数情况下磁盘访问次数可以等于 1 或 2。

因此,出于实用目的,它们具有与哈希索引类似的性能,而且具有允许范围搜索的巨大优势。

关于postgresql - 为什么 postgresql "disrespects"哈希索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38168151/

相关文章:

PostgreSQL - 分配变量时出现语法错误?

java - query.getResultList 处的 ClassCastException

mysql - 日志表的数据库索引

arrays - 如何搜索 PowerShell 对象数组并检索匹配字符串的索引?

postgresql - 使: *** [pipeline_kafka.如此]错误1

sql - 如何计算每月间隔平均值和按月分组

c - PQgetvalue 实际字段大小

sql-server - 在这种情况下如何将索引扫描更改为索引查找?

sql - 什么是基数以及它如何影响性能 (SQL Server)?

Ruby 抓取符合条件的数组第一个元素的索引