1
什么是运行的Neo4j不存在VS是空
MATCH (n) WHERE NOT exists(n.foo) RETURN n
和
MATCH (f) WHERE f.foo IS NULL RETURN f
我跑了两个查询,并得到了相同的结果之间的差异,是在性能上还是其他什么东西有什么区别?
什么是运行的Neo4j不存在VS是空
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评论的那样,通过网络传输。当然,可以肯定的是,你必须在更大的数据集上运行基准测试。
'存在()'是一个搜索,尽管它会被短路,因为'foo'为空。 'IS NULL'只是一个比较。 – EJP
任何想法哪一个应该更快? –
明显的比较,但我怀疑如果应用明显的优化,您将能够测量它。它将以网络传输时间为主。 – EJP