问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MySQL执行计划分析EXPLAIN

发布网友 发布时间:2024-09-30 04:38

我来回答

1个回答

热心网友 时间:2024-10-14 08:20

EXPLAIN SELECT ……

变体:

EXPLAIN EXTENDED SELECT …… 将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句

创建员工表Employee

创建经理表Manager

首先,看看下面这两条语句的执行结果,它们分别代表什么意思呢?

下图中结果部分的Type为ALL, 表示执行的是全表扫描。

下图中执行结果部分Type为const,key为PRIMARY, 表示使用了主键索引,因为id为主键。

那么,每一列分别代表什么意思呢,请看下面的解释。

select_type 表示查询中每个select子句的类型(简单 OR复杂)

a.SIMPLE:查询中不包含子查询或者UNION

b.查询中若包含任何复杂的子部分,最外层查询则被标记为:PRIMARY

c.在SELECT或WHERE列表中包含了子查询,该子查询被标记为:SUBQUERY

d.在FROM列表中包含的子查询被标记为:DERIVED(衍生)

e.若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在 FROM子句的子查询中,外层SELECT将被标记为:DERIVED

f.从UNION表获取结果的SELECT被标记为:UNION RESULT

MySQL执行计划EXPLAIN主要可以通过type来进行分析:

type表示MySQL在表中找到所需行的方式,又称“访问类型”,常见类型如下:(从上至下,效果依次变好)

ALL:Full Table Scan。 index:Full Index Scan。

range:索引范围扫描。

ref :非唯一性索引扫描。

eq_ref :唯一性索引扫描。

const,system:将查询转换为一个常量。

null:MySQL在优化过程中分解语句,执行时甚至不用访问表或索引

ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行,示例如下:

ename字段上没有索引,所以也是全表扫描。

index:Full Index Scan,index与ALL区别为index类型只遍历索引树

ID字段为主键索引,在索引中扫描。

range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行, 常见于between、<、>,IN等的查询

  

ref:非唯一性索引扫描,返回匹配某个单独值的所有行。常见于使用非唯一索引即唯一索引的非唯一前缀进行的查找

name和age和覆盖索引,这里只使用了name,即只使用了唯一性索引的一部分,故为ref。

eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。 常见于主键或唯一索引扫描

MID对于表Manager是唯一的,主键索引,来与employee连接,故type为eq_ref。

const、system:当MySQL对查询某部分进行优化,并转换为一个常量时, 使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转

换为一个常量。

system是const类型的特例,当查询的表只有一行的情况下, 使用system。

exployee中ID为主键索引,可以直接定位,故为const,而衍生后的结果集A中只有一条记录,故为type为system。

NULL:MySQL在优化过程中分解语句,执行时甚至不用访问表或索引。

ID= SELECT MIN(ID)说明ID已确定,使用EXPLAIN EXTENDED优化,所以type为null,mysql自动优化,无需去访问表或索引。

使用show warnings查看优化后得到的结果。

其他列的含义如下:

possible_keys 指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用

key 显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL

key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度

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

rows 表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数

Extra 包含不适合在其他列中显示但十分重要的额外信息 如using where,using index

MySQL的执行计划分析在实际工作中也是非常重要的,SQL SERVER可以通过“显示估计的执行计划”来查看sql的执行计划,而MySQL则是通过explain + 查询语句来查看其执行计划,找出其索引使用情况,执行顺序等等,从而进行优化,使查询的性能得到提升。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
易企秀如何分享链接给微信好友?-易企秀分享链接给微信好友的方法 华为荣耀3c系统辅助功能服务老是自动关闭,求解决方案。 我用一键清理忽... 华为荣耀3c手机双击唤醒屏幕不好用了怎么办? 荣耀手机刷机包从哪下 木地板为啥走过会响 瓷砖块要斜成几度角人踩上去不会烂 刚出生的婴儿肚子胀怎么办 新生儿涨肚子按摩图 刚生小宝宝胀气怎么办 白果怎么炒好吃 白果可以制作哪些美食 喝铁观音有什么好处 喝铁观音的好处 求mathematica的几道题的解题过程1.作{x=1+cos(t),y=si... 623090181的是什么银行 梦见开火车脱轨是什么意思梦见座小货车从小货车上往下跳突然小火车脱... 什么是投资投资 如何把相册照片变成素描照如何把相册照片变成素描照片 梦见买熟肉是什么意思? 枣树什么时候修剪 枣树的修剪时间 2021抖音文案短句 抖音最火2021年最新的句子 王者荣耀可以拉黑吗? 右眼上眼皮老是跳是什么原因 这样改装声控灯 实现开关控制白炽灯对么? 声控灯一直亮怎么回事 声控灯为什么不能用节能灯泡 我家孩子学习态度很不端正,我该怎么教育她? 我觉得我家孩子学习态度有些不端正,我该怎么纠正他的态度? ...学习态度很不端正,一直不想学习,怎么才能让他好好学习? 北海投资69800是? 嫩肉粉和小粉有什么区别 广西北海1040工程69800是传销吗 word先输入文本然后怎么置于文本框如何在word中输入文本 南辕北辙说课稿 三年级语文下册9课《南辕北辙》楚国人出发以后会发生什么事情 ...去补办,新的卡还可以查到里面保存的电话号码吗,不然在网上可以查到... 白鹭有哪些生活习性? QQ附近的人里面的资料,在那里可以把情感状态还有故乡什么的都隐藏起 ...故事新编、野草、朝花夕拾、故乡等的详细资料 员工报销回家路费计入什么科目 报销过路费记什么科目 蒹葭写了哪些景物 数字货币有哪些区块链股票(数字货币区块链龙头股有哪些) 虾皮要炒多久 虾皮炒多久好? 为什么正比例函数y=kx(k是常数,k不等于0)的图像是经过(0,0),(1... 智能锁显示屏不亮是什么原因 智能锁面板不亮 智能锁突然失灵了怎么回事 把秋思写成故事30字 梦见自已给香烟别人 篮球裁判篮球裁判员的工作 如何设置word跨页断行? 在word文档中怎么跨页断行?