1

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

1 回答 1

1

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

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

于 2013-09-02T21:18:48.810 回答