MySQL 慢查询日志分析与 SQL 调优实战
慢查询日志记录执行时间超过阈值的 SQL,是性能调优的首要工具。
1. 开启慢查询日志
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1; -- 单位秒,建议 0.5~1
SET GLOBAL log_queries_not_using_indexes = ON; -- 记录未使用索引的查询永久配置在 my.cnf:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 0.5
log_queries_not_using_indexes = 12. 使用 mysqldumpslow 分析
# 按查询次数排序前十
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log
# 按平均执行时间排序
mysqldumpslow -s at -t 10 /var/log/mysql/slow.log3. 使用 EXPLAIN 查看执行计划
EXPLAIN SELECT * FROM orders WHERE order_date > '2025-01-01';关注列:
type:ALL(全表扫描)需优化,ref、range较好。key:实际使用的索引。rows:扫描行数,越少越好。
4. 常见优化手段
- 添加合适索引。
- 避免
SELECT *,只取必要列。 - 使用
JOIN代替子查询。 - 拆分复杂查询为多个简单查询。
定期分析慢日志,持续优化,是 DBA 的日常工作。
