

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

# 避免在查詢中進行 \$1id 運算
<a name="best-practices-content-16"></a>

 在查詢中使用自訂 IDs 時，請一律在查詢之外執行靜態運算，並在參數中提供這些值。提供靜態值時，引擎更能夠最佳化查詢，並避免掃描和篩選這些值。

 如果您想要在資料庫中現有的節點之間建立邊緣，其中一個選項可能是：

```
UNWIND $sections as section
MATCH (s:Section {`~id`: 'Sec-' + section.id})
MERGE (s)-[:IS_PART_OF]->(g:Group {`~id`: 'g1'})
```

 使用參數：

```
parameters={sections: [{id: '1'}, {id: '2'}]}
```

 在上述查詢中，正在查詢中計算 區段`id`的 。由於運算是動態的，因此引擎無法靜態內嵌 ID，最終會掃描所有區段節點。然後，引擎會針對所需的節點執行後篩選。如果資料庫中有許多區段節點，這可能會很昂貴。

 達成此目的更好的方法是在要傳遞至資料庫的 ID 前面`Sec-`加上 ：

```
UNWIND $sections as section
MATCH (s:Section {`~id`: section.id})
MERGE (s)-[:IS_PART_OF]->(g:Group {`~id`: 'g1'})
```

 使用參數：

```
parameters={sections: [{id: 'Sec-1'}, {id: 'Sec-2'}]}
```