MySQL之慢查询
文章目录
一、如何开启和定位慢查询
1.如何开启慢查询日志参数
默认情况下,MySQL数据库没有开启慢查询日志
,因为开启慢查询会对数据库带来一定的性能影响。
在使用前我们可以查看慢查询是否开启:
show variables like '%slow_query_log';
接下来我们要打开慢查询
set global slow_query_log = 'ON';
打开慢查询之后可以查看慢查询的日志存储位置
show variables like '%slow_query_log%';
2.修改慢查询的阈值
1.临时修改
首先查看慢查询的阈值(默认阈值10)
show variables like '%long_query_time%';
若要修改慢查询的阈值,要对global
和session
同时修改,这样对新连接的客户端和当前客户端都生效。
set global long_query_time = 2;
set long_query_time = 2;
2.永久修改
修改my.cnf文件,在【mysqld】下修改
[mysqld]
slow_query_log=ON #开启慢查询日志开关
long_query_time=2#设置慢查询的的阈值为二秒
log_output=FILE
3.查看慢查询数目
show global status like '%Slow_queries%';
4.关闭慢查询日志
1.永久性方式
修改my.cnf文件,在【mysqld】下修改,重启msyql服务即可生效
[mysqld]
slow_query_log =OFF
2.临时性方式
使用set语句,重启MySQL服务生效
SET GLOBAL slow_query_log =OFF;
二、使用EXPLAIN或DESCRIBE分析慢查询语句
在定位了慢查询之后,就可以使用EXPLAIN或DESCRIBE分析慢查询语句。
1.基本语法
EXPLAIN或DESCRIBE的语法
EXPLAIN +语句
或
EXPLAIN +语句
例如
id | 在一个查询语句中每一个select都对应一个唯一id |
select_type | select对应的查询类型 |
table | 表名 |
partitions | 匹配的分区信息 |
type | 对于单个表的访问方法 |
possible_keys | 执行过程中可能用到的索引 |
key | 实际上使用的索引 |
key_len | 实际上使用的索引长度 |
ref | 当索引使用等值查询时,于索引列等值匹配的对象信息 |
rows | 预估读取的记录条数 |
filtered | 搜索剩余记录百分比 |
Extra | 额外信息 |
2.经常作为数据分析的列
1.type
访问结果值从好到坏依次是:
system > const > eq_ref > ref > fulltext > ref_or_null >index_merge > unique_subquery >index_subquery > range >index > ALL
SQL性能优化指标:至少达到range级别,要求是ref级别,最好是const级别
2.key_len
检查是否在查询中使用索引,值越大越好
,主要针对于联合索引