explain工具可以确认执行计划是否良好,查询是否走了合理的索引。查询的执行计划,随着数据的变化也可能会有变化。调用方式:explain + [sql语句]。

另外,explain是有局限性的:
1. 不会说明触发器、存储过程、自定义函数对查询的影响情况;
2. 不考虑各种Cache情况;
3. 不能显示执行查询时所做的优化工作;
4. 部分信息是估算的,并非精确值;
5. mysql 5.6之前,只能解释select操作,其他操作需要重写为select之才查看执行计划。
6. 如果from里有子查询,explain可能会执行这个子查询。所以,如果有耗资源很大的子查询,使用explain会产生很大的开销。

各列字段的解释,如下:

1. id,一组数字,操作顺序,如果id相同,则执行顺序由上至下。如果是子查询,id的序号会递增,值越大则优先级越高,越先被执行。

2. select_type,表示每个子句的类型,简单还是复杂,取值有如下几种:

  a) simple:简单查询,无子查询或union等;
  b) primary:查询中若包含任何复杂的子部分,最外层则被标记为primary;
  c) subquery:在select或where中若包含子查询,则该子查询被标记为subquery;
  d) derived:from中包含子查询,被标记为derived;
  e) union:若select出现在union之后,则被标记为union;
  f) union result:从union表中获取结果的select将被标记为union result;
3. type,找到所需行的方式,又称访问类型,取值有如下几种,由最差到最好:

  a) all:全表扫描。
  b) index:遍历索引,全索引扫描。
  c) range:索引范围扫描。
  d) ref:非唯一性索引扫描,交返回匹配单独值的所有行,常见于使用非唯一性索引或唯一性索引的非唯一前缀进行的查找。
  e) eq_ref:唯一性索引扫描。
  f) const、system:当mysql对查询的某部分进行优化,并转换为一个常量时。如将主键置于where列表中,mysql就能将该查询转换为一个常量。system是const的特例,当查询的表只有一行的情况下,即可使用system。
4. possible_keys: 指出mysql能使用哪个索引在表中找到行,查询涉及的字段上若存在索引,则该索引将被列出,但不一定会被查询使用到。

5. key:使用到了哪个索引,这里列出的是实际使用到的索引,若没有使用索引,则显示为null。

6. ref:连接匹配条件,即哪些列或常量用于查找索引上的值。

7. rows:找到所需记录,需要读取的行数,越少越好。

8. Extra:不适合在其他列显示,但却十分重要的信息,常见的有如下值:
  a) Using index:使用了覆盖索引。
  b) Using where:where条件未使用索引。
  c) Using temporary:需要使用临时表来存储结果集,常见于排序和分组查询。性能差。
  d) Using filesoft:使用了文件排序,性能差。

mysql explain工具使用的更多相关文章

  1. MySQL分析工具explain介绍

    EXPLAIN是MySQl必不可少的一个分析工具,主要用来测试sql语句的性能及对sql语句的优化,或者说模拟优化器执行SQL语句. 简单的说是execute plan, 获取MySQL数据库的执行计 ...

  2. 一文学会MySQL的explain工具

    开篇说明 (1) 本文将细致介绍MySQL的explain工具,是下一篇<一文读懂MySQL的索引机制及查询优化>的准备篇. (2) 本文主要基于MySQL5.7版本(https://de ...

  3. explain之三:MYSQL EXPLAIN语句的extended 选项学习体会,分析诊断工具之二

    MySQL 的explain命令有一个extended选项,我想可以很多人都没有注意,因为它对命令的输出结果没有任何改变,只是增加了一个warning.这个 warning中显示了MySQL对SQL的 ...

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

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

  5. 【转载】 mysql explain用法

    转载链接:  mysql explain用法 官网说明:     http://dev.mysql.com/doc/refman/5.7/en/explain-output.html 参数:  htt ...

  6. Mysql Explain 详解(转)

    原文:http://www.cnitblog.com/aliyiyi08/archive/2008/09/09/48878.html 一.语法 explain < table_name > ...

  7. MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)

    MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...

  8. 15款最佳的MySQL管理工具和应用程序

    工欲善其事,必先利其器.几乎每个开发人员都有最钟爱的 MySQL 管理工具,它帮助开发人员在许多方面支持包括 PostgreSQL,MySQL,SQLite,Redis,MongoDB 等在内的多种数 ...

  9. MySQL客户端工具 SQLyog

    我最喜欢它的History功能,把执行过的操作对应语句都输出出来,一些麻烦的语句用GUI操作后,还能保存对应的sql语句.不错! 官网:http://www.webyog.com 下面是官方的介绍:S ...

随机推荐

  1. .net连接eDirectory,需要安全连接的解决方案

    用C#连接eDirectory ,提示: “这个请求需要一个安全的连接.” 解决办法,eDirectory禁用TLS(这方法比较猥琐) ssh连接到eDirectory服务器上,执行: ldapcon ...

  2. Javascript脚本 :Function 对象的定义和使用

    javascript  Function 对象的定义 创建函数的语法:var myFunction=new Function(arg1,arg2,...agrN,body);agrN 为函数的参数,b ...

  3. 国外物联网平台(6):Electric Imp

    国外物联网平台(6)——Electric Imp 马智 公司背景 Electric Imp成立于2011年,公司设立在美国加利福尼亚州洛斯阿尔托斯和英国剑桥 公司投资者包括:富士康技术集团.PTI创投 ...

  4. 【转】Android自定义控件(二)——有弹性的ScrollView

    原文地址:http://blog.csdn.net/a105865708/article/details/17784041 实现了当手指滑动到ScrollView的顶部.底部时, 可以继续的向上.向下 ...

  5. Eclipse平台下配置Go语言开发环境(Win7)

    <Go语言编程>中写到:“从功能和易用性等方面考虑, Eclipse+GoEclipse.LiteIDE这两个环境在所有IDE里面是表现最好的”,所以笔者打算采用Eclipse+GoEcl ...

  6. 「HNOI2013」切糕

    题目链接 戳我 \(Solution\) 对于这道题,我们首先来看看没有\(D\)这个约束的该如何做. 我们考虑构造最小割模型. 其实直接贪心就好了,选出每条路径上的最小值就好了(路径就是将每层的同一 ...

  7. 主流C语言编译器介绍

  8. npm更换为镜像

    背景:npm在安装的过程中需用从国外的网站获取代码,速度非常慢,因此更换为淘宝镜像,提升速度. 1.永久起作用: npm config set registry https://registry.ta ...

  9. 「BZOJ 2342」「SHOI 2011」双倍回文「Manacher」

    题意 记\(s_R\)为\(s\)翻转后的串,求一个串最长的形如\(ss_Rss_R\)的子串长度 题解 这有一个复杂度明显\(O(n)\)的做法,思路来自网上某篇博客 一个双倍回文串肯定当且仅当本身 ...

  10. docker概述及基础操作

    docker概述 容器技术已经成为应用程序封装和交付的核心技术容器技术的核心有以下几个内核组成CGroups-资源管理NamsSpace-进程管理SElinux-安全 由于是在物理机上实施隔离,启动一 ...