我知道postgresql不鼓励使用哈希索引。他们实际上说:
“警告哈希索引操作目前不是WAL记录的,所以哈希 数据库崩溃后,可能需要使用REINDEX重建索引。 它们也不会通过流式传输或基于文件的复制进行复制。 由于这些原因,目前不鼓励使用哈希索引。“
这是不使用它们的好理由,但是我无法理解为什么postgresql开发人员不会努力使哈希索引成为一等公民,并鼓励他们在某些情况下使用它们而不是劝阻这样做一点都不。
实际上如果你只需要搜索相等,哈希索引应该远远优于任何类型的树,因为它们在o(1)中进行搜索,插入和删除,而平衡树自然不能比o更好(对数(N))。在最坏的情况下,哈希索引可以用于o(n),但是有一些已知技术可以避免最坏的情况。如果我是一名数据库引擎架构师,那么这样的论证肯定会让我决定让哈希索引成为可行的选择,但是使用postgresql它似乎有所不同。是否存在技术原因,或者此类决策不是出于技术动机?
答案 0 :(得分:2)
通过使用例如B + -trees及其变体,树索引非常有效,因此它们被认为具有O(c)的成本,其中c,树的高度,一个小常量(c = 3或4可以索引数百万条记录),并且通常至少有一到两个级别的这类树被缓存,因此在大多数情况下,磁盘访问次数可以等于1或2。
因此,出于实际目的,它们具有与哈希索引类似的性能,而且具有允许范围搜索的巨大优势。