Help us learn about your current experience with the documentation. Take the survey.

哈希索引

PostgreSQL 除了常规的 B树索引外,还支持哈希索引。但是,无论如何都应该避免使用哈希索引。虽然它们有时能提供更好的性能,但重新哈希的成本可能非常高。更重要的是:至少在 PostgreSQL 10.0 之前,哈希索引都没有 WAL 日志记录,这意味着它们不会被复制到任何副本中。根据 PostgreSQL 文档:

哈希索引操作目前没有 WAL 日志记录,因此在数据库崩溃后,如果有未写入的更改,哈希索引可能需要使用 REINDEX 重建。此外,在初始基础备份之后,对哈希索引的更改不会通过流式或基于文件的复制进行复制,因此它们会给后续使用它们的查询提供错误的答案。由于这些原因,目前不鼓励使用哈希索引。

当 RuboCop 检测到使用哈希索引时,会配置为记录违规行为。

你应该使用常规的 B树索引,而不是哈希索引。