# MySQL 慢查询日志
# 慢查询日志作用
- 慢查询日志会把查询耗时,超过规定时间的 SQL 语句记录下来
- 利用慢查询日志,定位分析性能的瓶颈
默认情况下,MySQL 是不启用慢查询日志的。
show variables like 'slow_query%';
1
Variable_name | Value |
---|---|
slow_query_log | OFF |
slow_query_log_file | /usr/local/mysql/sql_log/slowlog.log |
slow_query_log
:慢查询开启状态
slow_query_log_file
:慢查询日志存放位置
# 开启慢查询日志
# 开启慢查询日志
slow_query_log=ON
# 查询超时时间,单位 秒
long_query_time=1
1
2
3
4
2
3
4
除了配置文件,还可以使当次 mysql 运行期间生效的配置方式,运行以下语句
set global slow_query_log=on;
1
使用语句来运行超过 1 秒钟,来查看慢查询日志信息
select sleep(2); -- 休眠 2 秒钟
1
慢查询日志文件 /usr/local/mysql/sql\_log/slowlog.log
# Time: 2020-06-12T03:44:19.415383Z
# User@Host: root[root] @ gateway [192.168.56.1] Id: 8
# Query_time: 2.000411 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
use neti;
SET timestamp=1591933457;
/* ApplicationName=DataGrip 2020.1.4 */ select sleep(2);
1
2
3
4
5
6
2
3
4
5
6
# EXPLAIN
从慢查询日志看到那些 SQL 语句查询慢,那么可以通过 explain 针对这些语句进行执行计划的查看,然后分析它为什么这么慢
explain
select id, dname
from t_dept;
1
2
3
2
3
执行计划为
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | t_dept | NULL | index | NULL | unq_dname | 802 | NULL | 7 | 100 | Using index |
这里 type=index 说明使用了索引,并使用了索引 kye=unq_dname,返回了 rows=7 行数据;
如果这里 type=all,那么就是全表扫描,可以考虑优化它,让它走索引
explain
select id, dname
from t_dept
where id = 10;
1
2
3
4
2
3
4
执行计划为
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | t_dept | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100 | NULL |
这一条,根据主键 ID 查询的
← MySQL 参数优化 本章总结 →