qq_33277249
zizida
采纳率100%
2019-11-12 17:31

【MySQL】百万级的数据统计SQL求优化!!!

已采纳

业务描述

因为要进行一次图表统计,统计内容为某部门或者全部门某日期段的任务数和完成数。

表单和使用字段

sys_office(部门表:id-索引,name,code-索引)

统计数量:select count(0) from sys_office

图片说明

plan_detail(计划表:office_id-索引,createtime-索引)

统计数量:select count(0) from plan_detail

图片说明

统计SQL

SELECT COUNT(0) FROM (
    SELECT t1.office_id FROM plan_detail t1 
    WHERE t1.createtime >= '2019-11-01' AND t1.createtime <= '2019-11-12' 
    GROUP BY t1.office_id,t1.createtime
) t1 
GROUP BY t1.office_id  

结果:

图片说明

图片说明

求优化

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • qq_36720114 德玛洗牙 2年前

    可以考虑按时间建立range分区

    点赞 1 评论 复制链接分享
  • guangcaiwudong Kevin.Y.K 2年前

    SELECT t1.office_id,count(1) as num
    FROM plan_detail t1
    WHERE t1.createtime >= '2019-11-01' AND t1.createtime <= '2019-11-12'
    GROUP BY t1.office_id

    点赞 2 评论 复制链接分享
  • weixin_42080504 have_power 2年前
    select count(distinct office_id ,createtime) from plan_detail group by office_id;
    
    点赞 1 评论 复制链接分享
  • qq_34585800 卢耀168 2年前

    SELECT
    count(1)
    FROM
    sys_office a
    LEFT JOIN plan_detail b ON a.id = b.office_id
    where b.id is not null
    GROUP BY a.id

    点赞 1 评论 复制链接分享

相关推荐