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

标签 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 }

集合事件在日期中具有跳过列表索引,在所有者中具有哈希索引

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

最佳答案

2.8-beta 中的查询优化器为内部子查询选择了 date 上的跳表索引。该索引允许删除SORT子句,但内部查询仍然需要以相反的顺序扫描整个索引,直到第一个过滤器匹配。它执行此操作的次数与 Person 中的文档数量相同。

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

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

关于performance - ArangoDB 2.8 - 按子查询结果排序 - 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34343185/

相关文章:

performance - 用于确定列的任何两个子集是否具有相同总和的快速代码

android - 强制 Renderscript 在 CPU 或 GPU 上运行(至少出于性能调整目的)

java - 没有注释的 ArangoDB Java 驱动程序边缘

graph-databases - ArangoDB 字符串查询列表

arangodb - 转储数据库并以新名称重新导入

ruby - 在 ruby​​ 中哪个更快 - 散列查找或带有 case 语句的函数?

c - 如何使用 GCC 自动矢量化跨步写入?

python - 对包含元组 python 的列表列表中的项目进行分组

javascript - 排序 JSON 对象

Java错误: java. lang.NullPointerException