避免使用 COLLECT(DISTINCT())
只要形成包含不同值的列表时,就会用到 COLLECT (DISTINCT ())。COLLECT 是一个聚合函数,分组是根据同一语句中投射的其他键来完成的。当使用 distinct 时,输入会被分成多个块,其中每个块表示一个要减少的组。随着组数的增加,性能将受到影响。在 Neptune 中,在实际收集/形成列表之前执行 DISTINCT 会更加高效。这可以直接在整个块的分组键上进行分组。
请考虑以下查询:
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