Mysql explain

explain 常用于分析sql语句的执行效率,使用时在正常的select语句之前添加explain并执行就会返回执行信息,返回的执行信息如下:

 id:id列的编号是select的序列号,有几个select就有几个id,并且id是按照select出现的顺序增长的,id列的值越大优先级越高,id相同则是按照执行计划列从上往下执行,id为空则是最后执行。

select_type:  表示对应行是简单查询还是复杂查询。

  1、simple:不含有子查询和union的简单查询

  2、subquery:包含在select中的子查询

  3、primary:复杂查询中最外层的查询语句

  4、derived:包含在from中的子查询,mysql会将子查询的结果保存在临时表(衍生表)中;

  5、union:在union后的查询语句,union result为合并结果(union result<1, 2>中1,2表示id列的值)

table:表示当前分析的表

partitions:查询匹配记录的分区

type:表连接的类型,mysql如何查找表中的行,从左到右最优到最差:system > const > eq_ref > ref > range > index > all

  null:mysql在优化阶段分解查询语句,在执行阶段不在访问表或者索引。

  system、const:常量。MySQL对查询的某部分进行优化并把其转化成一个常量(可以通过show warnings命令查看结果)。system是const的一个特例,表示表里只有一条元组匹配时为system。

  eq_ref:主键或唯一键索引被连接使用,最多只会返回一条符合条件的记录。简单的select查询不会出现这种type。

  ref:相比eq_ref,不使用唯一索引,而是使用普通索引或者唯一索引的部分前缀,索引和某个值比较,会找到多个符合条件的行。

  range:通常出现在范围查询中,比如in、between、大于、小于等。使用索引来检索给定范围的行。

  index:扫描全索引拿到结果,一般是扫描某个二级索引,二级索引一般比较少,所以通常比ALL快一点。

  all:全表扫描,扫描聚簇索引的所有叶子节点。

possible_keys:在查询中可能用到的索引。如果该列为NULL,则表示没有相关索引,可以通过检查where子句看是否可以添加一个适当的索引来提高性能。

 key: 此列显示MySQL在查询时实际用到的索引。在执行计划中可能出现possible_keys列有值,而key列为null,这种情况可能是表中数据不多,MySQL认为索引对当前查询帮助不大而选择了全表查询。如果想强制MySQL使用或忽视possible_keys列中的索引,在查询时可使用force index、ignore index。
key_len:MySQL在索引里使用的字节数,通过此列可以算出具体使用了索引中的那些列。索引最大长度为768字节,当长度过大时,MySQL会做一个类似最左前缀处理,将前半部分字符提取出做索引。当字段可以为null时,还需要1个字节去记录。

ref:显示key列记录的索引中,表查找值时使用到的列或常量。常见的有const、字段名

rows:MySQL在查询中估计要读取的行数。注意这里不是结果集的行数。

Extra:此列是一些额外信息。常见的重要值如下:

  1)Using index:使用覆盖索引(如果select后面查询的字段都可以从这个索引的树中获取,不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其它字段值,这种情况一般可以说是用到了覆盖索引)。

  2)Using where:使用 where 语句来处理结果,并且查询的列未被索引覆盖。

  3)Using index condition:查询的列不完全被索引覆盖,where条件中是一个查询的范围。 

  4)Using temporary:MySQL需要创建一张临时表来处理查询。出现这种情况一般是要进行优化的。

  5)Using filesort:将使用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。

  6)Select tables optimized away:使用某些聚合函数(比如 max、min)来访问存在索引的某个字段时。

参考文档链接:https://blog.csdn.net/fsdfkjai/article/details/121770629

Mysql explain 每个属性含义的更多相关文章

  1. mysql explain用法和结果的含义

    重点是第二种用法,需要深入的了解. 先看一个例子: mysql> explain select * from t_order; +----+-------------+---------+--- ...

  2. mysql explain用法和结果的含义(转)

    重点是第二种用法,需要深入的了解. 先看一个例子: mysql> explain select * from t_order; +----+-------------+---------+--- ...

  3. mysql explain用法和结果的含义

    转自:http://blog.chinaunix.net/uid-540802-id-3419311.html explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择 ...

  4. 【开发笔记】- MySQL EXPLAIN用法和结果的含义

    转自:http://blog.chinaunix.net/uid-540802-id-3419311.html explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择 ...

  5. mysql explain详解

    对于经常使用mysql的兄弟们,对explain一定不会陌生.当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供有关表如何联合和以什么次序的信息.借助于 ...

  6. [转]Mysql explain用法和性能分析

    本文转自:http://blog.csdn.net/haifu_xu/article/details/16864933  from  @幸福男孩 MySQL中EXPLAIN解释命令是显示mysql如何 ...

  7. mysql explain 分析sql语句

    鉴于最近做的事情,需要解决慢sql的问题,现补充一点sql语句性能分析之explain的使用方式! 综合返回数据情况,分析各个参数,可以了解sql 使用方法:explain  + sql语句 如 :e ...

  8. mysql explain优化

    简介 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.EXPLAIN 命令用法十分简单, 在 S ...

  9. 为什么rows这么大,在mysql explain中---写在去acumg听讲座的前一夜

    这周五下班前,发现了一个奇怪问题,大概是这个背景 一张表,结构为 Create Table: CREATE TABLE `out_table` ( `id` ) NOT NULL AUTO_INCRE ...

  10. mysql explain和profiling

    语法:explain  select .... 变体: 1.explain extended select .... 将执行计划“反编译”成select语句: 运行show warnings 可以得到 ...

随机推荐

  1. 在CIMES中调用存储过程

    页面 调用步骤 DataTable dtResult = null; CustomDataAgent TODB_con = DBCenter.Create(AppSetting.Manufacturi ...

  2. JavaScript的知识点整理

    最近写了一个员工管理作业,暴露了一些问题就是. JS的查找标签的时候,要确定返回的是DOM对象还是数组,document对象可以是任意dom对象,将查询范围限制在当前dom对象, 1.直接查找标签 d ...

  3. 从各种点理解Unity中的协程

    这个写的很好,https://zhuanlan.zhihu.com/p/59619632

  4. 图片上传造成VS关闭

    原来的地方:https://q.cnblogs.com/q/129719/ VS2019开启调试,测试图片上传的时候,一点到图片上传,直接导致VS调试崩掉,返回 程序"[14764] iis ...

  5. protobuf笔记

    protobuf的enum .proto的enum类型在编译后,是C++的enum

  6. 淘淘商城项目技术点-9:使用FTPClient及FtpUtil工具类将图片上传至ngnix图片服务器

    package com.taotao.controller; import com.taotao.common.utils.FtpUtil; import org.apache.commons.net ...

  7. ANT+JMETER+Jenkins 接口自动化

    Linux环境下搭建:ANT+JMETER+Jenkins 接口自动化 一.准备环境: 1.下载 JDK1.8 JDK下载地址:https://www.oracle.com/java/technolo ...

  8. .Net Standard .Net Framework .Net Core 版本对应

  9. nginx代理出现上传文件过大解决办法

    1.错误描述 2.错误原因 1.上传文件时,利用localhost访问系统,不会出现这个问题:用域名访问这个系统时,出现这个问题,提示是:请求实体太大 由于Nginx反向代理服务器client_max ...

  10. Java基础之基本运算符

    基本运算符 算数运算符:+.-.*./.%.++.-- 赋值运算符:= 关系运算符:>.<.>=.<=.==.!= instanceof 逻辑运算符:&&.|| ...