一条统计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,如需转载请自行联系原作者


相关文章
|
2月前
|
SQL
创建分组总计查询的SQL技巧与方法
在SQL中,创建分组总计查询(也称为聚合查询)是一项非常基础且重要的技能
|
5月前
|
SQL
SQL开发问题之当从数据源读取多个字段时优化 COUNT(DISTINCT ...) 的查询的问题如何解决
SQL开发问题之当从数据源读取多个字段时优化 COUNT(DISTINCT ...) 的查询的问题如何解决
|
5月前
|
SQL 存储 大数据
SQL中DISTINCT关键字的使用与性能影响分析
SQL中DISTINCT关键字的使用与性能影响分析
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库——SQL优化(2/3)-order by 优化、group by 优化
MySQL数据库——SQL优化(2/3)-order by 优化、group by 优化
62 0
|
7月前
|
SQL 数据库
SQL HAVING 子句详解:在 GROUP BY 中更灵活的条件筛选
HAVING子句被添加到SQL中,因为WHERE关键字不能与聚合函数一起使用。
303 0
|
存储 SQL 关系型数据库
mysql数据分组 group by 多条件分组但条件不并列的分析
mysql数据分组 group by 多条件分组但条件不并列的分析
629 0
|
SQL 数据库
数据库sql语句(count(*)和count(字段))
数据库sql语句(count(*)和count(字段))
185 0
|
SQL 数据挖掘 Python
SQL练习:2(简单)+1(中等),常规题(group by\order by\avg...)
SQL练习:2(简单)+1(中等),常规题(group by\order by\avg...)
206 0
SQL练习:2(简单)+1(中等),常规题(group by\order by\avg...)
|
SQL 程序员 开发工具
【Sql Server】基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
544 0
【Sql Server】基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用

相关课程

更多