MySQL 慢查询日志分析与优化
学会启用慢查询日志并分析低效SQL,提升数据库性能。 · 难度:入门 · +15XP
MySQL 慢查询日志
慢查询日志记录执行时间超过指定阈值的SQL语句,是定位性能瓶颈的利器。结合mysqldumpslow或pt-query-digest等工具,可以快速找到最耗时的查询。
启用配置
-- 永久生效(my.cnf)
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
-- 动态设置
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 2;
日志内容示例
# Time: 2023-06-15T10:30:00
# User@Host: root[root] @ localhost []
# Query_time: 5.234567 Lock_time: 0.000123
# Rows_sent: 1000 Rows_examined: 500000
SELECT * FROM orders WHERE YEAR(created_at) = 2022;关键指标:Query_time(实际执行时间)、Rows_examined(扫描行数)、Rows_sent(返回行数)。理想情况是Rows_examined接近Rows_sent。
分析工具
mysqldumpslow:MySQL自带工具,可汇总日志。
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log优化策略
- 为查询添加合适的索引
- 避免在WHERE条件中使用函数(如YEAR(date))
- 减少SELECT *,只取必要列
- 考虑分页优化或数据归档
练习提示
在编辑器中启用慢查询日志,然后执行一个消耗较大的查询,最后使用SHOW STATUS查看慢查询计数。