MySQL explain学习笔记
explain用法
查询居民id为“004386f02b6511e8ad1300163e08fb5b”的居民所在的部门信息:
1 | explain select department.* from department,westation,citizen |
id | select_type | table | type | possible_key | key | key_len | ref | rows | Extra |
---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | citizen | const | PRIMARY,FK_Citizen_Westation | PRIMARY | 128 | const | 1 | |
1 | SIMPLE | westation | const | PRIMARY,department_id,FK_deparment_westation | PRIMARY | 128 | const | 1 | |
1 | SIMPLE | department | const | PRIMARY | PRIMARY | 128 | const | 1 |
各列的含义:
id:查询id,id相同的从上往下顺序执行;id不同的,值越大越先执行;id有相同和不相同的,综合前两种,值大的先执行,相同的顺序执行。
select_type:查询类型
- PRIMARY:包含子查询SQL中的主查询(最外层)
- SUBQUERY:包含子查询SQL中的子查询(非最外层)
- simple:简单查询(不包含子查询、union)
- derived:衍生查询(使用到了临时表)
a. 在from子查询中有一张表
b. 在from子查询中如果有table1 union table2,则table1就是derived,table2就是union
type:索引类型,常见索引类型从快到慢排序:system > const > eq_ref > ref > range > index > all
- system:只有一条数据的系统表或衍生表只有一条数据的主查询
- const:仅仅能查到一条数据的SQL,用于Primary Key或unique索引(与索引类型有关)
- eq_ref:唯一性索引,对于每个索引键的查询,返回匹配唯一行数据(有且只有一条,不能多,不能为0),常见于唯一索引和主键索引
- ref:与eq_ref一样,对于每个索引键的查询,返回匹配的所有行数据(不唯一)
- range:使用一个索引检索给定范围的行
- index: 索引树遍历
- all:全表遍历
possible_key:可以使用的索引
key:实际使用的索引
key_len:索引中使用的字节数
ref:列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
rows:估算出结果集行数
Extra:详细信息
Using where:用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤
ing temporary:示MySQL需要使用临时表来存储结果集,常见于排序和分组查询,常见 group by ; order by
ing filesort:Query中包含 order by 操作,而且无法利用索引完成的排序操作称为“文件排序”
MySQL explain学习笔记