在 Cypher 中对 MATCH 子句使用约束的差异
Difference in use of constrains to a MATCH-clause in Cypher
这两个查询有什么区别吗:
MATCH (p:Person {name:'Alice'})
RETURN p
和
MATCH (p:Person)
WHERE p.name = 'Alice'
RETURN p
我知道结果是一样的,
但是查询的执行方式有什么不同吗?
这两个查询没有区别,执行计划是一样的。
第一个只是第二个版本的语法糖。
干杯
这个问题已经有了一个公认的答案,但是对于其他类似"Is query X and query Y the same?"的问题,可以看看他们的执行计划来比较。
要在不使用 运行 查询的情况下查看执行计划,请在查询前添加 EXPLAIN
并添加 运行,您将直观地了解哪些运算符以及哪些运算符顺序,将用于计算结果。这样做的缺点是行数的估计可能会关闭,因此您可以通过在查询前添加 PROFILE
来获得更具体的结果,这实际上是 运行 查询。然后通过比较运算符,以及每个运算的结果,可以得出查询X和查询Y是否相同。
在你的两个查询中,执行计划看起来像
这两个查询有什么区别吗:
MATCH (p:Person {name:'Alice'})
RETURN p
和
MATCH (p:Person)
WHERE p.name = 'Alice'
RETURN p
我知道结果是一样的,
但是查询的执行方式有什么不同吗?
这两个查询没有区别,执行计划是一样的。
第一个只是第二个版本的语法糖。
干杯
这个问题已经有了一个公认的答案,但是对于其他类似"Is query X and query Y the same?"的问题,可以看看他们的执行计划来比较。
要在不使用 运行 查询的情况下查看执行计划,请在查询前添加 EXPLAIN
并添加 运行,您将直观地了解哪些运算符以及哪些运算符顺序,将用于计算结果。这样做的缺点是行数的估计可能会关闭,因此您可以通过在查询前添加 PROFILE
来获得更具体的结果,这实际上是 运行 查询。然后通过比较运算符,以及每个运算的结果,可以得出查询X和查询Y是否相同。
在你的两个查询中,执行计划看起来像