在一个 14 GB 的数据库中,我有一些 CITES 关系:
MATCH p=()-[r:CITES]->() RETURN count(r)
91
但是,当我跑步时
MATCH ()-[r:CITES]-() RETURN count(r)
它永远加载并最终在浏览器窗口重新加载时崩溃(neo4j 桌面)
在一个 14 GB 的数据库中,我有一些 CITES 关系:
MATCH p=()-[r:CITES]->() RETURN count(r)
91
但是,当我跑步时
MATCH ()-[r:CITES]-() RETURN count(r)
它永远加载并最终在浏览器窗口重新加载时崩溃(neo4j 桌面)
如果您为每个查询添加前缀,您可以看到每个查询将如何执行的差异EXPLAIN
。
用于第一个查询的模式是,计划器将在计数存储中找到该计数,计数存储是各种事物计数的事务更新存储。这是一个快速的常数时间查找。
另一种模式,当省略方向时,不会使用计数存储查找,实际上必须遍历图(从图中的每个节点开始),随着图的增长,这将需要很长时间。
至于这会返回什么,它实际上应该是图表中 :CITIES 关系数量的两倍,因为没有关系上的方向,每个单独的关系将被找到两次,因为起始节点和结束节点的相同路径同时切换适合给定的模式。
Neo4j 总是选择节点作为查询执行的起点。在您的查询中,查询引擎可能正在触及整个图表,因为您没有添加对节点属性、标签等的限制。
我认为您至少应该在模式中的第一个节点中指定一个标签。
MATCH (:Article)-[r:CITES]-() RETURN count(r)