+-
MySQL :: COUNT(DISTINCT) + GROUP BY 查询优化问题

在写项目过程中,我在类似数据汇总的模块中发现一个SQL执行缓慢,它包含了一些分组+去重+求和的操作,我使用派生表对这个SQL进行了一些改进,查询速度在20W记录下是提高了30多倍。由于我MySQL学习还不够深入,我觉得应该还有很多更好的优化方式,比如如何有效利用索引之类的。。。,所以在此向大家请教一下

### 以下是原来的SQL和现在的SQL,以及它们的EXPLAIN结果

这个功能主要是按字段area分组,对device数量进行统计(需要去重),同时对num求和

#### 原来的

SQL语句

EXPLAIN
select COUNT(distinct device_id) deviceCount , SUM(num) beetleCount, area `name`, adcode `code` 
from device_maintenance
where adcode like concat('35', '%') 
group by area;
EXPLAIN结果
image

#### 现在的(改进后的)

SQL语句

EXPLAIN
select COUNT(*) deviceCount , SUM(num) beetleCount, area `name`, adcode `code` 
from (
    select device_id ,sum(num) num, area , adcode 
    from device_maintenance 
    where adcode like '35%'
    GROUP BY device_id
) t
group by area ORDER BY NULL
EXPLAIN结果
image