我是ArangoDB新手,很难优化我的查询,我希望能得到一些帮助。
下面提供的查询是一个实际的示例,在我的dev数据库中使用758.078 ms,但是在使用更大的数据集的情况下,它需要531.511 s。
我还将提供在dev和暂存中遍历的每个边缘表的大小。任何帮助都是非常感谢的。
for doc in document
filter repo._key == "my-key"
for v, e, p in 3 any doc edge1, edge2, edge3
options {uniqueVertices: 'global', bfs: true}
filter DATE_ISO8601(p.vertices[2].date) > DATE_ISO8601("2017-09-04T00:00:01Z")
and DATE_ISO8601(p.vertices[2].date) < DATE_ISO8601("2017-09-15T23:59:59Z")
limit 1
return {
commit: p.vertices[2].hash,
date: p.vertices[2].date,
message: p.vertices[2].message,
author: p.vertices[1].email,
loc: p.vertices[3].stats.additions
}DEV
分期
发布于 2017-10-24 11:20:06
查询可能比较慢,因为筛选条件
filter
DATE_ISO8601(p.vertices[2].date) > DATE_ISO8601("2017-09-04T00:00:01Z"
and
DATE_ISO8601(p.vertices[2].date) < DATE_ISO8601("2017-09-15T23:59:59Z")不是在遍历过程中应用,而是仅在之后应用。这可能是由于筛选条件中的函数调用(对DATE_ISO8601)造成的。如果日期值以数字形式存储,能否检查下列筛选条件是否加快了查询速度:
filter
p.vertices[2].date > DATE_TIMESTAMP("2017-09-04T00:00:01Z"
and
p.vertices[2].date < DATE_TIMESTAMP("2017-09-15T23:59:59Z")修改后的筛选条件应允许在遍历中提取筛选条件,因此将更早地执行。
您可以在db._explain(<query string goes here>);或web接口的AQL编辑器中使用ArangoShell验证查询执行计划。
发布于 2018-10-18 11:17:28
可能有点晚了,但这会对某人有帮助的。使用DATE函数会使查询速度慢得多,因此,如果可能的话,删除DATE函数。例如,在这里输入图像描述

您可以看到,查询筛选器命令使用的日期函数是~7。如果不使用date函数,它的运行速度将超过0.5s。这两行将查询2018-09-29年的数据。
https://stackoverflow.com/questions/46898330
复制相似问题