我正在运行neo4j 2.2.4
我有一个大的合并链,匹配/创建一堆节点和关系,以及设置属性。
我的所有节点合并都基于一个索引。
对于几乎为空的数据库(因此所有合并将最终创建节点/关系),我得到以下时间:
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 40
Relationships created: 87
Properties set: 62
Labels added: 40
1557 ms
Total database accesses: 688
现在40个节点和87个关系并不多,我希望查询的执行速度比1.5秒快得多。
以下是具有相似风格的较大查询的时间安排。
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 214
Relationships created: 454
Properties set: 469
Labels added: 214
298711 ms
我对这有多慢感到有些惊讶。在这里有什么我可能做错了吗?
编辑:
查询的开头看起来像这样,其余的风格非常相似:
merge (e1:Label { id: "e1" })
merge (e2:Label { id: "e2" })
merge (e1)-[:R1]->(e2)
merge (e3:Label { id: "e3" })
merge (e2)-[r1:R2]->(e3)
on create set r1.p = "v"
on match set r1.p = "v"
merge (e4:Label { id: "e4" })
merge (e4)-[:R1]->(e3)
merge (e1)-[:R2]->(e4)
merge (e5:Label { id: "e5" })
merge (e2)-[r2:R3]->(e5)
on create set r2.p = "v"
on match set r2.p = "v"
merge (e6:Label { id: "e6" })
merge (e6)-[:R1]->(e5)
merge (e1)-[:R3]->(e6)
索引
ON :Label(id) ONLINE (for uniqueness constraint)
约束
ON (e:Label) ASSERT e.id IS UNIQUE
编辑2:
此处捕获~40个节点查询的配置文件: https://gist.github.com/haoyangnz/c59b99a9a99a87edf00a
由于StackOverflowError
,~200节点查询的配置文件失败答案 0 :(得分:2)
您可以尝试合并所有节点以及合并关系之后。喜欢
Merge (a:A{id:1}), (b:B{id:2}) with a, b Merge (a)-[:RELATES_TO]->(b)
。
通过分离合并,可能更容易找到问题。您可能需要id的索引,就像我的情况一样。但我不确定它是否有帮助。
答案 1 :(得分:0)
我在console.neo4j.org上尝试了你的示例查询,它在几毫秒内完成:
查询耗时187毫秒,没有返回任何行。更新了图表 - 创建了6 节点和7个关系设置8个属性结果详细信息
你在运行什么操作系统?您是否更改了任何默认设置?