MySQL explain学习笔记

explain用法

查询居民id为“004386f02b6511e8ad1300163e08fb5b”的居民所在的部门信息:

1
2
3
explain select department.* from department,westation,citizen
where department.id = westation.department_id and westation.id = citizen.westation_id
and citizen.id="004386f02b6511e8ad1300163e08fb5b"
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

各列的含义:

  1. id:查询id,id相同的从上往下顺序执行;id不同的,值越大越先执行;id有相同和不相同的,综合前两种,值大的先执行,相同的顺序执行。

  2. select_type:查询类型

    • PRIMARY:包含子查询SQL中的主查询(最外层)
    • SUBQUERY:包含子查询SQL中的子查询(非最外层)
    • simple:简单查询(不包含子查询、union)
    • derived:衍生查询(使用到了临时表)
      a. 在from子查询中有一张表
      b. 在from子查询中如果有table1 union table2,则table1就是derived,table2就是union
  3. type:索引类型,常见索引类型从快到慢排序:system > const > eq_ref > ref > range > index > all

    • system:只有一条数据的系统表或衍生表只有一条数据的主查询
    • const:仅仅能查到一条数据的SQL,用于Primary Key或unique索引(与索引类型有关)
    • eq_ref:唯一性索引,对于每个索引键的查询,返回匹配唯一行数据(有且只有一条,不能多,不能为0),常见于唯一索引和主键索引
    • ref:与eq_ref一样,对于每个索引键的查询,返回匹配的所有行数据(不唯一)
    • range:使用一个索引检索给定范围的行
    • index: 索引树遍历
    • all:全表遍历
  4. possible_key:可以使用的索引

  5. key:实际使用的索引

  6. key_len:索引中使用的字节数

  7. ref:列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

  8. rows:估算出结果集行数

  9. Extra:详细信息

    • Using where:用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤

    • ing temporary:示MySQL需要使用临时表来存储结果集,常见于排序和分组查询,常见 group by ; order by

    • ing filesort:Query中包含 order by 操作,而且无法利用索引完成的排序操作称为“文件排序”

作者

Junle

发布于

2020-08-06

更新于

2024-03-22

许可协议

评论