Mysql数据库使用时间类型索引发全表扫描

Mysql数据库使用时间类型索引发全表扫描,索引失效


出现场景:
生产环境上有一张表,数据量是在700万左右,当用户使用查询该表的接口时候,页面一中在加载中,后面定位问题,发现查询数据等待时间过长,超出响应时间。
这是错误截图

后面拿到sql后,自己在生产环境执行,结果执行一次需要58秒,该sql只用了一个时间段查询和一个用户ID查询。时间段是加了索引的。当时挺奇怪怎么加了索引这么慢,后面使用explain关键词排查sql

在这里插入图片描述
发现并没有走索引,进行了全表扫描。
后面问了大佬,找到一片文章
http://bbs.xiangxueketang.cn/question/1640
原来是查询条件有日期索引和其他条件的话,只有所有条件都有索引的情况下,才会走日期索引。
后面加上了user_id索引后,查询效率快很多
在这里插入图片描述
从全表扫描700万数据,变成了扫描91条。第一次查询sql时间从58秒优化到0.22秒。暂时解决线上问题。
后面再来回顾这个sql,没有走时间索引,走的用户ID索引,还是有很多地方可以进行优化,不能想当然为了求快而去一味的加索引,当索引加了特别多后,会影响到整个表的写入性能,同时索引还会占用很多空间,还需要考虑到索引失效的场景等等,索引只是最后的调优方案。

关于mysql部分查询性能分析的有兴趣的朋友可以看看这篇文章
https://blog.csdn.net/u011781769/article/details/48471013

以上只是记录自己开发遇到的问题以及个人的解决方案,仅供参考,欢迎大佬们提出更多的意见或建议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值