运行
之间有什么区别MATCH (n) WHERE NOT exists(n.foo) RETURN n
和
MATCH (f) WHERE f.foo IS NULL RETURN f
我运行了两个查询并获得了相同的结果,性能或其他方面的差异是什么?
答案 0 :(得分:3)
让我们创建一个小的示例数据集:
CREATE (n1 {foo: 'bar'}), (n2)
我们使用PROFILE
来显示执行计划和每个步骤中的行数。
对于查询MATCH (n) WHERE NOT exists(n.foo) RETURN n
:
对于查询MATCH (f) WHERE f.foo IS NULL RETURN f
:
执行计划显示实际行数(在处理步骤之间传输)和数据库命中数相同。过滤条件有点不同,但我不希望有任何显着差异 - 执行时间可能由磁盘访问控制,并且正如EJP评论的那样,通过网络传输。当然,当然,您必须在更大的数据集上运行基准测试。