记录一次Mysql优化

19年7月1日,遇到一个问题,单表百万级数据量查询2s+

SELECT x.jitai,banci,round(SUM(mishu),2) mishu,dengji 
FROM dingdan_xmd x 
WHERE x.sc_time >= '2019-06-28 00:00:00' AND x.sc_time <= '2019-06-29 00:00:00' AND gongsi = '王大锤' 
GROUP BY x.dengji,x.banci,x.jitai ORDER BY banci DESC,jitai ASC 

语句执行需要2.2S+,用户的页面会卡至少3S以上,非常不友好,所以开始查找资料调优

一篇博客说需要建立 联合索引,但是经过深思熟虑之后,决定只给sc_time建立一个索引

ALTER TABLE dingdan_xmd ADD INDEX sc_time_index(sc_time)

语句执行时间0.027S以下,完美解决问题

因为时间有可能重复,就不建唯一索引了。

 

你以为就完了?没有!把sc_time的跨度调大,当数据量达到8万条时,查询时间居然又回到了2.4S+

经过我不懈努力,根据索引大法好的原则,在原来索引的基础上,我将SQL语句做了修改

SELECT jitai,banci,round(SUM(mishu),2) AS mishu, dengji  FROM dingdan_xmd WHERE gongsi = "王大锤" AND id BETWEEN (
	SELECT id FROM dingdan_xmd WHERE gongsi = '王大锤' AND sc_time > '2019-05-28 00:00:00' limit 0,1
) AND (
	SELECT id FROM dingdan_xmd WHERE gongsi = '王大锤' AND sc_time < '2019-06-29 00:00:00' ORDER BY id DESC limit 0,1
) GROUP BY dengji,banci,jitai ORDER BY banci DESC,jitai ASC

成功的将查询时间降低到了正负0.3s,对于10万级数据量暂时算是解决了问题

但是你以为这就完了,还没完呢,当时间跨度继续加大,筛选数据量达到百万级时,查询时间居然达到了狗血的3.551S,这简直是叔叔能忍,婶婶都不能忍,不过目前我还没有找到解决办法,挖个坑,过几天来填

 

 

参考资料:

https://www.cnblogs.com/softidea/p/5977860.html

https://www.cnblogs.com/shilinnpu/p/9082644.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值