一、什么是慢查询日志
慢查询日志(Slow Query Log) 是 MySQL 内置的一种日志功能,用于记录执行时间超过指定阈值的 SQL 语句。这是优化数据库性能的重要工具。
二、核心作用
- 性能诊断:找出执行效率低的 SQL 语句
- 瓶颈定位:分析查询为什么慢(全表扫描、索引缺失等)
- 优化依据:为 SQL 优化和索引调整提供数据支持
三、配置参数详解
-- 查看所有慢查询相关参数
SHOW VARIABLES LIKE '%slow%';
SHOW VARIABLES LIKE '%long_query_time%';
主要配置参数:
slow_query_log = OFF/ON:是否开启慢查询日志slow_query_log_file = /path/name:日志文件路径long_query_time = 10:阈值(秒),默认 10 秒min_examined_row_limit = 0:最少检查行数阈值log_queries_not_using_indexes = OFF:是否记录未使用索引的查询log_slow_admin_statements = OFF:是否记录管理语句log_output = FILE/TABLE/NONE:输出方式
四、开启和配置
1. 临时开启(重启失效)
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2; -- 设为 2 秒
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
SET GLOBAL log_queries_not_using_indexes = 'ON';
2. 永久开启(修改配置文件)
# my.cnf 或 my.ini
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
log_output = FILE
五、慢查询日志格式分析
典型日志条目
# Time: 2024-01-01T10:00:00.123456Z
# User@Host: root[root] @ localhost [] Id: 5
# Query_time: 5.123456 Lock_time: 0.001000 Rows_sent: 10 Rows_examined: 1000000
SET timestamp=1672560000;
SELECT * FROM users WHERE last_name LIKE '%smith%' ORDER BY create_time DESC;


