原子网络科技 原子网络科技

MySQL 索引优化实践:慢查询定位、联合索引顺序以及深分页改造

a169kai 2026年11月04日 · 阅读约 2 分钟

站点跑得越来越慢,大部分情况下都能找到数据库的原因。索引优化不需要高深的理论,只需要一条从发现问题到解决问题的固定流程。

从慢查询日志开始定位。阈值一开始设置得比较宽松,收集所有的样本数据,按照总的执行时间排序,找到前十几条语句;然后对每条语句进行详细的分析,特别是扫描行数与返回行数之间的比例,如果比例差异很大,就说明索引没有命中过滤条件。

联合索引的列顺序就是考点。等值条件在前,范围条件在后是基本规则,排序列紧跟等值列可以顺带免去文件排序;查询只涉及索引内字段的时候建覆盖索引,回表次数直接归零。反例也要记住:字段套函数、隐式类型转换、前导通配符模糊匹配,这三种写法都会使索引形同虚设,改造时优先调整写法而不是加索引。

深分页就是列表页常见的毛病。偏移量上万之后,数据库依然要遍历掉前面的所有记录,时间随着页码的增加而线性增长。两种替代方案:用上一页最后一条记录的排序值作为查询起点,翻页只扫新增部分;或者先在索引中取出目标区间的主键,再回表取明细,扫描量与页码无关。

修改之后要进行检查。对同一条语句进行两次执行计划运行,比较扫描的行数和消耗的时间;批量调整之后查看线上慢查询日志的变化情况,看收益是否落在真实的流量上。

索引不是越多越好,写多读少的表要定期清理未命中索引,维护成本也要算进去。

0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
最旧
最新 最多投票