MySQL执行计划的示例分析


这篇文章主要介绍了MySQL执行计划的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。执行计划是什么?
执行计划,简单的来说,是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化等场景。一. 执行计划能告诉我们什么?
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列
3. TABLE列
包含以下几种结果:输出去数据行所在表的名称,如果表取了别名,则显示的是别名
: 由ID为M,N查询union产生的结果集
/ :由ID为N的查询产生的结果
4. PARTITIONS列:
查询匹配的记录来自哪一个分区
对于分区表,显示查询的分区ID
对于非分区表,显示为NULL
5. TYPE列
按性能从高至低排列如下:6. Extra列
包含MySQL如何执行查询的附加信息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语句进行分析感谢你能够认真阅读完这篇文章,希望小编分享的“MySQL执行计划的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持开发云,关注开发云行业资讯频道,更多相关知识等着你来学习!

相关推荐: MySQL服务正在启动或停止中,请稍候片刻后再试一次【解决方案】

相信有些小伙伴在使用数据库的过程中会经常频繁的启动和停止MySQL服务,有时候会出现“服务正在启动或停止中,请稍候片刻后再试一次。”这样的提示,如下图所示。于是乎想办法去解决这个问题,但是发现连强制的数据库初始化都无济于事,而且在任务管理器的进程下也无法找到m…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/19 20:09
下一篇 06/19 20:09

相关推荐