MySQL突然变慢,排查发现是索引被”挤掉”了

2026-09-08 809
下载不了?请联系网站客服提交链接错误!
增值服务:
MySQL突然变慢,排查发现是索引被”挤掉”了
最近更新 2026年09月08日
资源编号 353

MySQL突然变慢,排查发现是索引被”挤掉”了

2026-09-08 IT专栏 0 809 百度已收录
温馨提示丨遇到问题请联系大师邦、随时解决各类问题!
增值服务:
¥ 0 大师币 开通VIP尊享优惠特权
立即下载 升级会员
详情介绍

上周接到一个做连锁超市收银系统的客户电话,说后台订单查询页面转半天出不来,收银员录入完订单之后经常要等好几秒才能看到记录。

客户在山东临沂市兰山区义堂镇,开了七八家超市,用的是一台云服务器在济南。生意一直还行,日均订单量大概三四千单。

登录服务器一看,CPU和内存都正常,负载也不高。但连上MySQL之后,用SHOW PROCESSLIST一看,好几个查询都在执行状态,而且执行时间长的已经到了十几秒。

把其中一个正在跑的查询复制出来,单独执行了一下:

text

复制

下载

SELECT * FROM orders WHERE store_id = 5 AND order_time >= '2026-08-01' ORDER BY order_time DESC LIMIT 20;

EXPLAIN一看,type是ALL,意味着全表扫描。orders表已经快三百万条数据了,每次查询扫三百万行,不慢才怪。

更奇怪的是,这个表明明建了索引,store_id和order_time各有一个独立的索引,但MySQL优化器就是没用。

查了一下发现,之前在store_id字段上建了索引,但查询条件是store_id + order_time组合,两个单独索引在排序的时候效率不高,MySQL干脆放弃了,直接全表扫。

加一个复合索引

text

复制

下载

ALTER TABLE orders ADD INDEX idx_store_time (store_id, order_time);

加完索引之后再执行同样的查询,EXPLAIN显示type变成了ref,扫描行数从三百万降到了八百多。查询时间从14秒降到了0.3秒。

客户在义堂镇的门店里试了一下,页面”唰”就出来了,高兴得在微信上连发了三个大拇指。

问题虽然解决了,但有个细节没想通

索引是存在的,为什么之前查询不慢,偏偏最近才慢?

查了MySQL的information_schema,发现这个表之前建了五六个索引,其中有两个索引已经很久没被用过了。MySQL的查询优化器在选择索引的时候,会评估使用哪个索引成本最低。当表里的索引太多,尤其是数据量大的表,优化器评估成本的时候也会消耗计算资源,有时候甚至会”算晕了”,选了一个不是最优的方案。

顺手把冗余索引清理掉之后,查询速度又提升了一点。现在这个订单查询接口稳定在0.2秒以内。

后来跟客户聊起来这件事

客户说他们临沂兰山区总共有十几家同行在用类似的收银系统,之前也听别人说过系统变卡的问题,但一直不知道怎么处理。他在义堂镇的超市开业两年多,订单数据积累起来之后才开始感觉到慢。

其实这种情况很常见。很多系统刚上线的时候数据量小,什么问题都没有。用了半年一年,数据到了几百万行,索引设计不合理的问题就暴露出来了。收银系统还算好的,要是内容型网站,文章、评论、用户行为日志,增长更快。

顺手帮客户做了几件事

解决完索引问题之后,顺便检查了一下这台服务器的其他配置:

  1. 备份策略。之前没有自动备份,数据库每天手动导一次。帮客户在宝塔面板里配了计划任务,每天凌晨三点自动备份到腾讯云COS,保留最近30天的备份。客户在义堂镇门店的收银数据,丢了可是大事。

  2. SSL证书。客户自己装了一个免费证书,再过俩月就到期了,帮他在宝塔里开了自动续期。

  3. 操作日志。这台服务器上跑着PHP程序,opcache之前没开,开了之后PHP执行效率提升了大概30%。

客户问这算不算一个大工程,我说其实不算,就一个索引加顺手优化。但就是这个”顺手”,很多人要么不知道,要么知道了也觉得麻烦拖着不弄,拖到系统彻底卡死了再找人来救火,代价反而更大。

做技术运维这行,有时候最值钱的反而不是多高深的技术,是经验——知道问题出在哪,知道怎么快速解决,知道哪些坑提前填上能省掉后面一堆麻烦。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

本站仅提供信息存储空间服务,所有资源均由注册用户上传,仅供学习参考,知识产权归属原作者所有。本站不保证内容的准确性、真实性和可靠性,因信赖任何信息而产生的风险由使用者自行承担。因线路故障、黑客攻击、病毒侵入等不可抗力造成的损失,本站不负任何责任。链接推荐的第三方网站内容,本站不保证其真实性、合法性,由此造成的损失由使用者自行承担。未经本站许可,不得盗链、盗用或仿造本站资源,否则本站保留追责权利。如有侵权,请联系我们,本站将在核实后三个工作日内处理。

大师邦 IT专栏 MySQL突然变慢,排查发现是索引被”挤掉”了 https://www.dashibang.com/archives/353

常见问题
  • 不能。本站资源仅供学习参考,请勿直接商用。因商用引起的版权纠纷,责任由使用者自行承担。介绍文章中的示例图片、字体通常不包含在下载包内,需另行购买。
查看详情
  • 多数是下载不完整,对比文件大小与网盘显示容量是否一致。建议用百度网盘软件或迅雷下载,不要用浏览器直接下载。排除后仍有问题,可联系客服。
查看详情
  • 联系客服并提供付款信息,客服会为您处理。
查看详情
  • 属虚拟商品,具有可复制性,一旦交付原则上不接受退款。 通常可退款:商品无法安装、与描述严重不符、重复扣款。 通常不退:因个人原因不想要了、已被下载或激活使用、环境不兼容、超出申请期限。 建议付款前仔细阅读商品说明,确认是您需要的资源再下单。
查看详情
  • 通过官网在线客服、底部“联系我们”页面提交工单,或发邮件至官方邮箱。提交时附上订单号和问题截图。
查看详情
  • 联系我们客服,我们会安排人专门处理,留好联系方式,找到第一时间通知您!
查看详情

相关文章

评论
暂无评论
在线客服

为您解决烦忧 - 工作时间 第一时间解决