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
阅读 3.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题