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