MySQL 慢查询优化:从 EXPLAIN 到性能调优

详细介绍 MySQL 慢查询的排查和优化方法,包括 EXPLAIN 分析、索引优化、SQL 优化。

数据库 2026-06-19 12 分钟

MySQL 慢查询优化:从 EXPLAIN 到性能调优

慢查询是 MySQL 性能问题的主要原因。本文介绍慢查询的排查和优化方法。

开启慢查询日志

-- 查看配置
SHOW VARIABLES LIKE 'slow_query%';

-- 开启慢查询
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;  -- 超过1秒记录
SET GLOBAL log_queries_not_using_indexes = ON;

EXPLAIN 分析

EXPLAIN SELECT * FROM users WHERE name = '张三';

type 字段

type 说明 性能
system 系统表 最好
const 主键/唯一索引等值查询
ref 非唯一索引等值查询
range 索引范围查询
index 全索引扫描
ALL 全表扫描 最差

Extra 字段

Extra 说明
Using index 覆盖索引
Using where 服务器层过滤
Using temporary 使用临时表
Using filesort 额外排序

常见慢查询优化

1. 全表扫描

-- ❌ 全表扫描
SELECT * FROM users WHERE age > 20;

-- ✅ 添加索引
CREATE INDEX idx_age ON users(age);

2. 索引失效

-- ❌ 函数操作
SELECT * FROM users WHERE YEAR(create_time) = 2024;

-- ✅ 范围查询
SELECT * FROM users WHERE create_time >= '2024-01-01' AND create_time < '2025-01-01';

3. 分页优化

-- ❌ 深分页
SELECT * FROM users ORDER BY id LIMIT 1000000, 10;

-- ✅ 使用游标
SELECT * FROM users WHERE id > 1000000 ORDER BY id LIMIT 10;

4. JOIN 优化

-- 确保关联字段有索引
CREATE INDEX idx_user_id ON orders(user_id);

-- 小表驱动大表
SELECT * FROM small_table s JOIN big_table b ON s.id = b.sid;

总结

慢查询优化的核心是 EXPLAIN 分析。通过添加索引、优化 SQL、避免索引失效,可以大幅提升查询性能。

📚 相关文章