

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

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

 在查询 IDs 中使用 custom 时，请务必在查询之外执行静态计算，并在参数中提供这些值。如果提供静态值，引擎便能更好地优化查找，避免扫描和筛选这些值。

 如果要在数据库中存在的节点之间创建边缘，则可以选择使用以下查询：

```
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'}]}
```

 在上述查询中，section 的 `id` 是在查询中计算的。由于计算是动态的，因此引擎无法静态内联 ID，最终会扫描所有 section 节点。然后，引擎对所需的节点执行后筛选。如果数据库中有许多 section 节点，这样做成本可能会很高。

 避免扫描和筛选所有 section 节点的更好方法是，在传递到数据库的 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'}]}
```