我有一个创建节点的查询,并将大量节点与它相关联。
示例:
CREATE (target :x {index:'a'})
WITH target
MERGE (x1:x {index:'1'}) MERGE (x1)-[:r]->(target)
MERGE (x2:x {index:'2'}) MERGE (x2)-[:r]->(target)
MERGE (x3:x {index:'3'}) MERGE (x3)-[:r]->(target)
...
MERGE (x1000:x {index:'1000'}) MERGE (x1000)-[:r]->(target)
我已经使用CREATE CONSTRAINT ON (x:x) ASSERT x.index IS UNIQUE
设置了索引。但是,此查询目前正在 ~45分钟完成。
我能做些什么来加快速度吗?从这里增加更多的CPU功率是唯一的选择吗?
答案 0 :(得分:3)
当您堆叠MERGE
或MATCH
这样的语句时,最终会遇到性能问题(与结果行相关)。对于这样的情况,请使用迭代循环:
CREATE (target :x {index:'a'})
WITH target
FOREACH(i IN RANGE(1, 1000)|
MERGE (a:x {index: toString(i)})
MERGE (a) - [:r] -> (target) )