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

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

数据库 2026-06-20 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、避免索引失效,可以大幅提升查询性能。

📚 相关文章