

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

# 尽可能避免使用 WITH 子句
<a name="best-practices-content-7"></a>

 openCypher 中的 WITH 子句充当边界，在此之前的所有内容都执行完毕，然后将结果值传递给查询的其余部分。如果需要临时聚合或想要限制结果数量，则需要使用 WITH 子句，但除此之外，应该尽量避免使用 WITH 子句。一般指导是删除这些简单的 WITH 子句（不包括聚合、排序依据或限制），以使查询计划程序能够处理整个查询，从而创建全局最优计划。例如，假设您编写了一个查询来返回居住在 `India` 的所有人：

```
MATCH (person)-[:lives_in]->(city)
WITH person, city
MATCH (city)-[:part_of]->(country {name: 'India'})
RETURN collect(person) AS result
```

 在上述版本中，WITH 子句将模式 `(city)-[:part_of]->(country {name: 'India'})`（限制性更强）的位置限制在 `(person)-[:lives_in]->(city)` 之前。这使得该计划不太理想。对此查询的优化是删除 WITH 子句，让计划程序计算出最佳计划。

```
MATCH (person)-[:lives_in]->(city)
MATCH (city)-[:part_of]->(country {name: 'India'})
RETURN collect(person) AS result
```