1. 程式人生 > >MySQL效能調優-使用ROLLUP代替UNION ALL

MySQL效能調優-使用ROLLUP代替UNION ALL

需求:統計各個活動的用券總金額和所有活動的用券總金額

原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;