ArangoDB慢速查询

时间:2017-10-23 20:52:48

标签: arangodb

我是ArangoDB的新用户,无法优化我的查询,并希望得到一些帮助。

我在下面提供的查询是一个真实的例子,我在我的开发人员数据库中遇到了 758.078 ms 但是在使用更大的数据集进行分段时需要 531.511 s

我还提供了我在开发和分段中遍历的每个边表的大小。任何帮助都非常感谢。

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

  • edge1:2,638
  • edge2:2,560
  • edge3:386

STAGING

  • edge1:5,438,811
  • edge2:5,544,028
  • edge3:423,545

2 个答案:

答案 0 :(得分:1)

由于过滤条件

,查询可能会很慢
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")

修改后的过滤条件应该允许在遍历中拉出过滤条件,因此它会更早执行。

您可以使用ArangoShell中的db._explain(<query string goes here>);或Web界面的AQL编辑器验证查询执行计划。

答案 1 :(得分:0)

可能会晚一些,但会帮助某人。使用DATE函数会使查询变慢得多,因此,如果可能,请删除DATE函数。例如 在此处输入图片描述enter image description here

您可以看到查询过滤器命令使用的Date函数约为7s。如果您不使用日期功能,它将运行约0.5秒。这两行将查询2018-09-29的数据。