代码之家  ›  专栏  ›  技术社区  ›  eiko

Size()是否仍比Neo4J中的速度快?

  •  2
  • eiko  · 技术社区  · 7 年前

    我发现 this guide 关于NeN4J 2.2的查询调优,指南中的一个技巧是,当发现是否存在关系时,此查询:

    size((n)-[:DIRECTED]->()) <> 0
    

    比此查询快:

    EXISTS((n)-[:DIRECTED]->())
    

    对我来说,发现关系的总数比决定关系是否存在更快似乎是违反直觉的。我的问题是-有 EXISTS 在NEO4J的后期版本中进行了优化,因此不再需要此提示?如果不是,那么这两个函数之间的区别是什么使得size()更快?

    1 回复  |  直到 7 年前
        1
  •  3
  •   cybersam    7 年前

    CypHER查询规划者进行持续改进,所引用的性能差异(存在于NeN4J 2.2)不再存在。

    例如,使用 PROFILE 在neo4j 3.4.1中,这两个查询现在产生基本上相同的有效执行计划(使用degree count):

    PROFILE
    MATCH (n:Person) WHERE SIZE((n)-[:DIRECTED]->()) > 0
    RETURN count(*);
    
    PROFILE
    MATCH (n:Person) WHERE EXISTS((n)-[:DIRECTED]->())
    RETURN count(*);