Mysql explain 每个属性含义
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子句看是否可以添加一个适当的索引来提高性能。
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
最新文章
- 中文分词工具探析(一):ICTCLAS (NLPIR)
- ios category,protocol理解
- NOIP2008 普及组T1 ISBN号码 解题报告-S.B.S.
- 在Windows上一键编译各种版本的Protobuf
- pymongo 例子
- python参考手册--第4、5、6、7章
- js计算2个日期相差的天数,两个日期相差的天数,日期相隔天数
- 《编写高质量代码:改善Python程序的91个建议》读后感
- Java之关键字static和final的使用
- France \&#39;98(概率)
- 如何成为一名优秀的web前端工程师(转给自己,共勉)
- NLPIR大数据挖掘平台新增敏感词扫描功能
- 极重要基础命令三剑客加find
- 电力 Web SCADA 工控组态编辑器
- stc15f104w模拟串口使用
- 谁记录了mysql error log中的超长信息(记pt-stalk一个bug的定位过程)
- IIS 日志分析
- CS小分队第二阶段冲刺站立会议(6月1日)
- Scrum Meeting Beta - 5
- React如何进行事件传参
热门文章
- thinkphp6+composer+无集成工具 配置php项目环境
- vuex中的state、mutations 、actions 、getters四大属性如何使用
- nginx配置文件过大导致起不来
- asp.net core 浏览器向服务端传递对象或对象数组参数服务端接收方式
- springboot配置文件中的基本配置
- 解决npm ERR! Cannot read properties of null (reading ‘pickAlgorithm‘)报错问题
- vue项目前台带表格的页面,让表格根据屏幕大小自适应高度,小屏幕时不出现多个滚动条
- NIO 缓冲区 ByteBuffer 之黏包和半包
- jmeter参数化时最常用随机函数
- echart一个框里放三个饼图案例