从 Postgres 13 开始,哈希索引对于精确文本匹配查询来说是最佳的吗?

Z. *_* M. 5 postgresql postgresql-12 postgresql-13

示例(假)情况:当将专门查询包含电子邮件(文本类型)的列以获取精确的字符串匹配时,对该列进行索引。

SELECT * FROM mytable WHERE email = 'test@test.com'
Run Code Online (Sandbox Code Playgroud)

在这些情况下,哈希索引是否比 B-TREE 有优势且没有缺点?

它们对插入/更新性能的影响是否不同?

(编辑:并且从未按此列排序)

esh*_*ana 1

如果您仅将电子邮件列与等于运算符进行比较并且没有排序,则哈希索引要快得多。

  • B 树可以处理可按某种顺序排序的数据的相等和范围查询。特别是,只要索引列涉及使用以下运算符之一的比较,PostgreSQL 查询规划器就会考虑使用 B 树索引:<、<=、=、>=、>

  • 哈希索引只能处理简单的相等比较。每当索引列涉及使用 = 运算符的比较时,查询规划器都会考虑使用哈希索引。

这是 mysql 文档中两种索引类型之间的比较,但也适用于 postgresql 以及 MySQl B 树和哈希索引的比较