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列的值依赖于统计信息。
参考文章: