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

Redshift查询:该EXPLAIN执行计划输出的含义是什么?

该PostgreSQL查询计划的含义解析

你执行的SQL语句:

EXPLAIN select id, birth_date, ROW_NUMBER() OVER (ORDER BY 1) AS load_id from user_profile;

得到的查询计划输出:

WindowAgg  (cost=0.00..133833424.40 rows=30901176 width=36)
  ->  Seq Scan on user_profile  (cost=0.00..133369906.76 rows=30901176 width=28)

下面是逐部分的含义解析:

1. 底层操作:全表顺序扫描(Seq Scan)

  • Seq Scan on user_profile:数据库会对user_profile表执行全表顺序扫描,也就是从头到尾逐行读取表内所有数据,未使用索引加速。
  • cost=0.00..133369906.76:这是数据库估算的执行开销,0.00是启动成本(开始返回数据前的准备开销),133369906.76是完成整个扫描的总成本。
  • rows=30901176:数据库估算该表共有30901176行数据,扫描会读取全部行。
  • width=28:每行返回的id和birth_date两个字段的平均总字节数为28。

2. 上层操作:窗口聚合(WindowAgg)

  • WindowAgg:这是执行窗口函数ROW_NUMBER() OVER (ORDER BY 1)的环节。这里的ORDER BY 1表示按查询结果的第一列(即id)排序,但由于所有行的排序逻辑无实际区分度(可理解为按常量排序),最终ROW_NUMBER()会按照全表扫描的顺序,给每行分配一个唯一的递增序号作为load_id。
  • cost=0.00..133833424.40:窗口聚合的总成本,等于底层全表扫描的成本加上计算行号的额外开销(两者差值约46万,就是生成load_id的开销)。
  • rows=30901176:窗口函数不会过滤或新增行,所以输出行数和底层扫描的行数一致。
  • width=36:输出每行的平均总字节数为36,比底层的28多了8字节,对应新增的load_id字段(一般为bigint类型,占8字节)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:12:09