Hash和Skiplists并行索引?

时间:2018-02-12 14:31:48

标签: indexing arangodb

对于相同的字段,是否有一个哈希索引和一个跳过列表索引并行? Arango是否会使用哈希索引进行相等性查询,并使用跳过列表索引进行范围请求?

1 个答案:

答案 0 :(得分:2)

可以在同一属性(甚至多个属性)上具有跳转列表索引和哈希索引。 查询使用哪个索引取决于几个因素:

  • 用于等式查找:索引的选择性估计(如果由索引类型提供)
  • 用于范围查询:使用的边界数(过滤条件如attribute > leftBound && attribute < rightBound将有更高的机会使用跳过列表索引,而不仅仅是attribute > leftBound
  • 集合中的文档数
  • 如果索引可用于优化后来的SORT子句
  • 如果索引是稀疏的:如果条件可以包含null值(在这种情况下,将不使用索引,无论它是散列索引还是跳转列表索引)

通过在特定查询上运行db._explain(query),将始终显示将使用哪个索引(如果有的话)。

在相同属性上具有多个索引但是缺点是每个单独的索引会减慢对集合的写入速度。对于基于RocksDB的索引,每个附加索引也将占用磁盘空间。对于基于MMFiles的索引,服务器启动/收集负载上的索引构建时间是要考虑的因素以及每个索引的额外RAM使用情况。

因此,在大多数情况下,在某些查询可能获得的额外查找速度与额外内存/磁盘空间和索引构建/维护的成本之间进行权衡。