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 explain执行计划的更多相关文章

  1. MySQL性能分析, mysql explain执行计划详解

    MySQL性能分析 MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析 ...

  2. MySql——Explain执行计划详解

    使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈. explain执行计划包含的信息 其中最重要的字段为:i ...

  3. [MySQL] explain执行计划解读

    Explain语法 EXPLAIN SELECT …… 变体: 1. EXPLAIN EXTENDED SELECT …… 将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得 ...

  4. 网站优化—mysql explain执行计划

    explain执行计划 简介MySQL调优: 先发现问题(慢查询,profile) 对于使用索引和没有使用索引,了解到索引可以快速去查找数据 了解什么是索引(索引是排好序的快速查找的数据结构) 索引的 ...

  5. 【夯实Mysql基础】mysql explain执行计划详解

    原文地址   1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询.   2).select_type列常见的有: A ...

  6. mysql explain执行计划详解

      1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询.   2).select_type列常见的有: A:simp ...

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

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

  8. 【转】mysql explain执行计划详解

      1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询.   2).select_type列常见的有: A:simp ...

  9. mysql explain 执行计划详解

    1).id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询.   2).select_type列常见的有: A:simple ...

随机推荐

  1. MFC HTTP GET 请求

    //HTTP GET 下载文件 CInternetSession *pInetSession = new CInternetSession(AfxGetAppName(),1,PRE_CONFIG_I ...

  2. 使用Grunt构建任务管理脚本(转)

    Grunt是构建Web开发的一个系统,但它创建比较困难.在这个指南中,你将学会如何配置Grunt创建一个现代的Web项目.当你完成教程中的配置之后,你的Gruntfile将具有: 从源目录中向目标目录 ...

  3. glsl 多重纹理

    #include"glsl.h" void SHADER::drawBox() { glBegin(GL_QUADS); // Front Face glNormal3f( 0.0 ...

  4. 轻量级iOS安全框架:SSKeyChain

    原文地址: http://blog.csdn.net/kmyhy/article/details/7261065 SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码.账 ...

  5. SharePoint 2010 自定义页面出现“项目可能已被其他用户删除或重命名”问题跟踪

    异常详细信息: Microsoft.SharePoint.SPException: 位置 http://portal/Pages/ShowArticle.aspx?id=19&mylist=8 ...

  6. How many virtual users do I need? 计算需要的vuser

    基本公式:--------English:Total Transations = TPS * Vuser==>Vuser = Total Transations / TPS=========== ...

  7. UGUI 的多分辨率适配

    1.Canvas的属性配置 2.Canvas Scaler的属性配置 3.根据不同的屏幕的比例动态修改缩放基准 void Start () { float standard_width = 960f; ...

  8. JavaScript 取对象的值时用点和中括号的区别

    用点的时候 点后面是对象的真实属性名称, 用中括号的时候 中括号里面是变量或者字符串

  9. ubuntu下使用sublime text进行C编程开发尝鲜

    1 选择编译系统 2 编写文件,编译(Ctrl+B)运行(Shift+Ctrl+B)

  10. Effective C++ Item 15 Provide access to raw resources in resource-managing classes

    In last two item, I talk about resource-managing using RAII, now comes to the practical part. Often, ...