Cypher:使用WHERE子句还是MATCH属性定义进行精确匹配?

5

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

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

在处理一些大数据集时,我注意到(并使用EXPLAINPROFILE进行了验证),对于某些实例而言,第二个查询的性能更好、更快。虽然也存在两种版本表现相同的情况,但我还没有看到第一个版本表现更好的情况。

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

  1. 我是否正确地认为这两个版本总是返回相同的结果?
  2. 我是否正确地认为第二个版本通常表现更好,因为它可以更早地缩小搜索范围?
1个回答

3
  1. 是的
  2. 不是,它们都基本上评估为相同的查询计划。由于Neo4j使用基于成本的优化器,因此查询计划可能随时间而变化,因为优化器会考虑更改(也许现在有更多的数据,因此索引查找比NodeByLabelScan更便宜)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接