EXPLAIN(小写explain)显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

EXPLAIN + sql语句可以查看mysql的执行计划。

其中:

id:

1、是一组数字,表示查询中执行select子句或操作表的顺序。

2、如果id相同,则执行顺序从上至下。

3、如果是子查询,id的序号会递增,id越大则优先级越高,越先会被执行。

4、所有组中,id越大,优先级越高,越容易执行。

select_type:(表示查询中每个select子句的类型(简单OR复杂),有以下几种)有simple,primary,subquery,derived(衍生),union,unionresult。

1、SIMPLE:查询中不包含子查询或者UNION

2、PRIMARY:查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY。

3、SUBQUERY:在SELECT或WHERE列表中包含了子查询,该子查询被标记为SUBQUERY。

4、DERIVED:在FROM列表中包含的子查询被标记为DERIVED(衍生)。

5、UNION:若第二个SELECT出现在UNION之后,则被标记为UNION;

6、derived:若union在from子句的子查询中,外层的select被标记成derived。

7、union result:从union表获取结果的select被标记成union result。

table:显示这一行的数据是关于哪张表的

type:(表示MySQL在表中找到所需行的方式,又称“访问类型”,常见有以下几种all,index,range,ref,eq_ref,const,system,NULL)

  ALL:Full Table Scan, MySQL将进行全表扫描。

  index:full index scan,index与ALL区别为index类型只遍历索引树。

  range:range Index Scan,对索引的扫描开始于某一点,返回匹配值域的行,常见于between、<、>等的查询;

  ref:非唯一性索引扫描,返回匹配摸个单独值的所有行。常见于使用非唯一索引或唯一索引的非唯一前缀进行的查找;

  eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描

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

  NULL:MySQL在优化过程中分解语句,执行时甚至不用访问表或索引

possiblekeys:

2种意思:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句

possiblekey表示能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引被列出,但不一定被查询使用。

key:

1、key表示查询时使用的索引。若查询中使用了覆盖索引,则该索引仅出现在key中举个例子

employee中gender上有一个索引。使用如下语句

EXPLAIN SELECT gender from employees

则结果如下:1  SIMPLE  employees  index  IND_GEN  1  300695  Using index

EXPLAIN SELECT first_name from employees

则结果如下  1  SIMPLE  employees  ALL  300695

keylen:

keylen表示索引所使用的字节数,可以通过该列结算查询中使用的索引长度

ref:

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

rows:

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

extra:

extra表示不在其他列并且也很重要的额外信息。

using index表示在相应的select中使用了覆盖索引。

usingwhere表示存储引擎搜到记录后进行了后过滤(POST-FILTER),如果查询未能使用索引,usingwhere的作用只是提醒我们mysql要用where条件过滤z结果集。

using temporay表示用临时表来存储结果集,常见于排序和分组查询。

usingfilesort,mysql中无法用索引完成的排序成为文件排序。

关于覆盖索引的一些概念如下:

MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件 包含所有满足查询需要的数据的索引称为 覆盖索引(Covering Index) 如果要使用覆盖索引,一定要注意select列表中只取出需要的列,不可select *,因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降

mysq的执行计划有一定局限性直接引用了

•EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况

•EXPLAIN不考虑各种Cache

•EXPLAIN不能显示MySQL在执行查询时所作的优化工作

•部分统计信息是估算的,并非精确值

•EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划

Mysql查看执行计划的更多相关文章

  1. Mysql查看执行计划-explain

    最近生产环境有一些查询较慢,需要优化,于是先进行业务确认查询条件是否可以优化,不行再进行sql优化,于是学习了下Mysql查看执行计划. 语法 explain <sql语句>  例如: e ...

  2. MySQL 查看执行计划

    MySQL 使用 explain + sql 语句查看 执行计划,该执行计划不一定完全正确但是可以参考. EXPLAIN SELECT * FROM user WHERE nid = 3; selec ...

  3. mysql查看执行计划重构后的查询

    MYSQL优化器会对客服端发送的SQL语句进行优化,优化后的SQL语句再被MYSQL执行.然后我们在优化SQL的时候,怎么获取到MYSQL优化后执行语句呢. EXPLAIN select * from ...

  4. mysql explain extended 查看 执行计划

    本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 1. explain 可以查看 ...

  5. MySQL 使用explain查看执行计划

    使用explain查看执行计划, 下面是针对这两条语句进行分析,其查询结果是一样的. EXPLAIN select n.id,n.title from info n inner join info_t ...

  6. MYSQL EXPLAIN执行计划命令详解(支持更新中)

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 本篇是根据官网中的每个一点来翻译.举例.验证的:英语不好,所 ...

  7. hive高阶1--sql和hive语句执行顺序、explain查看执行计划、group by生成MR

    hive语句执行顺序 msyql语句执行顺序 代码写的顺序: select ... from... where.... group by... having... order by.. 或者 from ...

  8. mysql sql执行计划

    查看Mysql执行计划 使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show pro ...

  9. Mysql explain执行计划

    EXPLAIN(小写explain)显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. EXPLAIN + sql语句可以查看mysql的执行 ...

随机推荐

  1. Oracle问题解决(远程登录失败)

    远程机: 安装 Oracle 的计算机: 本地机: 访问远程机 Oracle 的计算机. 一.问题描述 远程机安装 Oracle 成功. 本地机配置 InstantClient 后, PLSql De ...

  2. HBase eclipse开发环境搭建

    伪分布式环境安装 事先本机必须部署好了伪分布式hadoop开发环境将Hbase/lib下的 hadoop-core-*.jar 与 hadoop保持一致. 将hadoop下的复制到hbase下将had ...

  3. check sql server edition (version 版本)

    SELECT @@VERSION refer : https://www.mssqltips.com/sqlservertip/1140/how-to-tell-what-sql-server-ver ...

  4. Rundeck,RUN起来!!

    零晨一点, 还好,跑起来了.. 满满的英文文档,肿么办?? 拿下!

  5. JAVA存取对象属性时,如果开程多线程,记得对相关存取方法作原子化操作定义

    最显著的应用当然是银行存款和取款,不要存在存取数字和实际发生不一样的情况. synchronized关键字. class BankAccount { private int balance = 100 ...

  6. 如何用正则匹配后缀名不为.jpg, .css, .js, .html, .htm, .png的文件

    有网友碰到过这样的问题:如何用正则匹配后缀名不为.jpg, .css, .js, .html, .htm, .png的文件,问题详细内容为: 如何用正则匹配后缀名不为.jpg, .css, .js, ...

  7. 【HDOJ】3419 The Three Groups

    记忆化搜索. /* 3419 */ #include <cstdio> #include <cstring> #include <cstdlib> #define ...

  8. MPI Maelstrom(Dijkstra)

    http://poj.org/problem?id=1502 刷一道模板题稳定一下心情... Dijkstra求单源最短路,就是输入的时候注意下,是按下三角输入的(无向图),输入字符x表示i与j不通. ...

  9. UNITY3D ShadeSH9

    UNITY3D ShadeSH9 属于Irradiance environment maps 方法,可以参考DX SDK PRTDemo,里面是几乎相同的实现,总之就是解光传输的积分方程 目前主流辐射 ...

  10. 动态规划——I 记忆化搜索

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...