前端 技术随笔

MySQL 慢查询与索引优化实战(EXPLAIN 详解)

接口响应越来越慢,多半是 SQL 没有走索引。通过慢查询日志定位问题 SQL,再用 EXPLAIN 分析执行计划,是 MySQL 性能优化的标准套路。

一、开启慢查询日志

-- 查看配置
show variables like 'slow_query_log';
show variables like 'long_query_time';

-- 会话级开启
set global slow_query_log = 1;
set global long_query_time = 1;  -- 超过 1 秒记为慢查询

二、用 EXPLAIN 看执行计划

explain select * from orders where user_id = 100 and status = 1;

重点关注几个字段:

  • type:访问类型,从优到劣大致为 system > const > ref > range > index > ALL,出现 ALL 说明全表扫描。
  • key:实际命中的索引,为 NULL 表示没用索引。
  • rows:预估扫描行数,越大越慢。
  • Extra:出现 Using filesortUsing temporary 通常意味着需要优化。

三、常见优化手段

  1. 为高频查询条件建立联合索引,遵循“最左前缀”原则。
  2. 避免对索引列做函数运算或隐式类型转换,否则索引失效。
  3. 少用 select *,只查需要的列,便于覆盖索引。
  4. 大分页用“延迟关联”或游标分页替代 limit 100000, 20
标签
MySQL数据库优化