例如,我有这个数据结构
{
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。
为了提高示例的性能,添加Hash或Skiplist索引easyFilter(取决于数据的类型/唯一性)肯定会有帮助。这两个索引也支持数组,但基于文档,这仅适用于包含值的简单数组,而不是对象。