【问题标题】:ArangoDB Slow QueryArangoDB 慢查询
【发布时间】:2017-10-23 20:52:47
【问题描述】:

我是 ArangoDB 的新手,在优化我的查询时遇到了问题,希望能得到一些帮助。

我在下面提供的查询是我正在努力解决的一个真实示例,在我的开发数据库上 758.078 毫秒,但在暂存时,使用更大的数据集,它需要 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
    }

开发

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

分期

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

【问题讨论】:

    标签: arangodb


    【解决方案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(&lt;query string goes here&gt;); 或从 Web 界面的 AQL 编辑器验证查询执行计划。

    【讨论】:

    • 嘿,非常感谢。我如何将过滤器应用于遍历?我不知道我见过这样的例子,所以不知道如何重组那部分查询。
    • 我认为您可以将过滤条件替换为我建议的条件。但是,这仅在您的日期值存储为数字时才有效。然后,您可以使用 Web 界面检查查询的执行计划。执行计划应该改变,在它底部的“遍历”部分,过滤条件应该出现。而在原始查询中,过滤条件不应显示在“遍历”部分中。
    【解决方案2】:

    可能有点晚,但它会帮助某人。使用 DATE 函数会使查询速度变慢,因此如果可能,请删除 DATE 函数。例如 在此处输入图片描述

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      相关资源
      最近更新 更多