Neo4j计算关系复杂性的数量

时间:2013-06-03 01:02:51

标签: neo4j cypher

我想知道neo4j如何在后台解释这个请求:

start n=node(500) match n-[:relation_type]-() return count(*)

Neo4j是否对所有relation_type进行迭代以获得计数,或者是否为每个“类型关系的内部链接列表”维护所有元素的计数器?

我想知道每次添加一个属性时是否必须存储属性中的关系数,或者如果我可以快速检索它而不对所有关系进行neo4j迭代以获得当前计数。

(就像在mysql中:'select count(*)'不会抛出所有行,它知道表中的行数,neo4j是否知道给定节点的类型关系数?)

谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

再也不用了,您可以使用cypher profiler查看您的密码查询发生了什么:)

您可以在neo4j-shell中使用cypher,并在其前面加上“profile”关键字(仅适用于neo4j 1.9和2.0)。

您可以在webadmin界面中提供的neo4j-shell中尝试:

profile start n=node(500) match n-[:relation_type]-() return count(*);

我尝试了类似的东西并获得了以下输出:

==> ColumnFilter(symKeys=["  INTERNAL_AGGREGATEb12550d5-63c6-41c4-a4b5-86bba011c998"], returnItemNames=["count(*)"], _rows=1, _db_hits=0)
==> EagerAggregation(keys=[], aggregates=["(  INTERNAL_AGGREGATEb12550d5-63c6-41c4-a4b5-86bba011c998,CountStar)"], _rows=1, _db_hits=0)
==>   TraversalMatcher(trail="(n)-[  UNNAMED6:LIKE WHERE true AND true]->(  UNNAMED5)", _rows=25, _db_hits=26)
==>     ParameterPipe(_rows=1, _db_hits=0)

这让我觉得它正在遍历(从_db_hits = 0开始)!