对于相同的字段,是否有一个哈希索引和一个跳过列表索引并行? Arango是否会使用哈希索引进行相等性查询,并使用跳过列表索引进行范围请求?
答案 0 :(得分:2)
可以在同一属性(甚至多个属性)上具有跳转列表索引和哈希索引。 查询使用哪个索引取决于几个因素:
attribute > leftBound && attribute < rightBound
将有更高的机会使用跳过列表索引,而不仅仅是attribute > leftBound
)null
值(在这种情况下,将不使用索引,无论它是散列索引还是跳转列表索引)通过在特定查询上运行db._explain(query)
,将始终显示将使用哪个索引(如果有的话)。
在相同属性上具有多个索引但是缺点是每个单独的索引会减慢对集合的写入速度。对于基于RocksDB的索引,每个附加索引也将占用磁盘空间。对于基于MMFiles的索引,服务器启动/收集负载上的索引构建时间是要考虑的因素以及每个索引的额外RAM使用情况。
因此,在大多数情况下,在某些查询可能获得的额外查找速度与额外内存/磁盘空间和索引构建/维护的成本之间进行权衡。