前端
技术随笔
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 filesort、Using temporary通常意味着需要优化。
三、常见优化手段
- 为高频查询条件建立联合索引,遵循“最左前缀”原则。
- 避免对索引列做函数运算或隐式类型转换,否则索引失效。
- 少用
select *,只查需要的列,便于覆盖索引。 - 大分页用“延迟关联”或游标分页替代
limit 100000, 20。