我正在为Web应用程序设计一个带有ArangoDB的数据库。 我写了以下AQL查询:
FOR result
IN Collection
FILTER result.field != 'undefined'
RETURN result
我为 field 添加了某种类型的索引,但查询不会使用任何索引。
在您看来,问题是什么? 我读到对于==运算符,我们可以使用哈希索引和< =或类似运算符跳过列表。
现在,做同样事情的正确方法是什么?
答案 0 :(得分:3)
(将我自己的评论从上面作为答案粘贴,以便将问题标记为已回答):
如果在属性上使用!=
运算符,则不会使用索引。
首先,ArangoDB中的哈希索引不支持这种类型的操作。
对于跳过列表索引,理论上可以将操作转换为result.field < 'undefined' OR result.field > 'undefined'
,因此理论上可以从这样的索引中查询两个不相交的范围。但一般来说,使用索引的目的是在查询中尽可能早地过滤掉尽可能多的文档,并且在很多情况下!=
不会导致大幅减少