具有多个启动节点的neo4j cypher性能
在上面的grpah中,查询的目的具有多个启动节点的neo4j cypher性能,neo4j,cypher,Neo4j,Cypher,在上面的grpah中,查询的目的 start n=node(1) match n-[:KNOWS]->m-[:KNOWS]->p where p.name='Cypher' return n, m, p 就是找到m,这样Neo认识m,m认识Cypher 同样,也可以通过以下查询实现- start n=node(1), p=node(4) match n-[:KNOWS]->m-[:KNOWS]->p return n, m, p 第一个使用where条件,第二个使用多
start n=node(1) match n-[:KNOWS]->m-[:KNOWS]->p where p.name='Cypher' return n, m, p
就是找到m,这样Neo认识m,m认识Cypher
同样,也可以通过以下查询实现-
start n=node(1), p=node(4) match n-[:KNOWS]->m-[:KNOWS]->p return n, m, p
第一个使用where条件,第二个使用多个开始节点
从性能的角度来看,哪一个应该运行得更快,可能在什么情况下
我曾经遇到过多个启动节点的性能问题,而我认为,从逻辑上讲,将它作为启动节点,而不是条件应该更快的地方
根据不同的场景,有没有关于使用哪种方法的规则。到目前为止,我们已经开发了cypher语言,在1.8中添加了更新功能 在Neo4j 1.9中,我们将重点关注cypher性能 到目前为止,具有单个起点的模式匹配器比具有多个起点的模式匹配器速度更快。但是,如果仅在事实发生后进行过滤(如在第一次查询中),它们的执行速度可能仍然较慢(取决于结果卷)
但这将在下一版本中发生变化。我认为到目前为止,我能给你的最好建议是用你的真实数据集来分析查询(如果你还没有预期的数据,就编写数据生成器)。到目前为止,我们已经在使用cypher语言,在1.8中添加了更新功能 在Neo4j 1.9中,我们将重点关注cypher性能 到目前为止,具有单个起点的模式匹配器比具有多个起点的模式匹配器速度更快。但是,如果仅在事实发生后进行过滤(如在第一次查询中),它们的执行速度可能仍然较慢(取决于结果卷)
但这将在下一版本中发生变化。我认为目前为止我能给你的最好建议是使用真实的数据集分析查询(如果你还没有预期的数据,请编写数据生成器)。Cypher在Neo4j 1.9中为两个起点使用了新的双向模式匹配器。M01可能想尝试一下并报告。Cypher正在使用新的,Neo4j 1.9.M01中用于两个起点的双向模式匹配器可能需要尝试并报告。