

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

# 避免使用 COLLECT(DISTINCT())
<a name="best-practices-content-11"></a>

**注意**  
从引擎版本 [1.4.7.0 开始](engine-releases-1.4.7.0.md)，不再需要此建议的重写。

 只要形成包含不同值的列表时，就会用到 COLLECT (DISTINCT ())。COLLECT 是一个聚合函数，分组是根据同一语句中投射的其他键来完成的。当使用 distinct 时，输入会被分成多个块，其中每个块表示一个要减少的组。随着组数的增加，性能将受到影响。在 Neptune 中，在实际列表之前执行 DISTINCT 要有效得多 collecting/forming 。这可以直接在整个块的分组键上进行分组。

 请考虑以下查询：

```
MATCH (n:Person)-[:commented_on]->(p:Post)
WITH n, collect(distinct(p.post_id)) as post_list
RETURN n, post_list
```

 编写此查询的更优方法是：

```
MATCH (n:Person)-[:commented_on]->(p:Post)
WITH DISTINCT n, p.post_id as postId
WITH n, collect(postId) as post_list
RETURN n, post_list
```