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