在一个14 GB的数据库中,我有一些CITES关系:
MATCH p=()-[r:CITES]->() RETURN count(r)
91
但是,当我跑步
MATCH ()-[r:CITES]-() RETURN count(r)
它会永久加载,最终会因重新加载浏览器窗口(neo4j桌面)而崩溃
答案 0 :(得分:2)
如果在每个查询前面加上EXPLAIN
,则可以看到每个查询执行方式的差异。
第一个查询所使用的模式使得计划者可以在计数存储中找到该计数,计数存储是各种事物的计数的事务更新存储。这是快速的恒定时间查找。
当省略方向时,另一种模式将不使用计数存储查找,并且实际上必须遍历图形(从图形中的每个节点开始),并且随着图形的增长将花费很长时间。 / p>
关于返回的结果,它实际上应该是图形中:CITIES关系的数量的两倍,因为如果没有关系的方向,则每个单独的关系都会被发现两次,因为相同的路径以开始和结束为起点切换的节点都符合给定的模式。
答案 1 :(得分:1)
Neo4j始终选择节点作为查询执行的起点。在查询中,由于您没有在节点属性,标签等上添加限制,因此查询引擎可能正在触摸整个图形。
我认为您应该至少在模式的第一个节点中指定标签。
Visibility.GONE