MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP)。这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的。这条命令并没有提供任何调整建议,但它能够提供重要的信息帮助你做出调优决策。
语法: explain < table_name >
 
1)id:  代表select语句的编号,从1开始.  如果是连接查询,表之间是平等关系, select 编号都是1,如果某select中有子查询,则编号递增.
2)select_type: 查询类型
①SIMPLE  简单的select,没有union和子查询
      ②PRIMARY  最外面的select,在有子查询的语句中,最外面的select查询就是primary 如上图
      ③UNION  UNION中的第二个或后面的SELECT语句 如下图
 
④DEPENDENT UNION    UNION中的第二个或后面的SELECT语句,取决于外面的查询
 
   ⑤.UNION RESULT  UNION结果 如上图
⑥.SUBQUERY 子查询中的第一个SELECT 如图1   
   ⑦.DEPENDENT SUBQUERY   子查询中的第一个SELECT,取决于外面的查询  如上图
⑧.DERIVED 派生表的SELECT(FROM子句的子查询)
 
3)table: 查询针对的表有可能是
实际的表名  如select * from t1;
表的别名    如 select * from t2 as tmp;
derived      如from型子查询时
null         直接计算得结果,不用走表
4)type: 是指查询的方式, 非常重要,是分析”查数据过程”的重要依据,从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL 
all:  意味着从表的第1行,往后,逐行做全表扫描.,运气不好扫描到最后一行.
index: 比all性能稍好一点,通俗的说: all 扫描所有的数据行,相当于data_all  index 扫描所有的索引节点,相当于index_all
range: 意思是查询时,能根据索引做范围的扫描
ref  意思是指 通过索引列,可以直接引用到某些数据行
eq_ref 是指,通过索引列,直接引用某1行数据
onst, system, null  这3个分别指查询优化到常量级别, 甚至不需要查找时间.
5)possible_keys    可能用到的索引,但最终,只能用1个
6). key   显示MySQL实际决定使用的索引。如果没有选择索引,是NULL。
7).key_len  显示MySQL决定使用的索引长度。如果索引是NULL,则长度为NULL。
使用的索引的长度。在不损失精确性的情况下,长度越短越好 
8). ref  指连接查询时, 表之间的字段引用关系
9). rows   rows列显示MySQL认为它执行查询时必须检查的行数。
10). Extra
该列包含MySQL解决查询的详细信息,下面详细.
①.Distinct   一旦MYSQL找到了与行相联合匹配的行,就不再搜索了 
②.Not exists   MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了 
③.Range checked for each Record(index map:#) 没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一 
④.Using filesort 看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行 (文件可能在磁盘,也可能在内存)
⑤.Using index 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候 
⑥.Using temporary 看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上 
⑦.Using where  使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题
 
---------------------
作者:菜鸟里根
来源:CSDN
原文:https://blog.csdn.net/sunqingzhong44/article/details/70789779
版权声明:本文为博主原创文章,转载请附上博文链接!

mysql优化——explain详解的更多相关文章

  1. mysql之explain详解

    mysql之explain详解 mysql之explain各个字段的详细意思: 字段 含义 select_type 分为简单(simple)和复杂 type all : 即全表扫描 index : 按 ...

  2. 【Explain】mysql之explain详解(分析索引的最佳使用)

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain 这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句 ...

  3. Mysql 性能优化Explain详解

    explain 功能我们在日常使用中,使用慢查询找到执行时间比较久的查询,然后使用SHOW STATUS.SHOW PROFILE.和explain做单条语句的分析.使用explain关键字可以模拟优 ...

  4. mysql中explain详解

    explain语法 有两种用法: 1.EXPLAIN tbl_name    2.EXPLAIN [EXTENDED] SELECT select_options 为了更好的说明它,我们需要建两张表, ...

  5. Mysql Explain 详解

    Mysql Explain 详解[强烈推荐] Mysql Explain 详解一.语法explain < table_name >例如: explain select * from t3 ...

  6. MySQL 执行计划explain详解

    MySQL 执行计划explain详解 2015-08-10 13:56:27 分类: MySQL explain命令是查看查询优化器如何决定执行查询的主要方法.这个功能有局限性,并不总会说出真相,但 ...

  7. MySQL慢查询优化 EXPLAIN详解

            我们平台过一段时间就会把生产数据库的慢查询导出来分析,要嘛修改写法,要嘛新增索引.以下是一些笔记.总结整理 慢查询排查         show status;  // 查询mysql ...

  8. (转)mysql explain详解

    原文:http://www.cnblogs.com/xuanzhi201111/p/4175635.html http://yutonger.com/18.html http://www.jiansh ...

  9. Mysql加锁过程详解(8)-理解innodb的锁(record,gap,Next-Key lock)

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

随机推荐

  1. C/C++ -- Gui编程 -- Qt库的使用 -- Qt5总结

    主要变化: 1.与Qt4相比,Qt5可以直接显示中文不需要手工转码2.Qt5模块发生变化,大部分组件并入widgets模块 注意事项:工程文件加一句greaterThan(QT_MAJOR_VERSI ...

  2. a标签发送邮件

    <a href="Mailto:292808135@qq.com?CC=292808135@qq.com&Subject=反馈&Body=花式求喷~%0A您的不满就是我 ...

  3. springboot 常用插件

    热部署 使用run as -java application, 把spring-loader-1.2.4.RELEASE.jar下载下来,放到项目的lib目录中,然后把IDEA的run参数里VM参数设 ...

  4. jsp页面查询的数据导出到excel

    java导入导出excel操作(jxl) jxl.jar 包下载地址:http://www.andykhan.com/jexcelapi/真实下载地址:http://www.andykhan.com/ ...

  5. [WC 2018]州区划分

    Description 题库链接 小 \(S\) 现在拥有 \(n\) 座城市,第 \(i\) 座城市的人口为 \(w_i\) ,城市与城市之间可能有双向道路相连. 现在小 \(S\) 要将这 \(n ...

  6. Node.js HTTP Server对象及GET、POST请求

    上一博客学习了请求与响应,2次读2次写,但有一个问题就是客户端写入的时候怎么知道请求到达.所以HTTP Server对象出现了.它提供了实现HTTP服务器的基本框架.它可以监听端口的底层套接字和接收请 ...

  7. JavaScript 函数全局变量定义

    在 JavaScript 中, 作用域 影响着变量的作用范围.在函数外定义的变量具有 全局 作用域.这意味着,具有全局作用域的变量可以在代码的任何地方被调用. 没有使用var关键字定义的变量,会被自动 ...

  8. C#基础笔记(第十四天)

    1.MD5加密 用户在数据库存密码需要进行再加密,这样一个过程叫MD5加密只要涉及到存用户的密码一定要用MD5加密MD5密码一般都是16进制的把一个密码转换成16进制的过程就叫MD5加密把字符串加密成 ...

  9. Servlet的数据库访问

    创建数据库:   import java.sql.*; public class SqlUtil { static { try { Class.forName("com.mysql.jdbc ...

  10. 比较json和fastjson的put()

    首先,分别运行下面两段json和fastjson的代码: import org.json.JSONException; import org.json.JSONObject; public class ...