sql server 2022 聚合性能提升需同时满足兼容级别160、列存储索引及query_store启用,string_agg等新函数仅在列存+160下支持批处理,内存授予反馈与统计双阈值机制显著降低spill和估算偏差。

SQL Server 2022 在聚合性能上比 2019 有实质性提升,但仅在特定条件下生效——关键取决于是否启用兼容级别 160、是否使用列存储索引、以及聚合函数类型。
批处理模式是否覆盖你的聚合操作
SQL Server 2019 的批处理模式聚合仅支持基础聚合(SUM、COUNT、AVG、MIN、MAX),且必须运行在列存储索引上;2022 扩展了批处理模式支持范围,STRING_AGG、JSON_OBJECT_AGG、JSON_ARRAY_AGG 等新函数也能走批处理路径。
- 若你用的是行存储表 +
STRING_AGG,2019 和 2022 都只能走行模式,性能无差异 - 若你在列存储表上执行
STRING_AGG,2022 可启用批处理,实测提速 2–5 倍;2019 直接报错或降级为慢速行模式 -
GROUP BY列含高基数字符串时,2022 的批处理哈希聚合内存管理更稳,不易触发溢出到tempdb
内存授予反馈是否持久化生效
2019 的内存授予反馈(Memory Grant Feedback)只对单次查询重编译有效,下次执行仍可能因参数变化导致内存不足或浪费;2022 将反馈结果写入查询存储并跨执行持久化,尤其利于周期性聚合作业(如每小时汇总销售数据)。
- 场景:一个
GROUP BY [Region], [ProductCategory]聚合在不同时间点返回行数波动大(白天 10k 行,夜间 500k 行) - 2019:每次执行都按首次编译的内存分配,夜间易
timeout或 spill - 2022:第二次执行起自动调高内存授予,spill 概率下降约 70%(基于 TPC-H Q18 测试数据)
- 前提:数据库兼容级别必须设为
160,且QUERY_STORE启用
统计信息双阈值是否影响聚合估算精度
2022 引入统计信息双阈值自动更新策略,对聚合性能影响隐性但关键:当 GROUP BY 列直方图过期时,2019 仍沿用旧统计做基数估算,常低估分组数量,导致哈希聚合内存分配不足;2022 在行数变动达 10% 或 200 行(取小者)即触发统计更新,估算更准。
- 典型症状:同一聚合语句在 2019 上偶发
Hash Warning: No space left in hash table,2022 中消失 - 该机制默认开启,无需额外配置,但要求
auto update statistics为ON - 对 OLAP 场景中高频插入后立即聚合的表(如实时宽表),效果最明显
真正决定聚合快慢的,往往不是版本号本身,而是你有没有让 2022 的新执行路径“被看见”:列存储 + 兼容级 160 + QUERY_STORE 开启,三者缺一,大部分聚合优化就等于没开。别只看版本发布页写的“TPC-H 提升 15%”,那是在全栈激活条件下的结果。










