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

标签 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:Restaurant{name:'KFC'}) 
RETURN p.name

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

谢谢你。

最佳答案

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

为了可读性,我会构造有问题的查询:

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

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

关于Neo4j:Cypher WHERE 子句与 MATCH 子句中的花括号 - 哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32118750/

相关文章:

neo4j - 通过 REST API 使用密码查询删除节点和关系

neo4j - 度中心性算法仅返回 0.0 作为分数

Neo4j 3.1.0 apoc.load.csv 问题

java - Cypher 挂起,我们如何修复/重新设计?

java - Spring Data Neo4j 将不同的类合并到一个 NodeEntity 中

neo4j - 关系的所有排列

java - 在 Neo4j 2 中的托管扩展上运行自动化测试

python - neo4j中节点之间的循环关系

java - Neo4j SDN 预填充实体

neo4j - 有没有办法返回特定标记节点的所有属性键的不同列表