Type 字段
Type 字段说明
| Type字段 | 意义 |
|---|---|
| ALL | 将遍历全表以找到匹配的行 |
| Index | index与ALL区别为index类型只遍历索引树 |
| Range | 只检索给定范围的行,使用一个索引来选择行 |
| Index_range | 表示使用了索引合并的优化方法 |
| Ref_or_null | 类似ref,可以搜索值为NULL的行 |
| Ref | 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 |
| eq_ref | 类似ref,区别就在使用的索引是唯一索引 |
| const、system | 对查询某部分进行优化,并转换为一个常量时,使用这些类型访问 |
| NULL | 在优化过程中分解语句,执行时甚至不用访问表或索引 |
- NULL 类型。
EXPLAIN SELECT MIN(id)
FROM subject;

在优化阶段分解查询语句,在执行阶段用不着再访问表或索引。
- const 类型。
EXPLAIN SELECT *
FROM teacher
WHERE teacher_no = 'T2010001';

通过索引一次就找到了,const 用于比较 primary key 或 unique 索引,因为只匹配一行数据,所以很快。如将主键置于 where 列表中,就能将该查询转换为一个常量。
- eq_ref 类型。
EXPLAIN SELECT subject.*
FROM subject
LEFT JOIN teacher ON subject.teacher_id = teacher.id;

唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见于主键或唯一索引扫描。
- ref 类型。
EXPLAIN SELECT subject.*
FROM subject, student_score, teacher
WHERE subject.id = student_id
AND subject.teacher_id = teacher.id;

注:如果结果只有两行,请重新执行一遍,方便元数据信息采集。
非唯一性索引扫描,返回匹配某个单独值的所有行。
本质上也是一种索引访问,返回所有匹配某个单独值的行。
然而可能会找到多个符合条件的行,应该属于查找和扫描的混合体。
- ref_or_null 类型。
EXPLAIN SELECT *
FROM teacher
WHERE name = 'wangsi'
OR name IS NULL;

类似 ref,但是可以搜索值为 NULL 的行。
- index_merge 类型。
EXPLAIN SELECT *
FROM teacher
WHERE id = 1
OR teacher_no = 'T2010001'

使用了索引合并的优化方法。
- range 类型。
EXPLAIN SELECT *
FROM subject
WHERE id BETWEEN 1 AND 3;

只检索给定范围的行,使用一个索引来选择行,key 列显示使用了哪个索引。
一般在 where 语句中出现 between、<>、in 等的查询时会使用 range。
- index 类型。
EXPLAIN SELECT id
FROM subject;

当获取的数据直接通过读取索引树就可以获取时,使用 index 类型。
- ALL 类型。
EXPLAIN SELECT *
FROM subject;

需要遍历全表以找到匹配行。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




