size()在neo4j中仍然比EXISTS快吗



我找到了这本关于Neo4j 2.2查询调优的指南,其中一个提示是,当查找是否存在关系时,这个查询:

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

比这个查询快:

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

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

Cypher查询规划者不断改进,引用的性能差异(neo4j 2.2中存在(不再存在。

例如,在neo4j 3.4.1.中使用PROFILE,这两个查询现在基本上产生了相同的高效执行计划(使用次数计数(:

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

最新更新