性能 – Cypher:使用WHERE子句或MATCH属性定义进行完全匹配?

在Neo4j(3.0版)中,以下查询返回相同的结果:

1. MATCH (a:Label) WHERE a.property = "Something" RETURN a
2. MATCH (a:Label {property: "Something"}) RETURN a

在使用一些大型数据集时,我注意到(并使用EXPLAIN和PROFILE进行验证),对于某些情况,第二个查询执行得越来越好.虽然存在两个版本同等执行的其他实例,但我还没有看到第一个版本执行得更好的情况.

neo4j文档和教程也是分开的.两者之间没有明确的比较.文档和tuts使用两个版本,通常倾向于第一个版本(可能因为非精确匹配只能使用WHERE子句完成).但指南还指出,越早缩小搜索范围,搜索速度越快.

>我是对的,两个版本总会返回相同的结果吗?
>我是否正确,第二个版本通常会表现更好,因为它会缩小搜索范围?

最佳答案 >是的

>不,两者都基本上评估了相同的查询计划.由于Neo4j使用基于成本的优化器,因为优化器考虑更改(可能现在有更多数据,因此索引查找比NodeByLabelScan更便宜),查询计划可能会随着时间的推移而发生变化.

点赞