你会看MySQL的执行计划(EXPLAIN)吗?
SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介
EXPLAIN的用法很简单,只需要在你的SQL前面加上EXPLAIN即可。例如:explainselectfromt;
PS:insert、update、delete同样可以通过explain查看执行计划,不过通常我们更关心select的执行情况
你会看到如下输出:idselecttypetablepartitionstypepossiblekeyskeykeylenrefrowsfilteredExtra1SIMPLEt1NULLALLNULLNULLNULLNULL1100。00NULL1rowinset,1warning(0。00sec)
执行计划结果字段说明如下表:
字段
JSONName
说明
id
selectid
查询标识符
selecttype
查询类型
table
tablename
查询记录所在表
partitions
partitions
查询匹配的分区(没有进行表分区,则为NULL)
type
accesstype
连接类型
possiblekeys
possiblekeys
可以选择的索引
key
key
实际上用到的索引
keylen
keylength
被用到索引的长度,比如联合索引中有几个被用到
ref
ref
与索引相比较的列
rows
rows
要扫描的行数(估算值)
filtered
filtered
按表条件过滤的行百分比
Extra
附加信息
EXPLAIN的用法非常简单,看一眼就会。但是要根据输出结果找到问题并解决,就没那么容易了。就好比操作拍CT的机器可能相对简单,但要从CT成像中看出问题并给出治疗方案就需要丰富的知识和大量的临床经验了。
因此,我们需要知道每个字段代表什么指标;什么样的取值是我们想要的,什么样是需要优化的;最后还要知道如何优化成我们想要的值。字段详解id
标识符。查询操作的序列号。通常都是正整数,但当有UNION操作时,该值可以为NULL。
id相同explainselectfromt1wheret1。idin(selectt2。idfromt2);idselecttypetablepartitionstypepossiblekeys。。。1SIMPLEt1NULLALLPRIMARY。。。。1SIMPLEt2NULLeqrefPRIMARY。。。。2rowsinset,1warning(0。00sec)
id不同explainselectfromt1wheret1。id(selectt2。idfromt2);idselecttypetablepartitionstypepossiblekeys。。。1PRIMARYNULLNULLNULLNULL。。。。2SUBQUERYt2NULLindexNULL。。。。2rowsinset,1warning(0。00sec)
id包含NULLexplainselectidfromt1union(selectidfromt2);idselecttypetablepartitionstypepossiblekeys。。。1PRIMARYt1NULLindexNULL。。。2UNIONt2NULLindexNULL。。。NULLUNIONRESULTunion1,2NULLALLNULL。。。3rowsinset,1warning(0。00sec)
id为NULL时,table列值为unionM,n格式,表示该行为id为m和n联合的结果
id顺序的规则:如果id相同,执行顺序由上到下;如果不同,执行顺序由大到小。selecttype
SELECT类型,常见的取值如下表:
查询类型
JSONName
说明
SIMPLE
简单SELECT(没有UNION或子查询)
PRIMARY
查询包含UNION或子查询,则最外层的查询被标识为PRIMARY
UNION
UNION中的第二个或更后面的SELECT语句
DEPENDENTUNION
dependent(true)
UNION中的第二个或更后面的SELECT语句,依赖于外部查询
UNIONRESULT
unionresult
UNION的结果
SUBQUERY
子查询中的第一个SELECT语句
DEPENDENTSUBQUERY
dependent(true)
子查询中的第一个SELECT语句,依赖于外部查询
DERIVED
派生表SELECT
DEPENDENTDERIVED
dependent(true)
派生表依赖于另一个表
MATERIALIZED
materializedfromsubquery
将子查询的结果物化(生成临时表)
UNCACHEABLESUBQUERY
cacheable(false)
结果无法缓存且必须为外部查询的每一行重新计算的子查询
UNCACHEABLEUNION
cacheable(false)
UNION中的第二个或更后面的SELECT语句,属于不可缓存子查询(参考UNCACHEABLESUBQUERY)UNION或者子查询MySQL会自动产生临时表。派生表可以简单理解为具有别名的临时表。生成临时表的这个动作称为物化(水变成蒸汽叫汽化)
临时表通常在内存里,当其size超过一定范围会被存入磁盘临时表selectfromt1joint2ont1。idt2。idwheret1。id1;派生表,临时表取个别名selectfrom(selectfromt1)t;type
连接字段为主键或者唯一索引,此类型通常出现于多表的join查询,表示对于前表的每一个结果,都对应后表的唯一一条结果。并且查询的比较是操作,查询效率比较高。
取值
说明
system
表中只有一条记录,const类型的特例
const
表中最多有一条匹配数据,用于主键或唯一索引的等值匹配
eqref
出现在多表查询中,前表结果中的每一条记录,在后表中有唯一的对应。同样是主键或唯一索引等值匹配
ref
普通索引的等值匹配(或)
fulltext
全文索引
refornull
跟ref类似,增加了对NULL的判断
indexmerge
合并索引(用到了两个及以上的索引)
uniquesubquery
子查询用到主键或唯一索引
indexsubquery
子查询用到普通索引
range
范围匹配(、、、、、、ISNULL、、BETWEEN、LIKE或IN)
index
扫描索引树(在覆盖索引的情况下优于ALL)
ALL
全表扫描
还有一种NULL的情况,比如selectmin(id)fromt1,但MySQL官方没有提及这种情况,所以我们不在此讨论
性能从优到劣依次为:
systemconsteqrefreffulltextrefornullindexmergeuniquesubqueryindexsubqueryrangeindexALL
优化原则:最好做到const,至少做到ref,避免ALLref
查询中用来和索引比较的类型,如:id1,值为const;如果是联合查询或者子查询则为关联的字段;如果使用了函数,则为func。Extra
Extra用来存放一些附加信息,通常用来配合type的输出来做SQL优化。扩展desc
desc与explain作用相同,可以互相代替,后面的例子中均使用desc来查看执行计划。format
explaindesc还支持一些参数,format顾名思义,是用来格式化输出结果的。它包括两种格式化方式:tree和json。
比如:descformattreeselectfromt1wheret1。idin(selectt2。idfromt2wheret2。id1);
输出格式如下:EXPLAINNestedloopinnerjoin(cost0。70rows1)Filter:(t2。id1)(cost0。35rows1)Indexscanont2usinga2uidx(cost0。35rows1)Singlerowindexlookupont1usingPRIMARY(idt2。id)(cost0。35rows1)1rowinset(0。00sec)
执行计划结果以树形结构展示,可以清晰的看出语句之间的嵌套关系,还有基本的执行成本(cost)。
使用json方式:descformatjsonselectfromt1;
输出结构为一个JSON结构:EXPLAIN{queryblock:{selectid:1,costinfo:{querycost:0。35},table:{tablename:t1,accesstype:ALL,rowsexaminedperscan:1,rowsproducedperjoin:1,filtered:100。00,costinfo:{readcost:0。25,evalcost:0。10,prefixcost:0。35,datareadperjoin:56},usedcolumns:〔id,a1,b1〕}}}1rowinset,1warning(0。00sec)
简介表中的JSONName指的就是这里JSON结果的key
json格式会展示出更加详细的信息,可以看到执行成本划分的更加细致了,方便定位到慢SQL的问题具体出现在哪个环节。analyze
除了format以外,explaindesc还可以使用analyze参数:descanalyzeselectfromt1wheret1。idin(selectt2。idfromt2wheret2。id1);
输出结果:EXPLAINNestedloopinnerjoin(cost0。70rows1)(actualtime0。018。。0。018rows0loops1)Filter:(t2。id1)(cost0。35rows1)(actualtime0。016。。0。016rows0loops1)Indexscanont2usinga2uidx(cost0。35rows1)(actualtime0。015。。0。015rows0loops1)Singlerowindexlookupont1usingPRIMARY(idt2。id)(cost0。35rows1)(neverexecuted)1rowinset(0。00sec)
可以看出,analyze的输出结果是基于formattree的
上面执行计划中(formatjsontree)的执行成本(cost)都是估值,而analyze中的执行成本是真实值。actualtime代表对应SQL执行的真实时间,单位为毫秒。最后
执行计划的结果中,我们最关心的是type,它能够最直接的反映出SQL执行效率处在什么级别。然后再结合其他字段(例如Extra)来做更细致的分析。还可以通过各种参数,来分解每个环节的执行情况。
今天的内容就到这里,有哪些想要了解的可以留言告诉我。
2013暑期征文古城民俗风开封陀螺品学网专稿未经允许不得转载漫步在新柳如烟、丛丛新绿簇拥的开封滨河路环城公园,你会感动于古城开封那勃发的生命力与厚重的文化底蕴:一袭白衣白裤的鹤发童颜的老者,那精准到位的一……
难忘的一件小事叙事作文那是一件令我终生难忘的事。那是在暑假里发生的一件事,当时我才8岁。记得那一年,我在院子里看见几位大哥哥在骑自行车,骑得可棒了!我心里想:妈妈从前不是也给我买了一辆自行车吗?我怎……
春天描写春天的作文1100字汇编7篇无论在学习、工作或是生活中,许多人都写过作文吧,作文要求篇章结构完整,一定要避免无结尾作文的出现。一篇什么样的作文才能称之为优秀作文呢?下面是小编收集整理的春天描写春天的作文1……
军训生活周记8篇军训是个苦乐交织的过程,下面小编整理了军训生活周记,欢迎阅读参考!军训生活周记一9月26日,盼望已久的军训终于到来了,这让我们既激动又期待,我们都怀着热情与期望去期待这次……
深入布局智能物联赛道海康威视2021年实现营收814。20亿本报记者吴文婧见习记者冯思婕4月15日晚间,杭州海康威视数字技术股份有限公司(下称海康威视)发布了2021年年度报告。报告期内,公司实现营业总收入814。20亿元,比上年……
表示心情不好的词语有哪些词语包括单词、词组及整个词汇,文字组成语句文章的最小组词结构形式。以下是小编收集的表示心情不好的词语,欢迎查看!1、垂头丧气:垂头:耷拉着脑袋;丧气:神情沮丧。是指因失败……
运动会鼓号队入场式解说词鼓号队入场式解说词:1、向我们走来的是学校鼓号队,他们英姿飒爽,充满了奋发向上的精神。看那坚定的步伐,激昂、嘹亮的鼓号声,不正体现我们学校ldquo;诚信、协作、博学、创……
有关马的作文600字作文一:清明踏青mdash;寻找ldquo;草泥马rdquo;ldquo;草泥马rdquo;mdash;传说中的ldquo;神马rdquo;,据说定居在了兰州动物园。……
三年级想象作文我的四十岁人生目标40岁,是人的一生中,最灿烂,最辉煌的时候,是不惑之年事的时候。当我四十多岁的时候,我可能会成为一名医生,医生最主要的就是拥有对病人的热忱和慎密的思维,手拿着手术刀,站在……
小学六年级语文下册第六单元作文4篇1、难忘的小学生活时间过的真快,一晃眼,六年的光阴就要像云烟一样的过去了,我就要毕业了。小学的生活是多么令人迷恋而依依不舍,现在我们就要分道扬镳了。我就要毕业了,在……
写人优秀作文我敬佩的一个人我敬佩的一个人身上肯定有着某种美好的特质,值得我们学习。下面是关于敬佩的一个人的作文,希望对你有帮助。我敬佩的一个人作文在我所熟悉的人中,我最敬佩的人是我的奶奶。……
老师不在时小学作文600字你们班人都没吃早饭啊!歌唱得像老牛拉破车那样!不想上音乐课就给我回班抄书去!随着音乐老师的高分贝尖叫,我们便灰溜溜地回到班上去了。老师从网上找到一段超长的文字放在WORD……
I开头的英语谚语英语谚语指流传于英国和美国的比较简练而且言简意赅的话语。小编为你整理了I开头的英语谚语,希望对你有帮助!Iamcoughtbetweenthedevilandthedee……
腾蛇乘雾终为土灰第七章第七章密室云初抬头看了看周围,叹了口气,是呀!这间房实在是太简单了!连任何装饰都没有。云初第一时间想到了机关,他便仔仔细细的摸了一遍这间密室,连半个凸起都没有。云初清点了……
天使作文700字不知道从什么时候起,学习上的种种困难使我曾经平静得宛如海平面的内心不再平静,几次不尽如人意的成绩使我一度想到了放弃。昨天又复习到很晚,到最后眼皮都开始打架了,在朦胧中,我似乎看……
汤姆猫携手百度超级链上线3D数字藏品本报记者吴文婧见习记者冯思婕5月24日,汤姆猫(300459)官方发布消息称,旗下全球知名IP会说话的汤姆猫家族携手百度超级链,将于5月25日26日正式发布时代逐光者3D……
2017年中考满分作文守候让梦更长久童年会消逝,但纯真让童心永驻;亲人会远离,但思念让亲情长存;朋友会久别,但真诚让友情不老,小编收集了守候让梦更长久作文,欢迎阅读。守候让梦更长久ldquo;醉里不知谁是我……
初中作文秋之幻想秋,如同一幅幅油画编织的优美旋律给人以无限遐想雨之幻好久没下雨了,不下倒好,一下就是好几天,细细的,长长的,似少女披散的秀发,闪着光,夹着声,飘逸地落入人间,落入水……
热爱生命日记450字热爱生命是人类的基本,像一些服毒自杀,患了白血病、非典、艾滋病就等死的人就是不热爱生命的。像张海迪她患了那么重的病但她并不放弃生命,仍然那样坚强地面对生活。张海迪五岁时因……
高二写人作文石头剪刀布石头、剪刀哗啦哗啦布熟悉的声音又在我耳边响起,稚嫩的腔调又一次地萦绕在我的心际。这种在我们中学生看来早已过时且无聊的游戏却再次扣动了我的心扉他,是我幼时的玩伴,一个如石头……
搞笑作文及师评元旦时,我们全家一起到历史博物馆参观冰马桶师评:有这样的东东吗?我也要去!(兵马俑)早上起床整里遗容后,我们到学校集合,搭车前往垦丁毕业旅行师评:不知道你家是……
2017快乐的寒假生活作文优秀篇导语:放寒假全家一起出去玩,紫蝶幽谷点点斑蝶好奇妙,情人瀑布细细流水好清凉,菠萝蜜、人面蜘蛛真是大,玉山群峰好像戴上白帽子,出外走走风景好,到处看看心情更是赞。下面是小编整理的……
我心中的圆作文圆在我们的生活中无处不在,有了圆,我们的生活就更加圆满了。一个大大的圆,犹如高高挂在天空中的太阳,他照耀着整个大地,让那些绿油油的小草在蓝蓝的天空下欢快的舞蹈;让那些没精……
我最熟悉的人妈妈作文范文很难用一个词来形容我的妈妈,因为她有时很节约,有时又很大方;有时很严厉,有时又很温柔,所以只能说妈妈是个矛盾体。妈妈是个勤俭节约的人,她平时给自己买衣服都只挑便宜的买,家……