例如,我有这个数据结构

{
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中这无关紧要?

最佳答案

是的,筛选语句的顺序确实会影响查询的性能。
尤其是在你的情况下
easyFilter只是字符串比较,
hardFilter是由多个操作构造的
迭代数组+获取已定义键的值
使数组变平
检查数组是否包含定义的值
省略的是索引的重要性。他们是真正的performat查询的幕后推手。检查Handling Indexes中的ArangoDB documentation,尤其是Which Index to use when
为了提高示例的性能,添加HashSkiplist索引easyFilter(取决于数据的类型/唯一性)肯定会有帮助。这两个索引也支持数组,但基于文档,这仅适用于包含值的简单数组,而不是对象。

10-06 04:24