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

时间:2018-11-02 11:48:33

标签: database performance arangodb aql

例如,我有此数据结构

{
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中没有关系,查询是否会运行得更快?

1 个答案:

答案 0 :(得分:2)

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

特别是在您的情况下

easyFilter只是字符串比较,

hardFilter由多个操作构造

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

省略的是索引的重要性。他们是真正的性能查询背后的人。在Handling Indexes中检查ArangoDB documentation,尤其是Which Index to use when

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