性能优化MySQL慢查询索引优化数据库性能

数据库性能优化实战:MySQL慢查询排查与索引优化

刘强2025-10-1514分钟
数据库性能优化实战:MySQL慢查询排查与索引优化

数据库往往是性能瓶颈的高发区域。本文分享一套系统化的MySQL性能优化方法论。

第一步:开启慢查询日志

首先确认慢查询日志已正确配置:

  • long_query_time设置为合理的阈值(建议1-2秒)
  • log_queries_not_using_indexes记录全表扫描
  • 使用pt-query-digest工具聚合分析

第二步:EXPLAIN分析执行计划

对于每条慢查询,使用EXPLAIN查看执行计划,重点关注:

  • type列:ALL(全表扫描)需要优化,range/ref/const是较好的访问方式
  • rows列:预估扫描行数,数值越大越需要优化
  • Extra列:Using filesort和Using temporary是需要关注的信号

第三步:索引设计原则

  1. 最左前缀原则:联合索引中,查询条件必须从最左列开始
  2. 高选择性优先:选择性高的列放在联合索引前面
  3. 覆盖索引:查询列都在索引中,避免回表
  4. 避免冗余索引:定期使用sys.schema_unused_indexes检查

第四步:SQL改写

  • 避免SELECT *,只查询需要的列
  • 分页优化:使用延迟关联或游标分页替代OFFSET
  • 子查询优化为JOIN
  • 合理使用批量插入

实战案例

某订单查询接口P99响应时间达到8秒,通过分析发现: 1. 缺失关键索引,每次全表扫描300万行 2. 添加(created_at, status)联合索引后扫描行数降至500行 3. 接口P99响应时间降至120ms

优化效果立竿见影,也验证了"80%的性能问题来自数据库"这一经验法则。

标签:MySQL慢查询索引优化数据库性能

相关文章

更多