前言
在之前的面试过程中,问到执行计划,有很多童鞋不知道是什么"color: #ff0000">一. 执行计划能告诉我们什么?
- SQL如何使用索引
- 联接查询的执行顺序
- 查询扫描的数据函数
二. 执行计划中的内容
SQL执行计划的输出可能为多行,每一行代表对一个数据库对象的操作
1. ID列
- ID列中的如果数据为一组数字,表示执行SELECT语句的顺序;如果为NULL,则说明这一行数据是由另外两个SQL语句进行 UNION操作后产生的结果集
- ID值相同时,说明SQL执行顺序是按照显示的从上至下执行的
- ID值不同时,ID值越大代表优先级越高,则越先被执行
演示
可以看到上面的执行计划返回了3行结果,id列的值可以看作是SQL中所具有的SELECT操作的序号
由于上述SQL中只有一个SELECT,所以id全为1,因此,我们就要按照由上至下读取执行计划
按照我们的SQL语句,我们会认为执行顺序是a,b,c,但是通过上图可以发现,Mysql并不是完成按照SQL中所写的顺序来进行表的关联操作的
执行对表的执行顺序为a,c,b,这是由于MySQL优化器会根据表中的索引的统计信息来调整表关联的实际顺序
2. SELECT_TYPE列
值
含义
SIMPLE
不包含子查询或是UNION操作的查询
PRIMARY
查询中如果包含任何子查询,那么最外层的查询则被标记为PRIMARY
SUBQUERY
SELECT 列表中的子查询
DEPENDENT SUBQUERY
依赖外部结果的子查询
UNION
Union操作的第二个或是之后的查询的值为union
DEPENDENT UNION
当UNION作为子查询时,第二或是第二个后的查询的select_type值
UNION RESULT
UNION产生的结果集
DERIVED
出现在FROM子句中的子查询
3. TABLE列
包含以下几种结果:
输出去数据行所在表的名称,如果表取了别名,则显示的是别名
<union M,N>: 由ID为M,N查询union产生的结果集
<derived N>/<subquery N> :由ID为N的查询产生的结果
4. PARTITIONS列:
查询匹配的记录来自哪一个分区
对于分区表,显示查询的分区ID
对于非分区表,显示为NULL
5. TYPE列
按性能从高至低排列如下:
值
含义
system
这是const联接类型的一个特例,当查询的表只有一行时使用
const
表中有且只有一个匹配的行时使用,如对主键或是唯一索引的查询,这是效率最高的联接方式
eq_ref
唯一索引或主键索引查询,对应每个索引键,表中只有一条记录与之匹配
ref
非唯一索引查找,返回匹配某个单独值的所有行
ref_or_null
类似于ref类型的查询,但是附加了对NULL值列的查询
index_merge
该联接类型表示使用了索引合并优化方法
range
索引范围扫描,常见于between、>、<这样的查询条件
index
FULL index Scan 全索引扫描,同ALL的区别是,遍历的是索引树
ALL
FULL TABLE Scan 全表扫描,这是效率最差的联接方式
6. Extra列
包含MySQL如何执行查询的附加信息
值
含义
Distinct
优化distinct操作,在找到第一个匹配的元素后即停止查找
Not exists
使用not exists来优化查询
Using filesort
使用额外操作进行排序,通常会出现在order by或group by查询中
Using index
使用了覆盖索引进行查询
Using temporary
MySQL需要使用临时表来处理查询,常见于排序,子查询,和分组查询
Using where
需要在MySQL服务器层使用WHERE条件来过滤数据
select tables optimized away
直接通过索引来获得数据,不用访问表,这种情况通常效率是最高的
7. POSSIBLE_KEYS列
指出MySQL能使用哪些索引来优化查询
查询列所涉及到的列上的索引都会被列出,但不一定会被使用
8. KEY列
查询优化器优化查询实际所使用的索引
如果表中没有可用的索引,则显示为NULL
如果查询使用了覆盖索引,则该索引仅出现在Key列中
9. KEY_LEN列
显示MySQL索引所使用的字节数,在联合索引中如果有3列,假如3列字段总长度为100个字节,Key_len显示的可能会小于100字节,比如30字节,这就说明在查询过程中没有使用到联合索引的所有列,只是利用到了前面的一列或2列
- 表示索引字段的最大可能长度
- Key_len的长度由字段定义计算而来,并非数据的实际长度
10. Ref列
表示当前表在利用Key列记录中的索引进行查询时所用到的列或常量
11. rows列
- 表示MySQL通过索引的统计信息,估算出来的所需读取的行数(关联查询时,显示的是每次嵌套查询时所需要的行数)
- Rows值的大小是个统计抽样结果,并不十分准确
12. Filtered列
- 表示返回结果的行数占需读取行数的百分比
- Filtered列的值越大越好(值越大,表明实际读取的行数与所需要返回的行数越接近)
- Filtered列的值依赖统计信息,所以同样也不是十分准确,只是一个参考值
三. 执行计划的限制
- 无法展示存储过程,触发器,UDF对查询的影响
- 无法使用EXPLAIN对存储过程进行分析
- 早期版本的MySQL只支持对SELECT语句进行分析
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 群星.1992-电视金曲巡礼VOL.2【EMI百代】【WAV+CUE】
- 廖昌永《情缘HQ》头版限量[低速原抓WAV+CUE]
- 蔡琴《老歌》头版限量编号MQA-24K金碟[低速原抓WAV+CUE]
- 李嘉《国语转调》3CD[WAV+CUE]
- 谭咏麟《爱的根源 MQA-UHQCD》2022头版限量编号 [WAV+CUE][1G]
- 江洋 《江洋原创琵琶作品专辑》[320K/MP3][118.08MB]
- 江洋 《江洋原创琵琶作品专辑》[FLAC/分轨][228.33MB]
- 《战舰世界》语音包文件夹位置介绍
- 《CSGO》送好友皮肤方法介绍
- 《山羊模拟器重制版》发售平台说明
- 刘德华2002-美丽的一天[香港首批大包装首版][WAV]
- 刘文正《金装刘文正不朽经典金曲》2CD(1995环星)][WAV+CUE]
- 周慧敏《94美的化身演唱会》宝丽金1995港版2CD[WAV+CUE]
- 娃娃.1997-精选180绝版冠军精丫滚石】【WAV+CUE】
- 娃娃.1997-精选290巅峰情歌经典【滚石】【WAV+CUE】