2017-03-17 45 views
1

什么是运行的Neo4j不存在VS是空

MATCH (n) WHERE NOT exists(n.foo) RETURN n 

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

我跑了两个查询,并得到了相同的结果之间的差异,是在性能上还是其他什么东西有什么区别?

+0

'存在()'是一个搜索,尽管它会被短路,因为'foo'为空。 'IS NULL'只是一个比较。 – EJP

+0

任何想法哪一个应该更快? –

+0

明显的比较,但我怀疑如果应用明显的优化,您将能够测量它。它将以网络传输时间为主。 – EJP

回答

2

让我们创建一个小例子集:

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评论的那样,通过网络传输。当然,可以肯定的是,你必须在更大的数据集上运行基准测试。