ArangoDB 慢查询

标签 arangodb

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

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

开发

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

暂存

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

最佳答案

查询可能很慢,因为过滤条件

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>); 验证查询执行计划在 ArangoShell 或 Web 界面的 AQL 编辑器中。

关于ArangoDB 慢查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46898330/

相关文章:

spring - 在 Spring Data ArangoDB 中使用地理空间查询时出现内存不足异常

arangodb - arangoimp,如何指定数据库名称?

Java 驱动程序抛出错误

arangodb - 在ArangoDB中向上遍历

java - 在属性中将 https 主机指定为 arangodb 主机

arangodb - 无法从 ArangoDB 2.2.0 中的节点/边集合创建图形

arangodb - 如何从 ArangoDB 集合中接收超过 1000 个文档?

http - ArangoDB - 图创建基础

arangodb - ArangoDB是否有分面搜索?

arangodb - 什么时候用 RocksDB,什么时候用 ArangoDB 中的 MMFiles 存储引擎?