2

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

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

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

我想知道每次添加一个属性时是否必须将关系数存储在属性中,或者我是否可以快速检索它而无需使 neo4j 迭代所有关系以获得当前计数。

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

谢谢你的帮助!

4

1 回答 1

2

不用再怀疑了,因为您可以使用 cypher profiler 来查看您的 cypher 查询发生了什么:)

您可以在 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 开头)!

于 2013-06-04T13:57:35.680 回答