需求:统计各个活动的用券总金额和所有活动的用券总金额
原SQL语句如下(表明比较敏感,不便展示):
select active_code,SUM(rp_amount) totalReward
from xxx_xxx_xxx_xxx
group by active_code
union all
select null, SUM(rp_amount) totalReward
from xxx_xxx_xxx_xxx;
发现这是慢查询,原因在于:数据库引擎是将union all连接的两个子查询分别执行查询操作,得到两个查询结果集,再汇总成一个set。
改进:使用ROLLUP关键字,ROLLUP根据group by 后跟的字段或表达式产生多个结果集(grouping sets),结果集不仅包括各个活动用券金额统计,还包括所有活动的用券总金额。
select active_code,SUM(rp_amount) totalReward
from xxx_xxx_xxx_xxx
group by active_code with rollup;
本文介绍了一种SQL查询优化方法,通过使用ROLLUP关键字替代UNION ALL来提高统计各活动用券金额及总金额的查询效率。ROLLUP能够一次性生成多个结果集,避免了多次查询和结果集合并的过程,显著提升了查询速度。
1280

被折叠的 条评论
为什么被折叠?



