对于支持哈希索引的每个Postgres版本,都有警告或注意,至少在8.3版之前,哈希索引比btree索引“相似或更慢”或“不更好” 。从文档:
注意:由于哈希索引的用途有限,因此通常应优先选择B树索引而不是哈希索引。我们没有足够的证据表明即使进行=比较,哈希索引实际上也比B树更快。而且,散列索引需要更粗的锁。参见第9.7节。
注意:测试表明PostgreSQL的哈希索引与 B树索引相似或比B树索引慢,并且哈希索引的索引大小和构建时间要差得多。在高并发下,哈希索引的性能也很差。由于这些原因,不鼓励使用哈希索引。
注意:测试表明PostgreSQL的哈希索引的性能并不比B树索引好,并且哈希索引的索引大小和构建时间要差得多。此外,哈希索引操作目前还没有进行WAL记录,因此在数据库崩溃后可能需要使用REINDEX重建哈希索引。由于这些原因,目前不鼓励使用哈希索引。
他们声称在此版本8.0线程中,从未发现哈希索引实际上比btree更快的情况。
即使是在9.2版中,根据该博客文章(2016年3月14日):
AndréBarbosa撰写的Postgres哈希索引,除编写实际索引外,其他任何方面的性能提升也几乎没有。
我的问题是那怎么可能?
根据定义,哈希索引是一个O(1)
操作,其中btree是一个O(log n)
操作。那么,O(1)
查找比查找正确的分支然后查找正确的记录要慢(或什至类似于)的可能性如何呢?
我想知道索引理论到底有什么可能!