有什么更好的方法来表达这个Neo4J Cypher 2查询?

时间:2014-03-17 15:39:25

标签: neo4j cypher

我的查询执行时间太长:

MATCH (s:Person{id:"103"}), s-[rel]-a WITH rel, s 
MATCH c1-[:friend]->s<-[:friend]-c2, c1-[fol:follows]->c2 
RETURN DISTINCT c1,c2;

然而,当我把它分成两部分时:

MATCH (s:Person{id:"103"}), s-[rel]-a 
RETURN rel, s;

MATCH (s:Person{id:"103"}), 
c1-[:friend]->s<-[:friend]-c2, c1-[fol:follows]->c2 
RETURN DISTINCT c1,c2;

它们要快得多。

为什么将rel和s传递给下一个查询会使它变得如此慢?

(我问,因为示例查询只是较大的一部分,我将rel和s传递给WITH而不是RETURN到查询的下一部分)

谢谢

2 个答案:

答案 0 :(得分:2)

第一个MATCH中找到的每个节点和关系的第一个循环:

MATCH (s:Person{id:"103"}), s-[rel]-a WITH rel, s 

涉及该节点的每个关系的一行。我会使用第三个查询,因为从不使用rel。

答案 1 :(得分:0)

也许你试着&#34;个人资料&#34;在Neo4J控制台中的查询,它将为您提供查询如何在服务器中实际执行的一些线索。 顺便问一下,为什么你需要通过&#34; rel&#34;因为它从未使用过