FILTER 语句的顺序是否会影响 arangoDB 中的查询性能?

Does the order of FILTER statement affect the performance of query in arangoDB?

比如我有这个数据结构

{
easyFilter:1111,
hardFilter:[
 {id:1},
 {id:2},
...
]
}

如果我使用的查询是这样的

For u in collection
Filter u.easyFilter=1111 AND "somevalue" IN FLATTEN(u.hardFilter[*].id)
return u

如果我将 easyFilter 放在第一位,查询 运行 会更快吗,因为它只是在对象的第一级进行字符串比较,或者在 arango 中无关紧要?

是的,FILTER 语句的顺序确实会影响查询的性能。

特别是在你的情况下,

easyFilter只是字符串比较,

hardFilter 是由多个操作构成的

  1. 迭代数组+获取定义键的值
  2. 展平该数组
  3. 检查数组是否包含定义的值

省略的是索引的重要性。他们是真正执行查询的幕后黑手。检查 Handling Indexes in ArangoDB documentation, especially Which Index to use when.

为了提高示例的性能,添加 Hash or Skiplist 索引 easyFilter 绝对有帮助(取决于数据的类型/唯一性)。这两个索引也支持数组,但根据文档,这仅适用于包含值的简单数组,而不适用于对象。