ArangoDB慢速查询

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

我是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
    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()验证查询执行计划

可能有点晚,但它会帮助某些人。使用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")