Neo4j:Cypher WHERE Clause与MATCH条款中的Curly Braces - 哪个更好?

lim*_*imc 15 neo4j cypher

我是Neo4J的新手,过去几天一直在学习Cypher查询语言.

我意识到我可以这样写我的查询......

MATCH (b:Beverage)<-[:likes]-(p:Person)-[:likes]->(r:Restaurant) 
WHERE b.name = 'Beer' and r.name = 'KFC'
RETURN p.name
Run Code Online (Sandbox Code Playgroud)

......或者像这样......

MATCH (b:Beverage{name:'Beer'})<-[:likes]-(p:Person)-[:likes]->(r:Restaurant{name:'KFC'}) 
RETURN p.name
Run Code Online (Sandbox Code Playgroud)

哪种方法在性能方面更好?为什么?

谢谢.

Ste*_*ter 7

我很遗憾地说,但@ a-rodin的回复在这里是错误的:你的两个陈述都会产生相同的查询计划.您可以通过在语句前添加前缀EXPLAIN并比较查询计划来验证.

为了便于阅读,我将构建有问题的查询:

MATCH (p:Person)-[:likes]->(b:Beverage{name:'Beer'}),
      (p)-[:likes]->(r:Restaurant{name:'KFC'}) 
RETURN p.name
Run Code Online (Sandbox Code Playgroud)

在这里,查询读起来像一个简单的英语句子"匹配喜欢啤酒和喜欢肯德基餐厅的人".

  • 非常有用的帖子,谢谢。我不知道我可以用逗号分隔“ MATCH”语句。偶然发现了有关将“ EXPLAIN”用于调试目的的文章:http://neo4j.com/blog/neo4j-detecting-potential-typos-using-explain/ (2认同)