首頁 > 資料庫 > mysql教程 > 一条统计Group By语句优化

一条统计Group By语句优化

WBOY
發布: 2016-06-07 17:36:44
原創
1216 人瀏覽過

在检查慢SQL时,发现一条统计SQL执行过慢,如下:原SQLSELECTplatform,channel,COUNT(DISTINCT(platformUserId))ascntFROM(SELECTplatform,channel,platformUser

在检查慢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

 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

 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




本文出自 “贺春旸的技术专栏” 博客,请务必保留此出处

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板