假设一家公司拥有许多分支机构,并且按名称分支只属于一家公司。假设分支数量约为200,并且多个公司可以存在相同的分支名称,因此最多只有几十个分支使用相同的名称。
鉴于分支名称已编入索引,Neo4J可以更快地从索引中按名称加载分支节点,并通过与公司的关系“弄明白”或者更好地传递where子句中的.name ?我试图谷歌这种层次结构安排和手册中的索引集成,但这种情况让我望而却步,我相信超级聪明的人才知道。
start branch=node:branchIndex(name="some string"),
company=node(nodeId)
match company-[r:owns]->branch
return branch
start company = node(nodeId)
match company-[r:owns]->branch
where branch.name = "some string")
return branch
答案 0 :(得分:1)
嗯,索引查找比遍历一个属性花费大约1000倍。对于像(company)-[:owns]->(branch)
这样的较小遍历,它可能会扫描少于1000个项目,我会说WHERE子句比索引查找便宜得多。
在Neo4j 2.0中,自动索引中将有足够的统计信息仅使用WHERE,并且如果查询统计信息更有效,则可以自动切换到索引查找。