

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 更新/合併多個節點
<a name="best-practices-merge-multiple-nodes"></a>

 在多個節點上執行 `MERGE`或 `CREATE`查詢時，建議將 與單一 MERGE/CREATE 子句`UNWIND`搭配使用，而不是對每個節點使用 MERGE/CREATE 子句。由於每行需要最佳化，針對一個節點使用一個子句的查詢會導致執行計畫效率低下。這會導致查詢的大部分執行時間花費在靜態處理，而不是實際更新。

 每個節點有一個子句不是最佳的，因為它不會隨著節點數量的增加而擴展：

```
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')
```