记一次简单的sql优化

  • 需求:

统计报警点位所属设备的设备报警总数top100的设备的报警总数

  • 需求分许:

需要先找出所有设备的报警次数,按照报警次数进行排序,取前100,然后再对前100的设备的报警次数进行统计

  • SQL思路

将报警次数TOP100的设备找出来,再对整个数据进行一个inner join,再叠加一个count。可以计算出

select count(1)
from (select substring_index(alarm_description," ",1) siad,id,alarm_description  from equipment_history_alarm_record where gc_id='AHAQWY' and substring(alarm_time,1,10)>='2020-01-01' and substring(alarm_time,1,10)<'2021-01-01') t1
inner join
(select substring_index(alarm_description," ",1) siad ,count(1) cnt from equipment_history_alarm_record  where gc_id='AHAQWY' and substring(alarm_time,1,10)>='2020-01-01' and substring(alarm_time,1,10)<'2021-01-01' group by siad order by cnt desc limit 100) t2
on t1.siad=t2.siad;

计算时间为1.733s
在这里插入图片描述

  • 优化思路

将报警次数TOP100的设备找出来,将其作为主表,再对这个主表进行sum运算

select sum(t.cnt) from
  (select substring_index(alarm_description," ",1) siad ,count(1) cnt from equipment_history_alarm_record  where gc_id='AHAQWY' and substring(alarm_time,1,10)>='2020-01-01' and substring(alarm_time,1,10)<'2021-01-01' group by siad order by cnt desc limit 100) t;

计算时间为0.867秒
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值