MySQL explain中列的取值方法及含义是什么

2023-05-15,

这篇文章主要介绍“MySQL explain中列的取值方法及含义是什么”,在日常操作中,相信很多人在MySQL explain中列的取值方法及含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL explain中列的取值方法及含义是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

type

type 取值 含义
const 使用主键 或 唯一二级索引
eq_ref 被驱动表,用主键 或 唯一二级索引进行 (索引列不为空)
ref 普通 的二级索引进行等值匹配 (索引列不为空)
ref_or_null 普通 的二级索引进行等值匹配 (索引可以为空)
index_merge TODO 索引合并相关的内容待探索
unique_subquery 查询优化器把 in 语句优化成 exists,使用了主键 或 唯一二级索引进行 (索引列不为空)
index_subquery 查询优化器把 in 语句优化成 exists,使用了普通索引
range 范围扫描
index 1. 使用索引覆盖, 但是要扫描全部的索引记录 where条件只命中部分索引
2. 全表扫描, 并且要对主键进行排序
all 全表扫描

ref

表示等值匹配用的是什么

ref 取值 含义 相关列
const 与key列的索引名等值匹配 key
表的列名 与该列进行等值匹配
func 函数

rows

预计扫描的行数

filtered

是一个百分比数,key1 扫描的数作为分母, common_field 命中的结果为分子

select * from s1 where key1 > 'z' and common_field = 'a'

表关联的时候,这个指标比较重要,针对下表数据

table rows filtered
s1 9688 10
s2 1 100

extra

extra 取值 含义
Using index 使用了索引覆盖
Using index condition 使用了索引下推
Using where 在 server 层进行了判断(没有索引的列)
Using join buffer (Block Nested Loop) 不能有效利用索引时,退而求其次使用缓存
Using filesort 使用内存或者磁盘进行文件排序
Using temporary 使用了临时表

补充: 简单阐述索引下推

client -> server -> 存储引擎,下推的意思是把筛选放到存储引擎,减少回表的数据量

形如 where key1 > xxx and key3 like ‘%a’ ,5.6 版本 like 的操作是在server层处理的,5.7.x的版本后可以在存储引擎层完成过滤。

补充:group by 优化掉额外的排序操作

select common_field, count(*) as amount from s1 group by common_field;
-- 以上语句会被 mysql 补充为
select common_field, count(*) as amount from s1 group by common_field order by common_field;
-- 如果要省略文件排序, 则显式声明为 order by null
select common_field, count(*) as amount from s1 group by common_field order by null;

到此,关于“MySQL explain中列的取值方法及含义是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注本站网站,小编会继续努力为大家带来更多实用的文章!

《MySQL explain中列的取值方法及含义是什么.doc》

下载本文的Word格式文档,以方便收藏与打印。