执行多列聚合SQL查询时,表会被迭代多少次?
多列聚合查询的表迭代次数解释
针对你给出的查询语句:
SELECT sum(colA * ColB) /sum(ColA), sum(ColA), avg(ColB) FROM TABLE
主流关系型数据库(如MySQL、PostgreSQL、SQL Server等)只会对表迭代一次,原因如下:
- 数据库执行聚合操作时,会在单次表扫描过程中同时计算所有需要的聚合值:
- 每读取一行数据,就计算
colA * ColB并累加到sum(colA * ColB)的临时结果中 - 同时累加
colA的值到sum(ColA)的临时结果 - 另外还会累加
colB的值到avg(ColB)的总和临时变量,同时记录总行数(因为平均值等于总和除以行数)
- 每读取一行数据,就计算
- 等单次扫描完成后,再基于已经计算好的聚合临时结果,完成
sum(colA * ColB)/sum(ColA)的算术运算,这个步骤不需要再次扫描表。
只有当查询涉及多个独立子查询、或者需要多次聚合且无法在单次扫描中完成时,数据库才会多次迭代表,但你的这个查询显然不属于这类情况。
内容的提问来源于stack exchange,提问作者AdR
相关产品推荐
相关产品推荐

