游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

MySQL之Explain性能分析

  一、Explain概述
  使用EXPLAIN关键字可以模拟优化器来执行SQL查询语句,从而知道MySQL是如何处理我们的SQL语句的。分析出查询语句或是表结构的性能瓶颈。1、MySQL查询过程
  通过explain我们可以获得以下信息:表的读取顺序;数据读取操作的操作类型;哪些索引可以被使用;哪些索引真正被使用;表的直接引用;每张表的有多少行被优化器查询了;
  Explain使用方式:explainsql语句,通过执行explain可以获得sql语句执行的相关信息。explainselectfromL1;
  二、Explain详解
  1)数据准备创建数据库CREATEDATABASEtestexplainCHARACTERSETutf8;创建表CREATETABLEL1(idINTPRIMARYKEYAUTOINCREMENT,titleVARCHAR(100));CREATETABLEL2(idINTPRIMARYKEYAUTOINCREMENT,titleVARCHAR(100));CREATETABLEL3(idINTPRIMARYKEYAUTOINCREMENT,titleVARCHAR(100));CREATETABLEL4(idINTPRIMARYKEYAUTOINCREMENT,titleVARCHAR(100));每张表插入3条数据INSERTINTOL1(title)VALUES(zhang001),(zhang002),(zhang003);INSERTINTOL2(title)VALUES(zhang004),(zhang005),(zhang006);INSERTINTOL3(title)VALUES(zhang007),(zhang008),(zhang009);INSERTINTOL4(title)VALUES(zhang010),(zhang011),(zhang012);
  2)ID字段说明
  select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序
  id相同,执行顺序由上至下EXPLAINSELECTFROML1,L2,L3WHEREL1。idL2。idANDL2。idL3。id;
  id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行EXPLAINSELECTFROML2WHEREid(SELECTidFROML1WHEREid(SELECTL3。idFROML3WHEREL3。titlezhang));
  3)selecttype和table字段说明
  表示查询类型,主要用于区别普通查询,联合查询,子查询等的复杂查询
  simple:简单的select查询,查询中不包含子查询或者UNIONEXPLAINSELECTFROML1whereid1;
  primary:查询中若包含任何复杂的子部分,最外层查询被标记
  subquery:在select或where列表中包含了子查询EXPLAINSELECTFROML2WHEREid(SELECTidFROML1WHEREid(SELECTL3。idFROML3WHEREL3。titlezhang));
  union:union连接的两个select查询,第一个查询是dervied派生表,除了第一个表外,第二个以后的表selecttype都是union
  derived:在from列表中包含的子查询被标记为derived(派生表),MySQL会递归执行这些子查询,把结果放到临时表中
  unionresult:UNION的结果EXPLAINSELECTFROM(selectfromL3unionselectfromL4)a;
  4)type字段说明
  type字段在MySQL官网文档描述如下:
  Thejointype。Fordescriptionsofthedifffferenttypes。
  type字段显示的是连接类型(jointype表示的是用什么样的方式来获取数据),它描述了找到所需数据所使用的扫描方式,是较为重要的一个指标。
  下面给出各种连接类型,按照从最佳类型到最坏类型进行排序:完整的连接类型比较多systemconsteqrefreffulltextrefornullindexmergeuniquesubqueryindexsubqueryrangeindexALL简化之后,我们可以只关注一下几种systemconsteqrefrefrangeindexALL
  一般来说,需要保证查询至少达到range级别,最好能到ref,否则就要就行SQL的优化调整
  下面介绍type字段不同值表示的含义:
  system:表中就仅有一行数据的时候。这是const连接类型的一个特例,很少出现。
  const:const表示命中主键索引(primarykey)或者唯一索引(unique),表示通过索引一次就找到数据记录。因为只匹配一条记录,所以被连接的部分是一个常量。(如果将主键放在where条件中,MySQL就能将该查询转换为一个常量)这种类型非常快。
  例如以下查询:explainselectfromL1whereid3;为L1表的title字段添加唯一索引altertableL1addunique(title);explainselectfromL1wheretitlezhang;
  eqref:对于前一个表中的每个一行,后表只有一行被扫描。除了system和const类型之外,这是最好的连接类型。只有当联接使用索引的部分都是主键或惟一非空索引时,才会出现这种类型。
  例如以下查询:EXPLAINSELECTL1。id,L1。titleFROML1leftjoinL2onL1。idL2。id;
  ref:非唯一性索引扫描(使用了普通索引),对于前表的每一行(row),后表可能有多于一行的数据被扫描,它返回所有匹配某个单独值的行。
  例如以下查询:为L1表的title字段添加普通索引altertableL1addindexidxtitle(title);EXPLAINSELECTFROML1innerjoinL2onL1。titleL2。title;
  range:索引上的范围查询,检索给定范围的行,between,in函数,都是典型的范围(range)查询。
  例如以下查询:EXPLAINSELECTFROML1WHEREL1。idbetween1and10;
  注:当in函数中的数据很大时,可能会导致效率下降,最终不走索引
  index:出现index是SQL使用了索引,但是没有通过索引进行过滤,需要扫描索引上的全部数据(查找所有索引树,比ALL快一些,因为索引文件要比数据文件小),一般是使用了索引进行排序分组。EXPLAINSELECTFROML2groupbyidorderbyid;该count查询需要通过扫描索引上的全部数据来计数EXPLAINSELECTcount()FROML2;
  ALL:没有使用到任何索引,连接查询时对于前表的每一行,后表都要被全表扫描。EXPLAINSELECTFROML3innerjoinL4onL3。titleL4。title;
  总结各类type类型的特点:
  5)possiblekeys与key说明
  possiblekeys
  显示可能应用到这张表上的索引,一个或者多个。查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用。
  key
  实际使用的索引,若为null,则没有使用到索引。(两种可能,1。没建立索引,2。建立索引,但索引失效)。查询中若使用了覆盖索引,则该索引仅出现在key列表中。
  1。理论上没有使用索引,但实际上使用了EXPLAINSELECTL3。idFROML3;
  2。理论和实际上都没有使用索引EXPLAINSELECTFROML3WHEREtitlezhang007;
  3。理论和实际上都使用了索引EXPLAINSELECTFROML2WHEREtitlezhang004;
  6)keylen字段说明
  表示索引中使用的字节数,可以通过该列计算查询中使用索引的长度。
  keylen字段能够帮你检查是否充分利用了索引,kenlen越长,说明索引使用的越充分。
  创建表
  CREATETABLEL5(aINTPRIMARYKEY,bINTNOTNULL,cINTDEFAULTNULL,dCHAR(10)NOTNULL);
  使用explain进行测试EXPLAINSELECTFROML5WHEREa1ANDb1;
  观察keylen的值,索引中只包含了1列是int类型,所以,keylen是4字节。
  为b字段添加索引,进行测试
  ALTERTABLEL5ADDINDEXidxb(b);执行SQL,这次将b字段也作为条件EXPLAINSELECTFROML5WHEREa1ANDb1;
  为c、d字段添加联合索引,然后进行测试ALTERTABLEL5ADDINDEXidxcb(c,d);explainselectfromL5wherec1andd;
  c字段是int类型4个字节,d字段是char(10)代表的是10个字符相当30个字节
  数据库的字符集是utf8一个字符3个字节,d字段是char(10)代表的是10个字符相当30个字节,多出的一个字节用来表示是联合索引
  下面这个例子中,虽然使用了联合索引,但是可以根据kenlen的长度推测出该联合索引只使用了一部分,没有充分利用索引,还有优化空间。explainselectfromL5wherec1;
  7)ref字段说明
  显示索引的哪一列被使用了,如果可能的话,是一个常数。哪些列或常量被用于查找索引列上的值
  L1。id1;1是常量,refconstEXPLAINSELECTFROML1WHEREL1。id1;
  8)rows字段说明
  表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数。
  L3中的title没有添加索引,所以L3中有3条记录,就需要读取3条记录进行查找。EXPLAINSELECTFROML3,L4WHEREL3。idL4。idANDL3。titleLIKEzhang007;
  需要注意的是rows只是一个估算值,并不准确。所以rows行数过大的问题并不值得过多考虑,主要分析的还是索引是否使用正确了
  9)fifiltered字段说明
  它指返回结果的行占需要读到的行(rows列的值)的百分比。
  10)extra字段说明
  Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息。
  准备数据
  CREATETABLEusers(uidINTPRIMARYKEYAUTOINCREMENT,unameVARCHAR(20),ageINT(11));INSERTINTOusersVALUES(NULL,lisa,10);INSERTINTOusersVALUES(NULL,lisa,10);INSERTINTOusersVALUES(NULL,rose,11);INSERTINTOusersVALUES(NULL,jack,12);INSERTINTOusersVALUES(NULL,sam,13);
  Usingfifilesort
  执行结果Extra为Usingfilesort,这说明,得到所需结果集,需要对所有记录进行文件排序。这类SQL语句性能极差,需要进行优化。
  典型的,在一个没有建立索引的列上进行了orderby,就会触发fifilesort,常见的优化方案是,在orderby的列上添加索引,避免每次查询都全量排序。EXPLAINSELECTFROMusersORDERBYage;
  Usingtemporary
  表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询EXPLAINSELECTCOUNT(),unameFROMusersGROUPBYuname;
  需要注意的是:返回所有记录的SQL,不使用where条件过滤数据,大概率不符合预期,对于这类SQL往往需要进行优化;使用了where条件的SQL,并不代表不需要优化,往往需要配合explain结果中的type(连接类型)来综合判断。例如本例查询的age未设置索引,所以返回的type为ALL,仍有优化空间,可以建立索引优化查询。EXPLAINSELECTFROMusersWHEREage10;
  Usingindex
  表示直接访问索引就能够获取到所需要的数据(覆盖索引),不需要通过索引回表。为uname创建索引altertableusersaddindexidxuname(uname);EXPLAINSELECTuid,unameFROMusersWHEREunamelisa;
  Usingjoinbuffffer
  使用了连接缓存,会显示join连接查询时,MySQL选择的查询算法。EXPLAINSELECTFROMusersu1LEFTJOIN(SELECTFROMusersWHEREage1)u2ONu1。ageu2。age;
  Usingjoinbuffer(BlockNestedLoop)说明,需要进行嵌套循环计算,这里每个表都有五
  条记录,内外表查询的type都为ALL。
  问题在于两个关联表的关联使用了字段age,并且age字段未建立索引,就会出现这种情况。
  Usingindexcondition
  查找使用了索引(但是只使用了一部分,一般是指联合索引),但是需要回表查询数。explainselectfromL5wherec10andd;
  Extra主要指标的含义(有时会同时出现)usingindex:使用覆盖索引的时候就会出现;usingwhere:在查找使用索引的情况下,需要回表去查询所需的数据;usingindexcondition:查找使用了索引,但是需要回表查询数据;usingindexusingwhere:查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据;

可爱如我我不想出镜,不想配合,看我嫌弃的小表情,真苦恼,妈妈老是追着我,拍,拍,拍,各种拍,妈妈说,我怎么看都可爱,她都想记录下来,记录我成长的每一步,记录我生活的点点滴滴,生活在妈妈……尼泊尔深度全景八日游(6)第六天早餐很丰盛,饭后就要离开博卡拉前往240公里外的纳加阔特。临行前又认真看了看酒店的里里外外,酒店极具民族特色,墙上还挂满行业荣益的标志,包括国际权威组织连年对酒店的……膝关节疼痛肿胀,屈伸不利,一剂四神煎消肿祛痛专治膝,请体会大家好,我是中医骨病科阎医生。今天想跟大家聊聊膝关节炎的问题。对于中老年人来说,关节非常容易出问题,关节磨损、关节损伤、组织退化。在全身关节的诸多关节炎中,膝关节炎又是最……电脑系统总是出问题怎么办,一见不和重装,找到这些资源轻松解决熟悉Windows系统的小伙伴都知道,三天两头系统就会有问题,新版的win11总是在你不知不觉的情况下偷偷更新,老版的win系统时不时给你来个蓝屏,很是闹心,大部分小伙伴的办法……眼周年轻化有没有必要做?三十年经验医生来谈谈真实想法从业数十载,见过最多的失败就是眼睛,为什么呢?因为眼周的皮肤薄、血管多、上眼睑又经常运动的部位,因此眼部的手术往往也是最有难度的,无论是重睑、提上睑肌,还是提眉切眉,都有失败的……成龙身体已到极限,可以说一生献给了电影今天我要和大家谈谈成龙大哥的电影事业。这位传奇人物可以说是为了电影事业付出了全部,年轻时候太拼命了,为了给观众带来最佳的视觉感官,所有的危险动作都是亲自亲为。不过成龙却十分淡定……手把手教你选电视一、先确定尺寸买电视首先要确定好尺寸,现在的电视都在往大屏化发展,一些卖场摆放在展厅的电视基本上最小都是65吋,目前的购买趋势还是以75吋为主。那么根据什么来确定尺寸呢?……大红色16G512G大存储,OPPOReno9Pro再次突破对比起OPPOFindX系列,很多人更喜欢OPPOReno系列,原因很简单,因为Reno系列的设计和配置都不差,但价格要便宜很多,两三千就能买到,远远低于FindX系列的五六千……女孩每日跳操腹部疼痛,浦东新区人民医院找到症结及时救治12岁的灵灵(化名)为了减肥,最近每天跳操。近日傍晚,她跳操结束后感觉肚皮痛,跟妈妈一说,妈妈并没在意,告诉灵灵,睡一觉就好了。然而,灵灵越睡越痛,快天亮的时候痛得哭了起来。妈……仅用13分钟拿下6。8的高分!国足飞翼成功上演欧洲首秀,实力最近相信有不少球迷都对中国足球强烈不满,因为我们的国足在大年初一的晚上客场以13完败给了越南队,历史上第一次输给对手,这是一场耻辱之战。当然让我们觉得耻辱的不只是结果,还有过程……剧组用假人当群演?不愧是芒果卫视,再次开创新滤镜芒果台,最近是被水逆了吗?水逆一:《快乐大本营》停播之前,快乐家族的成员,何炅、谢娜等人被爆出【收礼】事件后,坏消息一直传来,最后就传出《快乐大本营》要停播,以为是……目前值得买的3款手机,基础体验让人满意,最低仅599目前值得买的3款手机,基础体验让人满意,最低仅599第一款:红米9ARedmi9A也预置了小米最新的定制ROMMIUI12,支持巨无霸字体显示。通过官应商店下载应时……
联想官宣YOGA14s2021独显版11代酷睿H35英伟达MIT之家5月14日消息联想今日官宣YOGA14s2021独显版,该机将搭载英特尔11代酷睿H35处理器,以及英伟达MX450显卡,官方表示加量又加价。IT之家了解到,联想……华为鸿蒙HarmonyOS开发者Beta32。0。0。101感谢IT之家网友向南向蓝的线索投递!IT之家5月13日消息华为HarmonyOS2。0开发者版本Beta32。0。0。101现已发布。相机新增服务卡片功能,控制中心的使用……小波特NBA联盟第一人打球就这么脏?库里需要杜兰特的帮助库里作为联盟中最出色的运动员,他在比赛中利用自己的三分球威胁直接改变了NBA的打法,可以说他就是最具有划时代球员的特征,可是在面对火箭队的比赛中,库里在比赛中的一个肘击却引起了……AMDAGESA1。2。0。2微码发布厂商已推出BIOS固件IT之家4月14日消息根据外媒neowin消息,近日AMDAGESA1。2。0。2微码正式发布,华硕、技嘉等板卡厂商同时发布了新版BIOS固件更新。新版固件最重要的更新是解决了……Deft主动认错,再次向EDG致歉!泄露战术的事情,TES也各位LPL的观众和英雄联盟召唤师大家好,这里是天下游戏汇。S12全球总决赛今天结束了A组的所有比赛,站在LPL观众的视角上整体来说结果还可以,略有遗憾,因为大家都在期待加……IT之家开箱技嘉推出Z590AORUSXTREME主板,售价IT之家3月30日消息今天,英特尔11代酷睿正式解禁,技嘉同时推出了Z590AORUSXTREME旗舰主板,起售价是11999元,折扣价是8888。技嘉这款顶级的Z590……秦卫东年轻时爱喝酒,中年患病,如今瘦到脱相,他经历了什么?前段时间,许久未出现在观众面前的著名演员秦卫东,在个人短视频账号上进行直播,和网友、粉丝们进行互动。让他没想到的是,他本以为会受到大家的欢迎,结果却有网友嘲讽道:这也是混……宏碁新款SwiftX笔电曝光,搭载AMD5700U英伟达16感谢IT之家网友顽果度的线索投递!IT之家4月5日消息感谢IT之家网友热心线索投递,宏碁一份关于四五月新品的演示文档曝光,其中即包含新款的SwiftX系列续作,从演示图片……紫光展锐首款5G芯片T7510半年销量破百万套,6nmT75今日,2021MWC上海正式开展。GSMA大中华区总裁斯寒表示,在世界疫情仍在持续的情况下,GSMA首次重新举行MWC线下展览活动,这展示出了极大的勇气和胆识,其中得到了包括政……口播适合宝妈来做大家好,我是艳桢妈妈,最近好久没有更新视频,主要是因为我觉得拍视频太复杂了,太难了,我一天都更不出一个视频出来,我每天拍好了,但是没有时间去剪,因为我现在所有的时间要么是上班,……撼讯RX6900XTLiquidDevil显卡曝光定制EK水IT之家2月21日消息外媒videocardz今日泄露了撼讯的RadeonRX6900XTLiquidDevil(毒液)显卡,该显卡使用了定制的EK水冷和PCB设计。图自……年度总决选张大仙进入前十名,QUQU排名第七,Uzi仅排17最近,虎牙一年一度的年度总决选比赛开启。这项比赛说白了,其实就是各大主播在站内的人气比拼。而从比赛中脱颖而出的主播们,不仅可以获得平台给予的资源,更能极大提升自己的人气,所以每……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网