这篇文章主要介绍“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 取值 | 含义 | 相关列 |
---|---|---|
const | 与key列的索引名等值匹配 | key |
表的列名 | 与该列进行等值匹配 | |
func | 函数 |
预计扫描的行数
是一个百分比数,key1 扫描的数作为分母, common_field 命中的结果为分子
select * from s1 where key1 > 'z' and common_field = 'a'
表关联的时候,这个指标比较重要,针对下表数据
table | rows | filtered |
---|---|---|
s1 | 9688 | 10 |
s2 | 1 | 100 |
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的版本后可以在存储引擎层完成过滤。
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中列的取值方法及含义是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。