如何解决使用过程根据列中的状态对大数据进行计数
表中有770万条记录(并且正在迅速增长),计算所有记录最多需要19秒。
我的要求是在1秒钟内加载它,请帮助我....
我的表结构是->
id |campaign_id | disposition | action create_date | more 16 columns...
1 | 3 | CANCEL | NULL 2020-08-12 |
2 | 5 | ANSWER | DNC 2020-08-13 |
3 | 3 | ANSWER | SIP 2020-08-14 |
我的程序是->
proc_campaign_report(campaignId int(10),reportTable varchar(20))
BEGIN
SET @SELECTFROM = CONCAT("
select create_date as dialDate,count(id) as calls,sum(duration) as duration,sum(client_cost) as clientCost,sum(vendor_cost) as vendorCost,count(case when action = 'DNC' then 1 end) as dontCall,count(case when action = 'AM' then 1 end) as am,count(case when action in ('SIP','Hangup','Phone') then 1 end) as transfer,count(case when disposition = 'ANSWER' then 1 end
) as answer,count(case when disposition = 'CONGESION' then 1 end) as congesion,count(case when disposition = 'BUSY' then 1 end) as busy,count(case when disposition = 'CANCEL' then 1 end) as cancel,count(case when disposition = 'NO ANSWER' then 1 end) as noAnswer,count(case when disposition is NULL then 1 end) as other,count(case when disposition = 'FAILED' then 1 end) as failed
from ",reportTable
);
SET @SELECTWHERE = CONCAT('
where `campaign_id` =',campaignId
);
SET @SELECTQUERY = CONCAT(@SELECTFROM,@SELECTWHERE
);
SET @QUERY = CONCAT(@SELECTQUERY,'
group by `dialDate`
order by `dialDate` desc
limit 3'
);
PREPARE stmt
FROM @QUERY;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
请建议我是否有任何解决方法.....
我也尝试过索引编制,但是它给我的结果不正确...
解决方法
从查找该campaignId
的第三个最新的DialDate开始。然后添加到WHERE
子句AND dialDate >= @third
也有这个综合索引:INDEX(campaignId,dialDate)
如果这还不够帮助,请提供
- 生成的查询。 (跟随紧随者我可能很棘手。)
-
EXPLAIN SELECT ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。