我需要在所有节点之间创建具有相同属性值的关系。
例如,我可以使用以下查询:
O(N)
但如果我有大约200k的节点,这个脚本运行的时间很长。
还有其他更快捷的方式来创建这种关系吗?
由于
答案 0 :(得分:2)
您首先编写的查询在所有人员节点配对之间创建了一个笛卡尔积,然后对每个配对进行过滤以找到实际相关的那些,然后创建关系。这是非常昂贵的,n ^ 2操作。
相反,您可能只需要遍历所有Person节点,并找到具有该属性的相应人员节点,并创建关系。
此外,如果您对相关属性有索引或唯一约束,您应该会看到性能大大提高,否则它将是每个比较对该标签中所有节点的节点扫描,这是慢查询的另一个因素
另外,我鼓励你尽可能不返回节点和关系,假设它在数千或数十万个结果附近。这可能是另一个因素。
match (p1:Person)
with p1
match (p2:Person)
where p2.someproperty = p1.someproperty and p1 <> p2
merge(p1)-[r:Relationship]-(p2)
你应该能够解析这个查询和旧查询,看看它们是如何运行的。