neo4j CYPHER - 关系查询未完成

neo4j CYPHER - Relationship Query doesn't finish

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

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

91

然而,当我 运行

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

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

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

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

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

如果您在每个查询前加上 EXPLAIN.

,您可以看到每个查询执行方式的差异

第一个查询使用的模式是这样的,计划者将在计数存储中找到计数,这是一个事务性更新的各种事物计数存储。这是一个快速的恒定时间查找。

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

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