散列索引

除了常规的b树索引外,PostgreSQL和MySQL都支持哈希索引。然而,无论如何都要避免使用散列索引。虽然他们可能有时为了提供更好的性能,重新散列的成本可能非常高。更重要的是:至少在PostgreSQL 10.0之前,哈希索引没有wal -log,这意味着它们不会被复制到任何副本上。从PostgreSQL文档中:

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

RuboCop配置为在检测到使用哈希索引时注册违规。

而不是使用散列索引,您应该使用常规的b树索引。

Baidu
map