ArangoDB 2.8 - 按子查询结果排序 - 失败

时间:2015-12-17 19:56:28

标签: performance sorting arangodb

移动到2.8后,这个简单的查询现在冻结服务器,CPU使用率为100%~10秒。在2.7(~30ms)

FOR P In Person
   LET EventLast = (
    FOR E In Event FILTER E.owner == P._id SORT E.date desc LIMIT 1 RETURN E.date
   )
SORT EventLast[0]
LIMIT 40
RETURN { _id: P._id, name:P.name }

收集事件包含date中的跳转列表索引和owner

上的哈希索引

没有“SORT E.date desc”或“SORT EventLast [0]” - 1ms

1 个答案:

答案 0 :(得分:4)

2.8-beta中的查询优化器为date选择了内部子查询的跳转列表索引。此索引允许删除SORT子句,但内部查询仍需要以相反的顺序扫描整个索引,直到第一个筛选器匹配为止。它与Person中的文档一样多次。

2.7优化器改为在owner上选择哈希索引并使用后索引 - SORT。在这种情况下,如果每个索引查找的匹配数非常小,这可能会更好,但如果过滤器非常不具备,则会很糟糕。

2.8优化器现在再次更喜欢内部查询的潜在更具选择性的哈希索引。今天已经在2.8分支中对此进行了修复,该分支将变为beta3或rc(请注意,很快将会有一个beta2尚未包含此修复)。