Neo4j不存在vs是null

时间:2017-03-17 01:07:43

标签: neo4j cypher

运行

之间有什么区别
MATCH (n) WHERE NOT exists(n.foo) RETURN n

MATCH (f) WHERE f.foo IS NULL RETURN f

我运行了两个查询并获得了相同的结果,性能或其他方面的差异是什么?

1 个答案:

答案 0 :(得分:3)

让我们创建一个小的示例数据集:

CREATE (n1 {foo: 'bar'}), (n2)

我们使用PROFILE来显示执行计划和每个步骤中的行数。

对于查询MATCH (n) WHERE NOT exists(n.foo) RETURN n

enter image description here

对于查询MATCH (f) WHERE f.foo IS NULL RETURN f

enter image description here

执行计划显示实际行数(在处理步骤之间传输)和数据库命中数相同。过滤条件有点不同,但我不希望有任何显着差异 - 执行时间可能由磁盘访问控制,并且正如EJP评论的那样,通过网络传输。当然,当然,您必须在更大的数据集上运行基准测试。