一条统计Group By语句优化

在检查慢SQL时,发现一条统计SQL执行过慢,如下:


原SQL
SELECT platform, channel, COUNT(DISTINCT(platformUserId)) as cnt FROM(
 SELECT platform, channel, platformUserId, MIN(insertTimestamp) as rtime
 FROM tsz_user  
 GROUP BY platform, channel, platformUserId
 ) a where a.rtime >= 1392393600 and a.rtime < 1392480000
 GROUP BY platform, channel;
执行时间:

wKioL1MBhMvhzpS9AAaAfFwXDUs635.jpg

耗时2分33秒


优化后SQL
SELECT platform, channel, COUNT(DISTINCT(platformUserId)) as cnt FROM(
 SELECT platform, channel, platformUserId, MIN(insertTimestamp) as rtime
 FROM tsz_user  
 GROUP BY platform, channel, platformUserId  order by null
 ) a where a.rtime >= 1392393600 and a.rtime < 1392480000
 GROUP BY platform, channel  order by null;


执行时间:
wKioL1MBhO-hysWyAAafG9IVFSM971.jpg

耗时55.22秒


执行计划:

wKioL1MBioPDXmVoAAQCe6tCaA4446.jpg


结论:
默认情况下,MySQL对所有GROUP BY col1,col2...的字段进行排序。如果查询包括GROUP BY,想要避免排序结果的消耗,则可以指定ORDER By NULL禁止排序。


参考手册:

wKioL1MBhTyynTKDAANBygQJ12k373.jpg



















本文转自hcymysql51CTO博客,原文链接: http://blog.51cto.com/hcymysql/1359738,如需转载请自行联系原作者


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值