zizida
2019-11-12 17:31
采纳率: 100%
浏览 1.1k

【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条回答 默认 最新

  • 德玛洗牙 2019-11-12 18:01
    已采纳

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

    已采纳该答案
    打赏 评论
  • Kevin.Y.K 2019-11-12 18:04

    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

    打赏 评论
  • 卢耀168 2019-11-12 18:37

    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

    打赏 评论
  • have_power 2019-11-13 11:03
    select count(distinct office_id ,createtime) from plan_detail group by office_id;
    
    打赏 评论

相关推荐 更多相似问题