运行有什么区别
MATCH (n) WHERE NOT exists(n.foo) RETURN n
和
MATCH (f) WHERE f.foo IS NULL RETURN f
我运行了两个查询并得到了相同的结果,是性能上的差异还是其他原因?
最佳答案
让我们创建一个小示例数据集:
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 评论的那样,由网络传输决定。当然,可以肯定的是,您必须在更大的数据集上运行基准测试。
关于Neo4j 不存在 vs 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42847470/