SQL数据库聚合执行路径_单阶段与多阶段
发布时间 - 2026-01-10 00:00:00 点击率:次SQL聚合操作执行路径分单阶段与多阶段,取决于数据规模、并行能力、内存限制及优化器决策;单阶段在单节点完成哈希聚合,适用于小数据;多阶段含Partial与Final聚合,用于分布式或大数据场景。
SQL数据库中的聚合操作(如 COUNT、SUM、GROUP BY)执行路径是否走单阶段还是多阶段,主要取决于数据规模、并行能力、内存限制以及查询优化器的决策,而非语法本身。
单阶段聚合执行路径
单阶段聚合指所有分组与计算在同一个执行节点(或单个算子)中完成,通常适用于小数据集或本地执行场景。
- 典型场景:表数据量小(如万级以下)、无分布式环境(如 SQLite、单机 MySQL)、或显式禁用并行(
SET parallel_setup_cost = 999999) - 执行流程:扫描全表 → 建立哈希表(key=分组列,value=聚合值)→ 一次遍历完成累加 → 输出结果
- 优势是延迟低、无网络/序列化开销;但易受内存限制,大数据量下可能触发磁盘哈希(spill),反而变慢
多阶段聚合执行路径
多阶段聚合将聚合拆分为局部聚合(Partial Aggregate)和全局聚合(Final Aggregate)两个及以上阶段,常见于分布式或并行查询引擎(如 PostgreSQL 并行查询、Spark SQL、Presto/Trino、ClickHouse)。
- 第一阶段(Partial):各 worker 独立扫描数据分片,对本地数据做初步聚合(如
COUNT(*) → COUNT(*)_partial) - 第二阶段(Merge/Final):将各 partial 结果按 gr
oup key 重新分发(Shuffle),再合并(如 SUM(count_partial)) - 部分引擎支持三阶段(如先 local + shuffle + final),用于高基数
GROUP BY场景,缓解 shuffle 压力
影响执行路径的关键因素
优化器不会随意选择阶段数,而是基于代价模型权衡。以下因素直接影响判断:
- 数据分布与分组基数:低基数(如按“省份”分组)倾向单阶段;高基数(如按“用户ID”分组且亿级)更可能启用多阶段避免内存爆炸
-
并行度配置:PostgreSQL 中
max_parallel_workers_per_gather > 0且表足够大时,GROUP BY可能自动转为 partial + final -
聚合函数性质:可分割聚合(
SUM、COUNT、MAX)天然支持多阶段;不可分割的(如STRING_AGG(DISTINCT ...)或窗口函数嵌套)往往退回到单阶段 -
内存与 work_mem 设置:PostgreSQL 中若
work_mem不足,即使想单阶段也会 fallback 到两阶段磁盘哈希
如何观察实际执行路径
通过执行计划确认是否启用多阶段,重点关注节点名称与重分布操作:
- PostgreSQL:
EXPLAIN (ANALYZE, VERBOSE)中出现Partial Aggregate+Gather+Final Aggregate - ClickHouse:
EXPLAIN PIPELINE显示AggregatingTransform出现在多个 processor 阶段 - Spark SQL:物理计划含
HashAggregate(partial)→Exchange(shuffle)→HashAggregate(final) - 注意
Repartition、Shuffle、Distribution等关键词,它们是多阶段的明确信号
# mysql
# 大数据
# ai
# cos
# 聚合函数
# gate
# sql
# 分布式
# count
# sqlite
# spark
# postgresql
# 数据库
# clickhouse
# 关键词
# 适用于
# 也会
# 多个
# 出现在
# 遍历
# 而非
# 不可分割
# 数据库中
# 重点关注
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
简历没回改:利用AI润色让你的文字更专业
如何选择PHP开源工具快速搭建网站?
Laravel如何使用查询构建器?(Query Builder高级用法)
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何撰写建站申请书?关键要点有哪些?
如何制作一个表白网站视频,关于勇敢表白的小标题?
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
Java类加载基本过程详细介绍
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Laravel观察者模式如何使用_Laravel Model Observer配置
Laravel如何创建自定义Artisan命令?(代码示例)
使用Dockerfile构建java web环境
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Laravel Session怎么存储_Laravel Session驱动配置详解
Laravel如何实现本地化和多语言支持?(i18n教程)
js实现点击每个li节点,都弹出其文本值及修改
动图在线制作网站有哪些,滑动动图图集怎么做?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
Laravel如何实现一对一模型关联?(Eloquent示例)
如何快速配置高效服务器建站软件?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何自定义建站之星网站的导航菜单样式?
高端云建站费用究竟需要多少预算?
如何在IIS管理器中快速创建并配置网站?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
济南网站建设制作公司,室内设计网站一般都有哪些功能?
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
如何用AWS免费套餐快速搭建高效网站?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何用y主机助手快速搭建网站?
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Swift中循环语句中的转移语句 break 和 continue
如何破解联通资金短缺导致的基站建设难题?
jquery插件bootstrapValidator表单验证详解
Python正则表达式进阶教程_复杂匹配与分组替换解析
高端建站三要素:定制模板、企业官网与响应式设计优化
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
Laravel如何为API生成Swagger或OpenAPI文档


oup key 重新分发(Shuffle),再合并(如