这个EXPLAIN查询计划输出对我的Redshift查询意味着什么



我运行了这个:

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)

这个查询计划是什么意思?

查询计划是PostgreSQL计划器(Amazon Redshift基于PostgreSQL)为您的SQL语句生成的执行计划。

第一个节点是数据上的窗口聚合(WindowAgg),因为您正在使用OVER窗口函数来计算行号。

第二个节点是对user_profile表的顺序扫描(Seq-scan),因为您在不进行任何筛选的情况下对该表执行完整的select

顺序扫描扫描存储在磁盘上的整个表,因为您的查询需要对表进行完全遍历。即使在CCD_ 4&birth_date,查询引擎几乎总是在这里进行序列扫描,因为您需要所有东西(取决于PostgreSQL中的random_page_costenable_seqscan参数)。

cost数字实际上是任意的,但通常表示磁盘页面获取的数量;它被分成两个值,其中分隔符是CCD_ 9。

第一个值显示启动成本——这是返回第一行的估计成本。第二个值显示总成本——这是返回所有行的估计成本。

例如,对于序列扫描,启动成本为0,总成本估计为133369906.76

对于顺序扫描,启动成本通常为0。除了返回数据之外,没有什么真正的事情可做,这样它就可以立即开始返回数据。节点的总成本也包括其所有子节点的成本——在这种情况下,两个操作的最终总成本看起来是133833424.40,它是扫描聚合成本的总和。

rows值表示将返回的估计行数。在这种情况下,两个操作都具有相同的值,因为聚合将应用于所有行&没有执行将减少最终行的数量的过滤。

width值表示每一返回行的估计大小(以字节为单位),即每一行在聚合之前的长度很可能为28字节,而在聚合之后的长度则为36字节。

把这些放在一起,你可以这样阅读查询计划:

  1. 对表user_profile进行顺序扫描
  • 很可能会立即开始返回行
  • 估计磁盘页面获取计数为133369906.76
  • 估计将返回30901176行
  • 估计总行大小为28字节
  1. 对来自上述操作的数据进行窗口聚合
  • 很可能会立即开始返回行
  • 估计磁盘页面获取计数为133833424.40
  • 估计将返回30901176行
  • 估计总行大小为36字节

相关内容

  • 没有找到相关文章