Explain 详解(查看任务计划)

2 篇文章 0 订阅
订阅专栏

Explain 详解(查看任务计划)

在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。(QEP:sql生成一个执行计划query Execution plan)

 

expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra,下面对这些字段出现的可能进行解释:

一、 id

     我的理解是SQL执行的顺序的标识,SQL从大到小的执行

1. id相同时,执行顺序由上至下

2. 如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

3.id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行

二、select_type

      示查询中每个select子句的类型

(1) SIMPLE(简单SELECT,不使用UNION或子查询等)

(2) PRIMARY(查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)即最外层加载

(3) UNION(UNION中的第二个或后面的SELECT语句若第二个select出现在union之后,则被标记为union;若union包含在from子句的子查询中,外层select将被标记为derived)

(4) DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)

(5) UNION RESULT(UNION的结果从union表获取结果的selec,两个union的结果集)

(6) SUBQUERY(子查询中的第一个SELECT)

(7) DEPENDENT SUBQUERY(子查询中的第一个SELECT,取决于外面的查询)

(8) DERIVED(在from列表中包含的子查询被标记为DERIVED(衍生)MYSQL会递归执行这些子查询,把结果放在临时表里。即派生表的SELECT, FROM子句的子查询)

(9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)

三、table

显示这一行的数据是关于哪张表的,有时不是真实的表名字,看到的是derivedx(x是个数字,我的理解是第几步执行的结果X对应的是id号即,第几个id被加载的)

 

四、type

表示MySQL在表中找到所需行的方式,又称“访问类型”。

常用的类型有: ALL, index,  range, ref, eq_ref, const, system, NULL(从左到右,性能从差到好)即system>const>eq_ref>ref>range>index>all

一般来说,得保证查询至少达到range级别,最好能达到ref。

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

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

range:只检索给定范围的行,使用一个索引来选择行

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

eq_ref: 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件

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

NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。

 

五、possible_keys

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

该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。
如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询

 

六、Key

key列显示MySQL实际决定使用的键(索引)

如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

 

七、key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)

不损失精确性的情况下,长度越短越好 

 

  • ref 显示索引的哪一列被使用了,如果可能的话,是一个常数。表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

 

九、rows

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

 

十、Extra

包含不适合在其他列中显示但十分重要的额外信息

该列包含MySQL解决查询的详细信息,有以下几种情况:

Using where:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤

Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询性能差

Using filesort:文件内排序。说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作称为“文件排序”性能差

Using index:表示相应的select操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错!如果同时出现using where,表明索引被用来执行索引键值的查找;如果没有同时出现using where ,表明索引用来读取数据而非执行查找动作。(性能好)

覆盖索引:即用到的索引和建立的索引个数和顺序完全一样

Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。

Impossible where:这个值强调了where语句会导致没有符合条件的行。

Select tables optimized away:这个值意味着仅通过使用索引,优化器可能仅从聚合函数结果中返回一行

 

总结:
• EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况
• EXPLAIN不考虑各种Cache
• EXPLAIN不能显示MySQL在执行查询时所作的优化工作
• 部分统计信息是估算的,并非精确值
• EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。

 

参考资料:http://dev.mysql.com/doc/refman/5.5/en/explain-output.html

                 http://www.cnitblog.com/aliyiyi08/archive/2008/09/09/48878.html

                 http://www.cnblogs.com/gomysql/p/3720123.html

 作者:陆炫志

出处:xuanzhi的博客  http://www.cnblogs.com/xuanzhi201111

Mysqlexplain作用详解
09-09
主要介绍了Mysqlexplain的相关内容,涉及索引的部分知识,具有一定参考价值,需要的朋友可以了解下。
看懂MySQL的SQL EXPLAIN
01-05
看懂MySQL的SQL EXPLAIN
Explain详解与索引优化
最新发布
03-17
Explain详解与索引优化
MySQL基础学习: 第四章 使用EXPLAIN查看执行计划详解分析
玉汝于成
01-13 1449
这里的id相同表示着:通过查询优化器对查询语句的优化,将子查询语句转变成了连接查询语句。在一个查询语句中可能包含多个小的查询语句,在MySQL中每个小的查询语句都包含select_type属性,通过该属性的取值,我们可以判断出这个小的查询语句在整个查询语句中扮演着一个什么样的角色。在存在UNION的查询语句中如果各个子查询语句间存在依赖关系,者除了第一个记录的select_type为PRIMARY,其他的子查询语句记录中的select_type为DEPENDENT UNION。
MySQL EXPLAIN查看执行计划
假女吖的博客
11-05 416
MySQL 执⾏计划MySQL 查询优化器分析 SQL 查询时⽣成的⼀份详细计划,包括表如何连 接、是否⾛索引、表扫描⾏数等。通过这份执⾏计划,我们可以分析这条 SQL 查询中存在的 问题(如是否出现全表扫描),从⽽进⾏针对优化。我们可以通过EXPLAIN来查询我们SQL的执行计划
sql分析工具explain详解
weixin_46152127的博客
04-03 6413
explain返回参数说明
sql性能分析之explain详解
Yangyg_0818的博客
02-12 2万+
一、介绍 explain可以分析一条sql的优劣,通过mysql反馈我们,需要我们自己去读懂explain的sql执行结果来判断是否要进行优化,根据不同的业务和操作的数据量大小优化。 二、使用explain mysql下执行:explain sql语句,比如 explain select t2.* from table2 t2; 返回结果显示 三、explain执行结果字段分析说明 ...
MySQL Explain详解
weixin_30654419的博客
12-20 577
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略...
explain分析sql语句性能详解
weixin_43811057的博客
05-23 6251
explain分析sql语句性能详解一、概念及作用二、使用方法三、 参数详解3.1 **id**(重要)3.2 select_type 一、概念及作用 使用explain关键字,可以模拟优化器执行的SQL语句,从而知道MYSQL是如何处理sql语句的。通过Explain可以分析查询语句或表结构的性能瓶颈 具体作用: 查看表的读取顺序 数据读取操作的操作类型 查看哪些索引可以使用 查看哪些索引被实际使用 查看表之间的引用 查看每张表有多少行被优化器执行 二、使用方法 使用Expla
SQL性能分析
haobaba_的博客
06-29 1153
sql性能分析
MySQL EXPLAIN解析
10-15
MySQL EXPLAIN详解PPT,自己的工作学习任务。用于工作分享。有很详细的例子列举。
oracle 执行计划
03-26
Oracle提供了`EXPLAIN PLAN`或`SET AUTOTRACE`命令来查看执行计划。例如,使用`SET AUTOTRACE TRACEONLY`,我们可以看到查询的执行计划和相关的性能统计数据。执行计划中的每个步骤都由一个数字表示,每个数字代表...
数据库执行计划
05-27
【数据库执行计划详解】 数据库执行计划是数据库管理系统(DBMS)为执行SQL查询而制定的一系列操作步骤,它决定了...在实际工作中,可以使用EXPLAIN PLAN或类似的工具来查看和分析查询的执行计划,以便进行调整和优化。
十三MySQL性能优化详解.pdf
09-30
MySQL 性能优化详解 MySQL 是目前使用最多的开源数据库,但是 MySQL 数据库的默认设置性能非常的差,仅仅是一个玩具数据库。因此,在产品中使用 MySQL 数据库必须进行必要的优化。优化是一个复杂的任务,本文描述 ...
DB2数据库性能优化技巧详解.docx
10-03
可以利用DB2的本机Explain工具、第三方工具或SQL Event Monitor来监控和评估SQL语句的执行成本。 最后,Lock管理也是数据库性能优化中不可忽视的部分。LOCKLIST参数决定了分配给锁列表的存储空间,锁列表用于管理...
mysqlEXPLAIN解释则怎么看,怎么针对优化
Lxy_CCr的博客
12-25 409
另一方面,“回表”是指在查询过程中使用了二级索引(也叫辅助索引)来检索行的主键,然后再用这个主键去聚簇索引(也就是包含了数据行的实际数据的主键索引)中检索完整的数据行的过程。使用EXPLAIN的最佳实践是运行它,然后根据提供的信息逐步改进查询,这可能涉及到重新编写查询,或者修改数据库设计,比如添加、删除或更改索引。优化复杂查询:对于复杂的查询,如子查询、JOIN操作,select_type列应避免DEPENDENT SUBQUERY类型的查询,因为这意味着对每个结果集都要重新执行子查询。
MySQL优化】——看懂explain
热门推荐
漫漫长途,终有回转;余味苦涩,终有回甘
07-29 8万+
explain     explain模拟优化器执行SQL语句,在5.6以及以后的版本中,除过select,其他比如insert,update和delete均可以使用explain查看执行计划,从而知道mysql是如何处理sql语句,分析查询语句或者表结构的性能瓶颈。 作用 1、表的读取顺序 2、数据读取操作的操作类型 3、哪些索引可以使用 4、...
SQL-explain
cmy_top的博客
08-07 685
什么是explain? 使用explain关键字可以模拟优化器执行SQL查询语句,从而了解MYSQL是如何处理SQL语句 explain的作用 我们使用explain关键字可以知道以下内容: 表的读取顺序 数据读取操作的操作类型 哪些索引被使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询 如何使用explain explain + SQL语句 explain字段解释 id select_type table partitions type possible_keys key ke
mysqlexplain主要看那些指标
zelxnxy的博客
09-04 207
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用(该查询可以利用的索引,如果没有任何索引显示 null)显示这一步所访问数据库中表名称(显示这一行的数据是关于哪张表的),有时不是真实的表名字,可能是简称,例如上面的e,d,也可能是第几步执行的结果的简称。
explain查看sql执行计划
02-29
在SQL中,EXPLAIN是一个用于查看SQL执行计划的关键字。它可以帮助我们了解数据库是如何执行我们的查询语句的,以及查询语句的性能优化方面的问题。 当我们在数据库中执行一条SQL查询语句时,数据库系统会根据查询语句的逻辑来生成一个执行计划。执行计划是一个描述查询语句执行过程的详细信息的结果集,它包含了查询语句的各个步骤、操作顺序、使用的索引、表之间的连接方式等等。 使用EXPLAIN关键字可以让我们查看这个执行计划。通过分析执行计划,我们可以了解到查询语句中是否存在潜在的性能问题,比如是否使用了正确的索引、是否存在全表扫描等。这样我们就可以根据执行计划来进行性能优化,提高查询效率。 在MySQL中,可以使用以下语法来查看SQL执行计划EXPLAIN SELECT * FROM table_name WHERE condition; 其中,table_name是要查询的表名,condition是查询条件。 执行EXPLAIN后,数据库会返回一个结果集,包含了查询语句的执行计划信息。这些信息可以帮助我们理解查询语句的执行过程,并进行性能优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • jquery获取div子节点的下的span标签的值 10602
  • js中将中国标准时间格式、CST日期转换为yyyy-MM-dd HH:mm:ss格式总结 9852
  • 列表,元组,字典的区别 7713
  • 正则表达式匹配是否全部由字母组成 5801
  • HTTP、HTTPS等常用的默认端口号 4877

分类专栏

  • 测试相关 1篇
  • js 5篇
  • jstl 4篇
  • c++笔记
  • 数据结构学习笔记 2篇
  • Java学习笔记 12篇
  • Python 2篇
  • Ajax学习笔记 2篇
  • 工具使用相关 2篇
  • 实用js代码段 2篇
  • json 1篇
  • ssm 6篇
  • oracle 2篇
  • mysql 2篇

最新评论

  • 双非运算符!!在js中的作用

    后知后觉m: 漏了0

  • jsp按某分隔符分割字符串

    【叛】: 这。。。。

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • HTTP、HTTPS等常用的默认端口号
  • 判断多选框选择数量,并将选择的value拼接到另一个字符串
  • jstl页面显示map的key,key的值手动填写
2021年1篇
2020年8篇
2019年16篇
2018年5篇
2017年2篇
2016年11篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

哆哆女性网免费婴儿起名宝典包姓氏男孩起名韩姓女孩起名字大全方姓名字大全女孩起名大道堂养生给姓易的男孩起名马氏宝宝起名大全群名怎么起比较好古色传香瓦罐小吃加盟五行属缺土缺土起名科技智能公司起名字360修复网上宝宝起名免费的体育公司起名创意给男宝宝起名好听的孙姓小学生补课班起什么名好牛小儿起名字餐饮店怎麽起名爱丽丝镜中奇遇记长春万盛理想国五行属木的字公司起名2015年宝宝起名畜禽养殖起什么名字好最新动画片大全集异界圣骑士下载沈阳市卫生局局长2018年狗宝宝起名字大全济南房屋河南人口2021总人数多少明日之战在线观看淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化