explain执行计划中的字段以及含义在下面的博客中有详细讲述:

https://blog.csdn.net/da_guo_li/article/details/79008016

执行计划能告诉我们什么?

EXPLAIN命令是查看查询优化器如何决定执行查询的主要的方法,学会解释EXPLAIN将帮助我们了解SQL优化器是如何工作的。执行计划可以告诉我们SQL如何使用索引,连接查询的执行顺序,查询的数据行数。

如何使用执行计划?

要使用EXPLAIN,只需要在查询的SELECT关键字之前增加EXPLAIN这个词。

下面是一个简单EXPLAIN的结果:

执行计划重点关注 type、key、key_len、rows、extra

type:type如果为ALL,表示全盘扫描,也是效率最低的

key:表示使用了哪个索引,如果没有使用为null

key_len:表示索引字段的最大可能长度,KEY_LEN的长度由字段定义计算而来,并非数据的实际长度,长度越小,效率越高。

    主要是看复合索引用到了哪些列 因为很多复合索引可能只是用到了一列或者某几列,联合索引是从左往右来的,算到什么地方,就代表用哪一列

    假如有一个表 id int not null ,name varchar(32) not null 并且是utf8字符类型的表 假如索引是id_name 如果只用到id列那么key_len 就是4 如果两列

都用到了那 key_len 就是 4+32*3+2 如果不是not null 就是4+1+32*3+2+1了

rows:表示MySQL通过哪些列或常量被用于查找索引列上的值,ROWS值的大小是个统计抽样结果,并不十分准确。全盘扫描时,值最大,接近表中数据行数。建议值小于5000

extra:如果出现using filesort 表示sql中有排序。应尽量避免在磁盘中排序。让其尽量通过索引字段排序。

以下是执行计划中的字段的详细解释:

原文出处:

https://blog.csdn.net/da_guo_li/article/details/79008016

分析执行计划中EXPLAIN的列

ID列

是一位数字,表示执行SELECT语句的顺序。
id值相同执行顺序从上到下。
id值不同时id值大的先执行。

SELECT_TYPE
这一列显示了对应行是简单还是复杂SELECT.取值如下:SIMPLE值意味着查询不包括子查询和UNION。查询有任何复杂的子部分,则最外层标记为PRIMARY.取值如下:

TABLE

输出数据行所在的表的名称

PARTITIONS

对于分区表,显示查询的分区ID,对于非分区表,显示为NULL

TYPE

EXTRA

POSSIBLE_KEYS

指出MySQL能使用哪些索引来优化查询,查询所涉及的列上的索引都会被列出,但不一定会被使用

KEY

查询优化器优化查询实际所使用的索引,如果没有可用的索引,则显示为NULL,如查询使用了覆盖索引,则该索引仅出现在Key列中

KEY_LEN

表示索引字段的最大可能长度,KEY_LEN的长度由字段定义计算而来,并非数据的实际长度

REF

表示哪些列或常量被用于查找索引列上的值

ROWS

表示MySQL通过哪些列或常量被用于查找索引列上的值,ROWS值的大小是个统计抽样结果,并不十分准确

Filtered

表示返回结果的行数占需读取行数的百分比,Filter列的值越大越

执行计划的限制

无法展示存储过程,触发器,UDF对查询的影响

无法使用EXPLAIN对存储过程进行分析

早期版本的MySQL只支持对SELECT语句进行分析,如果想要分析UPDATE,INSERT语句需要将它们通过某种手段转换成SELECT语句。

SQL执行计划分析的更多相关文章

  1. oracle sql 执行计划分析

    转自http://itindex.net/detail/45962-oracle-sql-%E8%AE%A1%E5%88%92 一.首先创建表 SQL> show user USER is &q ...

  2. SQL执行计划分析2

    执行计划重点关注 type.key.key_len.rows.extra type:type如果为ALL,表示全盘扫描,也是效率最低的 key:表示使用了哪个索引,如果没有使用为null key_le ...

  3. SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积

    SQL优化 MySQL版 -分析explain SQL执行计划 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 首先我们先创建一个数据库,数据库中分别写三张表来存储数据; course: ...

  4. in和exists的区别与SQL执行效率分析

    可总结为:当子查询表比主查询表大时,用Exists:当子查询表比主查询表小时,用in SQL中in可以分为三类: 1.形如select * from t1 where f1 in ('a','b'), ...

  5. sql执行计划解析案例(二)

    sql执行计划解析案例(二)   今天是2013-10-09,本来以前自己在专注oracle sga中buffer cache 以及shared pool知识点的研究.但是在研究cache buffe ...

  6. MySQL学习系列2--MySQL执行计划分析EXPLAIN

    原文:MySQL学习系列2--MySQL执行计划分析EXPLAIN 1.Explain语法 EXPLAIN SELECT …… 变体:   EXPLAIN EXTENDED SELECT …… 将执行 ...

  7. Oracle中SQL调优(SQL TUNING)之最权威获取SQL执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

  8. DB查询分析器7.01新增的周、月SQL执行计划功能

                DB查询分析器7.01新增的周.月SQL执行计划功能 马根峰              (广东联合电子服务股份有限公司, 广州 510300) 1      引言   中国本土 ...

  9. 两个左连接SQL执行计划解析(Oracle和PGSQL对比):

    上一篇解析链接如下: https://www.cnblogs.com/wcwen1990/p/9325968.html 1.SQL示例1: SQL> select * from ( select ...

随机推荐

  1. 关于一道面试题【字符串 '1 + (5 - 2) * 3',怎么算出结果为10,'eval'除外】

    最近徘徊在找工作和继续留任的纠结之中,在朋友的怂恿下去参加了一次面试,最后一道题目是: 写一个函数,输入一个字符串的运算式,返回计算之后的结果.例如这样的: '1 + (5 - 2) * 3',计算出 ...

  2. C#压缩文件夹坑~

    dotNet疯狂之路No.29  今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上,只有那些真正的英雄才能见到后天的太阳.  We're here to put a dent in t ...

  3. Qt下载地址

    上Qt官网http://www.qt.io/download/想下载Qt,速度很慢,在这里记录下在Qt官网看到的镜像下载地址: 1. 所有Qt版本下载地址: http://download.qt.io ...

  4. Spring MVC注解式开发

    MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册. 只需在代码中通过对类与方法的注解, 即可完成注册. 定义处理器 @Controller: 当前类为处理器 @ ...

  5. kubernetes实践之运行aspnetcore webapi微服务

    1.预备工作 unbuntu 16.04 and above docker kubernetes 集群 2.使用vs2017创建一个web api应用程序,并打包镜像到本地. 3.推送本地镜像到doc ...

  6. 理解Spring中的IOC和AOP

    我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式 IOC就是典型的工厂模式,通过ses ...

  7. ES6之promise的使用

    let checkLogin = function () { return new Promise(function (resolve,reject) { let flag = document.co ...

  8. redis分片和哨兵

    1 Redis的使用 1.1 Redis入门案例 1.1.1 什么样的数据使用缓存 说明:使用缓存其实为了减少用户查询数据库的时间.如果数据频繁的变更.不适用缓存.缓存中的数据应该保存修改频率不高的数 ...

  9. python学习03-数据类型

    一.基本数据类型--数字 布尔型 bool型只有两个值:True和False 之所以将bool值归类为数字,是因为我们也习惯用1表示True,0表示False. 以下是布尔值是False的各种情况: ...

  10. Spring Boot 引入自定义yml

    喜欢yml配置文件格式的人性化,也喜欢properties配置文件管理方式的人性化, 那么下面我们就来看一下 yml 是如何配置和使用类似properties管理方式的人性化. 配置文件 设置Spri ...