做 MySQL 查询优化遇到明明建了索引查询仍然很慢,看这个 SQL 的执行计划,看它到底有没有用到索引,执行的具体情况。我们可以用 EXPLAIN 命令查看 SQL 的执行计划,SQL 优化的重要性和执行计划密切相关。

EXPLAIN 能够让我们了解到MySQL将如何执行出现在 EXPLAIN 之后的那条 SQL 语句,例如:

EXPLAIN SELECT score.* FROM score INNER JOIN grade_event

;

在MySQL 5.6.3之前,该语句必须为SELECT。自MySQL5.6.3起,该语句可以为 SELECT、DELETE、INSERT或UPDATE。

在 EXPLAIN 关键字之后,可以指定一个可选的指示器,指明要产生的输出类型:

例如:

会输出如图内容,这些字段的意思都是啥,是今天这篇文章的重点。

EXTENDED

选项将使 EXPLAIN 语句生成更多的执行计划信息。在 EXPLAIN 语句执行完毕之后立刻执行 SHOW WARNINGS 语句可以查看这些信息。

FORMAT

表明的是用“传统”格式(默认)产生输出,还是用JSON格式产生输出。JSON输出包含了扩展的和可用的分区信息。此选项是在MySQL5.6.5里引入的。

id

这个输出行所对应的的 select 语句的ID 编号。如果语句包含子查询,或该语句中使用了 UNION,那么语句汇总可以有多个 select 子句。

select_type

这个输出行所对应的的 select 语句类型如下表所示。

类型 含义
SIMPLE 不带UNION或子查询部分的SELECT子句
PRIMARY 最外层或最左侧的SELECT语句
UNION UNION里的第二条或最后的SELECT子句
DEPENDENT UNION 和UNION相似,但需要依赖于某个外层查询
UNION RESULT UNION的结果
SUBQUERY 子查询中的第一个SELECT子句
DEPENDENT SUBQUERY  和SUBQUERY相似,但需要依赖于某个外层查询
DERIVED FROM子句里的子查询
UNCASHEABLE SUBQUERY 无法缓存的子查询结果
UNCASHEABLE UNION 无法缓存的子查询UNION的第二条或随后的SELECT子句

table

输出行引用的那个表。

partitions

将要使用的分区。只有出现PARTITIONS选项时才显示这列。对于非分区表,这个值为NULL。

type

MySQL将执行的连续类型。这些类型(从优到劣)包括system const eq_ref ref ref_or_null index_merge unique_subquery index_subquery range index和ALL。排在前面的类型有更强的限制性,这意味着MySQL在检索的过程中检查的行会相对少一些。

possible_keys

MySQL认为在 名称出现在table 列里的那个表里查找行时可能会用到索引。如果这个输出列里是NULL,则表明没有找到索引。

key

MySQL在指定表里查找行时实际用到的索引。(如果MySQL使用了 index_merge 连续类型,这里可能会列出几个键,因为优化器会使用几个索引来处理查询。)如果这个输出里的值时NULL,则表明没有再该表里找到这样的索引。

key_len

实际使用的索引的长度。若MySQL会使用索引的最左前缀,则此数字可能会小于全文索引行的长度。

ref

MySQL 用来与索引值进行比较的值。单次 const 或 ‘???’ 表示的是对常数进行比较,若是某个列的名称,则表示逐个比较列。

rows

MySQL 为完成查询而需要在表里检查的行的估计百分比。这个值输出的值的乘积就是索引表必须检查的行的各种可能的组合的估计值。

finltered

它指的是将于前面的表进行连接的行的估计百分比,若存在 EXTENDED 选项,则会显示此列。

Extra

其他执行计划相关的信息。这个值或者为空白,或者包含一个或多个下面这样的值。

  • Using filesort 需要将索引值写到文件中并且排序,以便安排顺序检索相关行。
  • Using index MySQL 可以不必检查数据行,只使用索引信息就能检索表信息。
  • Using temporary 利用SELECT 语句只能怪 WHERE 子句里 的信息查询行。

此外,还有很多其他的值并未列在这里。与Extra 值有关的更多信息请MySQL-EXPLAIN执行计划Extra解释

MySQL-EXPLAIN执行计划字段解释的更多相关文章

  1. Mysql explain执行计划

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

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

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

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

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

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

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

  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执行计划详解

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

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

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

  9. 学习计划 mysql explain执行计划任务详解

    我们在之前已经找到了需要优化的SQL,但是怎么知道它的那些方面需要优化呢? explain就是为了这个使用的. explain显示了 mysql 如何使用索引来处理select语句以及连接表.可以帮助 ...

  10. 解析MYsql explain执行计划extra列输出

    EXPLAIN Extra 列信息: explain Extra列输出包含了关于mysql如何解决query的额外信息,特别是出现Using filesort 和 using temporary时,应 ...

随机推荐

  1. Apple Swift编程语言入门教程

    Apple Swift编程语言入门教程 作者: 日期: 布衣君子 2015.09.22 目录 1   简介 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 ...

  2. Mariadb 数据库写入中文乱码问题

    从其他表里面导入数据,出现中文乱码错误.之前操作时并没有碰到类似问题,有些不得其解. 在网上搜了下,最后参考这篇文章,在执行insert前,先执行 set names gbk; 然后成功插入. 链接: ...

  3. JavaScript之Array常用函数汇总

    [20141121]JavaScript之Array常用功能汇总 *:first-child { margin-top: 0 !important; } body>*:last-child { ...

  4. ci(转)

    1  从代码管理器签出源文件 2  修改代码 3  编译代码 4  遇到错误,转到2继续修改直到达到预期 5  运行单元测试,期望所有的测试绿色(通过) 6  单元测试出错,转入2 7  重构代码,按 ...

  5. linux scp

    scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.linux的scp命令可以在linux服务器之间复制文件和目录. scp命令的用处: scp ...

  6. unity Android 打包后读取 xml 文件

    原地址:http://www.cnblogs.com/wuzhang/p/wuzhang20140731.html 问题:    前天在做东西的过程中发现了一个让人很纠结的问题,为什么Unity 程序 ...

  7. 一分钟搭建Webpack+react+es6框架

    最近react刷屏的厉害,而随着它一起走进我们视野的还有webpack,webpack只是个工具,为什么如此火呢?因为简单好了不废话.   直接进入正题: 打开命令行工具: npm install - ...

  8. 想挑战AlphaGO吗?先和PostgreSQL玩一玩?? PostgreSQL与人工智能(AI)

    1月4日晚,随着古力认输,Master对人类顶尖高手的战绩停留在60胜0负1和,而令人尴尬的是这唯一一场和棋还是因为棋手掉线系统自动判和,并不是棋盘上的局势真的势均力敌了.包括聂卫平.柯洁.朴廷桓.井 ...

  9. hdu1059(多重背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1059 题意 : 按顺序读入一些列数,所对应的序列代表价值,数值代表个数(如a[5]=6 ,代表价值为五 ...

  10. 办理多伦多大学(本科)学历认证『微信171922772』Toronto学位证成绩单使馆认证University of Toronto

    办理多伦多大学(本科)学历认证『微信171922772』Toronto学位证成绩单使馆认证University of Toronto Q.微信:171922772办理教育部国外学历学位认证海外大学毕业 ...