You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GROUP BY与窗口函数搭配DISTINCT的性能对比探讨

窗口函数搭配DISTINCT与GROUP BY的性能等价场景

存在场景使得SELECT DISTINCT + 窗口聚合的查询表现不逊于甚至等同于GROUP BY版本,具体如下:

  • 当表已按TEAM列做物理有序存储(比如聚簇索引以TEAM为键)时:
    窗口函数AVG(SCORE) OVER(PARTITION BY TEAM)可以直接按有序分区累加计算平均值,后续的DISTINCT只是做简单去重;而GROUP BY TEAM版本如果依赖同样的有序结构,优化器会生成几乎一致的执行计划,两者性能持平甚至窗口函数版本略优(部分数据库中避免了分组排序的额外开销)。

  • 当数据库优化器能识别语义等价性时:
    像PostgreSQL、SQL Server这类优化器成熟的数据库,当DISTINCT的字段和窗口函数的分区键完全匹配时,会自动把SELECT DISTINCT + 窗口聚合的逻辑等价转换为GROUP BY逻辑,生成完全相同的执行计划,此时两者性能没有差异。

  • 若后续查询有扩展保留原始行字段的需求:
    虽然当前示例只取TEAM和平均得分,但如果之后要添加原表的其他非聚合字段,窗口函数版本可以直接调整SELECT列表保留这些字段,而GROUP BY版本需要额外关联原表获取数据,这时窗口函数+DISTINCT的写法性能会明显优于GROUP BY(哪怕当前场景下两者性能一致)。

内容的提问来源于stack exchange,提问作者djc55

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:51:00