我正在为我的应用程序评估ArangoDb。我有一个像文件系统一样的数据模型,有一个Items文档集合和一个关于Items的具有父子关系的itemparents边缘集合。
现在我想找到一个特定项目的所有子,具有特定的属性
示例:属性为Properties.Age.Value = 20的所有子元素
所以我在Items.Properties.Age上创建了一个哈希索引。值,并设计此AQL查询:FOR item
IN GRAPH_NEIGHBORS('ItemsGraph', 'Items/A',
{ direction : 'outbound',
includeData: true,
neighborExamples : { 'Properties.Age.Value': 20 }
})
RETURN { Id: item._key, Name: item.Name }
上面的查询工作得很好,但是没有使用索引,所以它执行一个完整的扫描Items集合测试属性。年龄。值过滤器。
如何设计查询,使其性能有效地使用索引和避免集合扫描?
谢谢
目前ArangoDB只能在图操作中使用边索引;
不使用 graph_neighbors 可以提供使用索引,但这样您就必须自己过滤邻居。
以顶点为中心的索引,它将提供这种索引支持,可能会在接下来的两个ArangoDB版本中出现。
[编辑]与此同时,在较新的ArangoDB版本中这是可能的。
graph_neighbors 被集成到遍历引擎中。现在,您将在Age
和_from
上创建一个组合索引。您应该使用db._explain()
来检查索引的使用情况。