2020年6月21日 作者 zeroheart

mysql explain的使用

1.开启慢日志,可以帮助我们分析一些性能问题

显示是否开启了慢查询日志

show variables like ‘slow_query%’;

show variables like ‘%query%’;

开启慢查询日志

set global slow_query_log = on

慢查询日志输出位置

set global slow_query_log_file = ‘/var/lib/mysql/slow.log’
set global log_queries_not_using_indexes = on

设置耗时查询时间阈值

set global long_query_time = 1

2.explain的用法

expain extended出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra

概要描述:
id:选择标识符
select_type:表示查询的类型。
table:输出结果集的表
partitions:匹配的分区
type:表示表的连接类型
possible_keys:表示查询时,可能使用的索引
key:表示实际使用的索引
key_len:索引字段的长度
ref:列与索引的比较
rows:扫描出的行数(估算的行数)
filtered:按表条件过滤的行百分比
Extra:执行情况的描述和说明

id列

id列中的数据为一组数字,表示执行select语句的顺序

id值相同时,执行顺序由上至下

id值越大优先级越高,越先被执行

select_type列

table列

输出数据行所在的表的名称

partitions列

对于分区表,显示查询的分区id对于非分区表,显示为null

type

extra 列

possible_key 列

指出MySQL能使用哪些索引来优化查询,不一定会被使用。

key列

查询优化器 优化查询实际所使用的索引,如果没有可用的索引,则显示为null

key_len列

表示索引字段的最大可能长度,key_len的长度由字段定义计算而来,并非数据的实际长度。

ref 列

表示那些列或常量被用于查找索引列上的值

rows列

表示MySQL通过索引统计信息,估算的所需读取的行数,rows的大小是个统计抽样结果,并不十分准确。

Filtered列

表示返回结果的行数占需读取行数的百分比,Filtered列的值越大越好,Filtered列的值依赖于统计信息。

参考文章:

https://baijiahao.baidu.com/s?id=1663038925363046620

https://www.cnblogs.com/tufujie/p/9413852.html