我在一个集合上有多个持久索引。一个是时间戳,另一个是文档 ID。时间戳用于选择一系列文档。我需要通过文档 ID 列表按时间范围检索文档。 AQL 是这样的:
for x in collection filter time1>=x.timestamp&&time2<x.timestamp&&x.id in [<list of ids>] return x
ArangoDB 始终为索引选择时间戳,但在大多数情况下,id 应该首先过滤更多对象。
如何指示计划者选择 id 索引而不是时间戳?或者,有没有一种方法可以创建一个组合索引来减少或消除此类查询的线性扫描?
谢谢。
广告 1) 使用多条过滤线来帮助执行计划者:
FOR x IN collection
FILTER x.id IN [1,2,3]
FILTER x.timestamp < @time1 AND
x.timestamp >= @time2
RETURN x
广告 2) 这取决于您如何创建索引;在javascript中它很简单:
db.collection.ensureIndex({type: "hash", fields: ["id", "timestamp]"]});