

# Avoid doing \$1id computations in the query
<a name="best-practices-content-16"></a>

 When using custom IDs in the queries, always perform static computations outside the queries and provide these values in the parameters. When static values are provided, the engine is better able to optimize lookups and avoid scanning and filtering these values. 

 If you want to create edges between nodes that are existing in the database, one option could be: 

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

 With parameters: 

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

 In the query above, the `id` of the section is being computed in the query. Since the computation is dynamic, the engine cannot statically inline ids and ends up scanning all section nodes. The engine then performs post-filtering for required nodes. This can be costly if there are many section nodes in the database. 

 A better way to achieve this is to have `Sec-` prepended in the ids being passed into the database: 

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

 With parameters: 

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