Neo4j:Cypher WHERE子句与MATCH子句中的花括号-哪个更好?

Neo4j:Cypher WHERE子句与MATCH子句中的花括号-哪个更好?,neo4j,cypher,Neo4j,Cypher,我是Neo4J新手,在过去几天里一直在学习Cypher查询语言 我意识到我可以这样写我的查询 MATCH (b:Beverage)<-[:likes]-(p:Person)-[:likes]->(r:Restaurant) WHERE b.name = 'Beer' and r.name = 'KFC' RETURN p.name MATCH (b:Beverage{name:'Beer'})<-[:likes]-(p:Person)-[:likes]->(r:Res

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

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

MATCH (b:Beverage)<-[:likes]-(p:Person)-[:likes]->(r:Restaurant) 
WHERE b.name = 'Beer' and r.name = 'KFC'
RETURN p.name
MATCH (b:Beverage{name:'Beer'})<-[:likes]-(p:Person)-[:likes]->(r:Restaurant{name:'KFC'}) 
RETURN p.name
火柴(b:饮料)(r:餐厅)
其中b.name='Beer'和r.name='KFC'
返回p.name
。。。或者像这样

MATCH (b:Beverage)<-[:likes]-(p:Person)-[:likes]->(r:Restaurant) 
WHERE b.name = 'Beer' and r.name = 'KFC'
RETURN p.name
MATCH (b:Beverage{name:'Beer'})<-[:likes]-(p:Person)-[:likes]->(r:Restaurant{name:'KFC'}) 
RETURN p.name
MATCH(b:饮料{name:'Beer'})(r:餐厅{name:'KFC'})
返回p.name
哪种方法在性能方面更好?为什么


谢谢。

我很抱歉地说,@a-rodin的回答在这里是错误的:您的两个语句都产生了非常相同的查询计划。您可以通过在语句前面加上
EXPLAIN
并比较查询计划来验证这一点

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

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

这里的查询读起来就像一个简单的英语句子“匹配一个喜欢啤酒和肯德基餐馆的人”

这些查询在性能上是相同的。这只是您喜欢如何编写查询的问题。是的,您是对的,我不知道
explain
命令。非常有用的帖子,谢谢。我不知道我可以用逗号分解
匹配
语句。偶然发现了这篇关于使用
EXPLAIN
进行调试的文章: