我有两个节点。第一种是"b1“,有1600万种关系,第二种是"b”- 17k。标签B是在id属性上索引的。
如果它们有直接关系,我要检索的查询是:
profile
MATCH (b:B {id :'D006019' }) WITH b
MATCH (b1:B {id :'D006801' }) WITH b, b1
MATCH (b)-[r]-(b1) RETURN r几点意见:
下面是一个更快的查询:
profile
MATCH (bB {id :'D006019' }) WITH b
MATCH (b1:B) WHERE b1.id IN ['D006801' ] WITH b, b1
MATCH (b)-[r]-(b1) RETURN r 因此,现在"b1“在" in”子句中,neo4j开始在"b“上扩展,后者只有17k关系,查询执行时间约为100 ms。
我的问题是:能否以neo4j在连接较少的节点上自动扩展的方式编写查询。
发布于 2017-10-26 18:18:58
有时你必须给塞弗一些提示:
MATCH (b:B {id :'D006019'})
USING INDEX b:B(id)
MATCH (b1:B {id :'D006801'})
USING INDEX b1:B(id)
MATCH (b)-[r]-(b1)
RETURN r;上面的查询告诉Cypher,它应该对前两个匹配中的每一个使用:B(id)索引。在没有提示的情况下,规划者目前倾向于只使用索引一次。
https://stackoverflow.com/questions/46957103
复制相似问题