0

在一个 14 GB 的数据库中,我有一些 CITES 关系:

MATCH p=()-[r:CITES]->() RETURN count(r)

91

但是,当我跑步时

MATCH ()-[r:CITES]-() RETURN count(r)

它永远加载并最终在浏览器窗口重新加载时崩溃(neo4j 桌面)

4

2 回答 2

2

如果您为每个查询添加前缀,您可以看到每个查询将如何执行的差异EXPLAIN

用于第一个查询的模式是,计划器将在计数存储中找到该计数,计数存储是各种事物计数的事务更新存储。这是一个快速的常数时间查找。

另一种模式,当省略方向时,不会使用计数存储查找,实际上必须遍历图(从图中的每个节点开始),随着图的增长,这将需要很长时间。

至于这会返回什么,它实际上应该是图表中 :CITIES 关系数量的两倍,因为没有关系上的方向,每个单独的关系将被找到两次,因为起始节点和结束节点的相同路径同时切换适合给定的模式。

于 2018-06-30T22:05:51.090 回答
1

Neo4j 总是选择节点作为查询执行的起点。在您的查询中,查询引擎可能正在触及整个图表,因为您没有添加对节点属性、标签等的限制。

我认为您至少应该在模​​式中的第一个节点中指定一个标签。

MATCH (:Article)-[r:CITES]-() RETURN count(r)
于 2018-06-30T22:04:04.200 回答