MySQL中GROUP BY后COUNT(*)每组调用次数及优化方案咨询
MySQL分组查询中COUNT(*)的调用次数与优化
调用次数说明
在你给出的SQL语句里,每个分组中的COUNT(*)只会被计算一次。MySQL的查询优化器能自动识别重复的聚合函数调用,不会重复执行三次COUNT(*),而是计算一次后将结果复用在num2和num3的表达式中。
不过如果假设存在优化器无法识别复用、导致COUNT(*)被执行三次的场景,可通过以下方式优化:
优化方案
子查询预计算法:先在子查询中算出每个分组的COUNT(*),再在外层做算术运算,确保聚合只执行一次:
SELECT num1, num1 / 10 AS num2, num1 * 10 AS num3 FROM ( SELECT COUNT(*) AS num1 FROM table GROUP BY column_name ) AS tCTE复用(MySQL 8.0+适用):利用公共表表达式先计算聚合值,后续直接复用结果:
WITH group_counts AS ( SELECT COUNT(*) AS num1, column_name FROM table GROUP BY column_name ) SELECT num1, num1 / 10 AS num2, num1 * 10 AS num3 FROM group_counts变量存储法(低版本MySQL适用):用用户变量存储COUNT(*)的结果,后续表达式直接调用变量:
SELECT @num := COUNT(*) AS num1, @num / 10 AS num2, @num * 10 AS num3 FROM table GROUP BY column_name
内容的提问来源于stack exchange,提问作者HollowDjj
相关产品推荐
相关产品推荐

