

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 更新/合并多个节点
<a name="best-practices-merge-multiple-nodes"></a>

 在多个节点上运行`MERGE`或`CREATE`查询时，建议将与单个 MERGE/CREATE 子句结合使用，而不是为每个节点使用 MERGE/CREATE 子句。`UNWIND`对一个节点使用一个子句的查询会导致执行计划效率低下，因为每行都需要优化。这导致查询的大部分执行时间都花在静态处理上，而不是花在实际更新上。

 每个节点一个子句并不是最优方法，因为它不能随着节点数量的增加而扩展：

```
MERGE (p1:Person {name: 'NameA'})
ON CREATE SET p1 += {prop1: 'prop1V1', prop2: 'prop2V1'}
MERGE (p2:Person {name: 'NameB'})
ON CREATE SET p2 += {prop1: 'prop1V2', prop2: 'prop2V2'}
MERGE (p3:Person {name: 'NameC'})
ON CREATE SET p3 += {prop1: 'prop1V3', prop2: 'prop1V3'}
```

 结合使用一个`UNWIND` MERGE/CREATE 子句可以实现相同的行为，但可以获得更优的执行计划。考虑到这一点，更改后的查询将如下所示：

```
## If not using custom id for nodes/relationship
UNWIND [{name: 'NameA', prop1: 'prop1V1', prop2: 'prop2V1'}, {name: 'NameB', prop1: 'prop1V2', prop2: 'prop2V2'}, {name: 'NameC', prop1: 'prop1V3', prop2: 'prop1V3'}] AS props
MERGE (p:Person {name: props.name})
ON CREATE SET p = props

## If using custom id for nodes/relationship
UNWIND [{`~id`: '1', 'name': 'NameA', 'prop1: 'prop1V1', prop2: 'prop2V1'}, {`~id`: '2', name: 'NameB', prop1: 'prop1V2', prop2: 'prop2V2'}, {`~id`: '3', name: 'NameC', prop1: 'prop1V3', prop2: 'prop1V3'}] AS props
MERGE (p:Person {`~id`: props.id})
ON CREATE SET p = removeKeyFromMap(props, '~id')
```