Neo4j:如何通过多次合并加速查询?

时间:2016-10-02 13:42:51

标签: neo4j

我有一个创建节点的查询,并将大量节点与它相关联。

示例:

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功率是唯一的选择吗?

1 个答案:

答案 0 :(得分:3)

当您堆叠MERGEMATCH这样的语句时,最终会遇到性能问题(与结果行相关)。对于这样的情况,请使用迭代循环:

CREATE (target :x {index:'a'})
WITH target
FOREACH(i IN RANGE(1, 1000)|
    MERGE (a:x {index: toString(i)})
    MERGE (a) - [:r] -> (target)  )