ArangoDB慢速查询
我是ArangoDB的新手,在优化查询时遇到困难,希望能得到一些帮助 我在下面提供的查询是我正在努力解决的一个真实示例,758.078 ms在我的dev数据库上,但是在登台时,对于更大的数据集,需要531.511 s 我还将提供在dev和staging中遍历的每个边缘表的大小。非常感谢您的帮助ArangoDB慢速查询,arangodb,Arangodb,我是ArangoDB的新手,在优化查询时遇到困难,希望能得到一些帮助 我在下面提供的查询是我正在努力解决的一个真实示例,758.078 ms在我的dev数据库上,但是在登台时,对于更大的数据集,需要531.511 s 我还将提供在dev和staging中遍历的每个边缘表的大小。非常感谢您的帮助 for doc in document filter repo._key == "my-key" for v, e, p in 3 any doc edge1, edge2, edge3
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
}
用于文档中的文档
筛选器repo.\u key==“我的密钥”
对于3中的v、e、p,任何文档边1、边2、边3
选项{uniqueVertices:'global',bfs:true}
过滤日期_ISO8601(p.vertices[2].DATE)>日期_ISO8601(“2017-09-04T00:00:01Z”)
和日期ISO8601(p.vertices[2].DATE)
DEV
- edge1:2638
- 边缘2:2560
- edge3:386
- edge1:5438811
- edge2:5544028
- edge3:423545
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")
修改后的过滤条件应该允许在遍历中拉取过滤条件,因此它会更早执行
您可以使用
db.\u explain()验证查询执行计划在ArangoShell中或从web界面的AQL编辑器中进行编码>。可能有点晚,但它会帮助某些人。使用DATE函数将使查询速度大大减慢,因此如果可能,请删除DATE函数。例如
在此处输入图像描述
您可以看到queryfilter命令使用的日期函数是~7s。如果不使用日期功能,它的运行速度将超过~0.5s。这两行将查询2018-09-29的数据。嘿,非常感谢。如何将筛选器应用于遍历?我不知道我见过这样的例子,所以我不确定如何重新构造这段查询。我想你可以用我提出的过滤条件替换你的过滤条件。但是,只有当您的日期值存储为数字时,这才有效。然后可以使用web界面检查查询的执行计划。执行计划应该改变,在它底部的“遍历”部分,过滤条件应该显示出来。而在原始查询中,过滤条件不应显示在“遍历”部分。
filter
p.vertices[2].date > DATE_TIMESTAMP("2017-09-04T00:00:01Z"
and
p.vertices[2].date < DATE_TIMESTAMP("2017-09-15T23:59:59Z")