【问题标题】:Neo4j not exists vs is nullNeo4j 不存在 vs 为空
【发布时间】:2017-03-17 16:04:53
【问题描述】:

跑步有什么区别

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

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

我运行了两个查询并得到了相同的结果,性能或其他方面有什么不同吗?

【问题讨论】:

  • exists() 是一个搜索,虽然它会因为foo 为空而短路。 IS NULL 只是一个比较。
  • 知道哪一个应该更快吗?
  • 一个比较,很明显,但我怀疑如果应用明显的优化你将能够衡量它。会以网络传输时间为主。

标签: neo4j cypher


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-20
    • 2011-04-02
    • 2016-11-30
    • 2014-12-29
    • 2017-06-17
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多