具有索引的Neo4J密码 - 哪种方法

时间:2013-09-01 06:01:46

标签: neo4j cypher

假设一家公司拥有许多分支机构,并且按名称分支只属于一家公司。假设分支数量约为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

1 个答案:

答案 0 :(得分:1)

嗯,索引查找比遍历一个属性花费大约1000倍。对于像(company)-[:owns]->(branch)这样的较小遍历,它可能会扫描少于1000个项目,我会说WHERE子句比索引查找便宜得多。

在Neo4j 2.0中,自动索引中将有足够的统计信息仅使用WHERE,并且如果查询统计信息更有效,则可以自动切换到索引查找。