Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
604 views
in Technique[技术] by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神解答

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...