一、这吊毛的出身
sql性能优化方向利器,他会显示出每条sql 执行状况,基本上要看你的sql是否走索引,以及索引优化索引他必不可少!
二、使用方式
1.使用navicat等可视化工具
2.在sql语句上面加上:explain
三、展示内容详解
1.id:代表实在mysql内部加载的顺序
加载规则:
- id 相同的从上往下顺序执行
- id 不同的 较大的先执行
2.select_type:代表此条语句的查询的类型
- SIMPLE(小写:simple) : 简单的select查询,查询中不包含子查询或者UNION
- PRIMARY(小写:primary) :查询中包含复杂的子部分,最外层则会被标记
- SUBQUERY(小写:subquery) :在select或者 where 列表中包含了子查询
- DERIVED(小写:derived) :在from列表中包含的子查询会被标记为DERIVED(衍生)
- UNION(小写:union) :若第二个select出现在UNION后,则会被标记为UNION,若UNION包含在FROM子句的子查询中,外层的select 将为被标记为:DERIVED
- UNION RESULT(小写:union result):从UNION表中获取结果的SELECT
3.table:是关于那张表的
4.type:访问类型
有如下几种情况
从好到坏
system -> const -> eq_ref -> ref -> range -> index -> all
100w以上的数据 一般优化到 range or ref
- system:只有一条记录,这种情况太少了
- const:扫描了索引,一次就完成
- qe_ref:使用的唯一索引进行扫描
- ref:非唯一性的索引扫描,返回多行
- range:使用了between and 之类的范围语句缩小查询数量
- index:遍历了索引树
5.possible_key:预计使用到的索引键
6.key:事件使用的索引键
7.ref:那些值被用于索引列的查找
8.rows:共查询多少行
9.extra:额外的说明,举例:
- using filesort 出现这个说明mysql引用自己的排序,也就是没有按照索引来
- using temprary 出现这个说明mysql先创建了一张临时表,然后再在这个临时表里操作,再删除这个表,性能较差
- using index 使用了索引,性能不错