Mysql explain

explain 常用于分析sql语句的执行效率,使用时在正常的select语句之前添加explain并执行就会返回执行信息,返回的执行信息如下:

 id:id列的编号是select的序列号,有几个select就有几个id,并且id是按照select出现的顺序增长的,id列的值越大优先级越高,id相同则是按照执行计划列从上往下执行,id为空则是最后执行。

select_type:  表示对应行是简单查询还是复杂查询。

  1、simple:不含有子查询和union的简单查询

  2、subquery:包含在select中的子查询

  3、primary:复杂查询中最外层的查询语句

  4、derived:包含在from中的子查询,mysql会将子查询的结果保存在临时表(衍生表)中;

  5、union:在union后的查询语句,union result为合并结果(union result<1, 2>中1,2表示id列的值)

table:表示当前分析的表

partitions:查询匹配记录的分区

type:表连接的类型,mysql如何查找表中的行,从左到右最优到最差:system > const > eq_ref > ref > range > index > all

  null:mysql在优化阶段分解查询语句,在执行阶段不在访问表或者索引。

  system、const:常量。MySQL对查询的某部分进行优化并把其转化成一个常量(可以通过show warnings命令查看结果)。system是const的一个特例,表示表里只有一条元组匹配时为system。

  eq_ref:主键或唯一键索引被连接使用,最多只会返回一条符合条件的记录。简单的select查询不会出现这种type。

  ref:相比eq_ref,不使用唯一索引,而是使用普通索引或者唯一索引的部分前缀,索引和某个值比较,会找到多个符合条件的行。

  range:通常出现在范围查询中,比如in、between、大于、小于等。使用索引来检索给定范围的行。

  index:扫描全索引拿到结果,一般是扫描某个二级索引,二级索引一般比较少,所以通常比ALL快一点。

  all:全表扫描,扫描聚簇索引的所有叶子节点。

possible_keys:在查询中可能用到的索引。如果该列为NULL,则表示没有相关索引,可以通过检查where子句看是否可以添加一个适当的索引来提高性能。

 key: 此列显示MySQL在查询时实际用到的索引。在执行计划中可能出现possible_keys列有值,而key列为null,这种情况可能是表中数据不多,MySQL认为索引对当前查询帮助不大而选择了全表查询。如果想强制MySQL使用或忽视possible_keys列中的索引,在查询时可使用force index、ignore index。
key_len:MySQL在索引里使用的字节数,通过此列可以算出具体使用了索引中的那些列。索引最大长度为768字节,当长度过大时,MySQL会做一个类似最左前缀处理,将前半部分字符提取出做索引。当字段可以为null时,还需要1个字节去记录。

ref:显示key列记录的索引中,表查找值时使用到的列或常量。常见的有const、字段名

rows:MySQL在查询中估计要读取的行数。注意这里不是结果集的行数。

Extra:此列是一些额外信息。常见的重要值如下:

  1)Using index:使用覆盖索引(如果select后面查询的字段都可以从这个索引的树中获取,不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其它字段值,这种情况一般可以说是用到了覆盖索引)。

  2)Using where:使用 where 语句来处理结果,并且查询的列未被索引覆盖。

  3)Using index condition:查询的列不完全被索引覆盖,where条件中是一个查询的范围。 

  4)Using temporary:MySQL需要创建一张临时表来处理查询。出现这种情况一般是要进行优化的。

  5)Using filesort:将使用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。

  6)Select tables optimized away:使用某些聚合函数(比如 max、min)来访问存在索引的某个字段时。

参考文档链接:https://blog.csdn.net/fsdfkjai/article/details/121770629

最新文章

  1. 中文分词工具探析(一):ICTCLAS (NLPIR)
  2. ios category,protocol理解
  3. NOIP2008 普及组T1 ISBN号码 解题报告-S.B.S.
  4. 在Windows上一键编译各种版本的Protobuf
  5. pymongo 例子
  6. python参考手册--第4、5、6、7章
  7. js计算2个日期相差的天数,两个日期相差的天数,日期相隔天数
  8. 《编写高质量代码:改善Python程序的91个建议》读后感
  9. Java之关键字static和final的使用
  10. France \&#39;98(概率)
  11. 如何成为一名优秀的web前端工程师(转给自己,共勉)
  12. NLPIR大数据挖掘平台新增敏感词扫描功能
  13. 极重要基础命令三剑客加find
  14. 电力 Web SCADA 工控组态编辑器
  15. stc15f104w模拟串口使用
  16. 谁记录了mysql error log中的超长信息(记pt-stalk一个bug的定位过程)
  17. IIS 日志分析
  18. CS小分队第二阶段冲刺站立会议(6月1日)
  19. Scrum Meeting Beta - 5
  20. React如何进行事件传参

热门文章

  1. thinkphp6+composer+无集成工具 配置php项目环境
  2. vuex中的state、mutations 、actions 、getters四大属性如何使用
  3. nginx配置文件过大导致起不来
  4. asp.net core 浏览器向服务端传递对象或对象数组参数服务端接收方式
  5. springboot配置文件中的基本配置
  6. 解决npm ERR! Cannot read properties of null (reading ‘pickAlgorithm‘)报错问题
  7. vue项目前台带表格的页面,让表格根据屏幕大小自适应高度,小屏幕时不出现多个滚动条
  8. NIO 缓冲区 ByteBuffer 之黏包和半包
  9. jmeter参数化时最常用随机函数
  10. echart一个框里放三个饼图案例