MySQL的EXPLAIN命令详解(背就完事了)


MySQL的EXPLAIN命令用于 SQL语句的查询执行计划(QEP).
这条命令的输出结果能够让我们了解MYSQL优化器是如何执行SQL语句的。

语法

QEP是通过EXPLAIN命令生成的,它的语法包含两项:
在这里插入图片描述
EXPLAIN如果作用在表上,那么此命令等同于DESC表命令。
UPDATE和DELETE如果要优化则需要把它们改写成SELECT语句然后执行EXPLAIN.
在这里插入图片描述
这个UPDATE语句可以被重写成下面的SELECT语句:
在这里插入图片描述
存储过程缓存仅仅解析查询数。MySQL优化器是基于开销来工作的,它不提供任何QEP(查询执行计划)的位置。

各列详解

MySQL EXPLAIN命令能够为sql语句中的每一个表生成以下信息:
在这里插入图片描述
这个QEP(查询执行计划)显示没有使用任何索引并且处理了大量的行来满足查询。
对同样一条select语句,一个优化过的QEP如下:
在这里插入图片描述在这里插入图片描述
在这个QEP中我们看到它使用了一个索引,且只有一行数据被获取。

QEP中每行的所有列表如下:

  • id
  • select_type
  • table
  • partitions(这一列只有通过EXPLAIN PARTITIONS语法才会出现)
  • possible_keys
  • key
  • key_len
  • ref
  • rows
  • filtered(这一列只有在EXPLAINED EXTENDED语法中才会出现)
  • Extra

key

key列指出优化器选择使用的索引。
一般来说SQL查询中的每一个表都仅使用一个索引。
也存在索引合并的少数例外情况,如给定表上用到了两个或者更多索引:
在这里插入图片描述
show create table < table>命令是最简单的查看表和索引列细节的方式。

rows

rows列提供了试图分析所有存在于累计结果集中的行数的MySQL优化器估计值。
查询中总的读操作数量是基于合并之前行的每一行的rows值的连续积累而得出的。这是一种嵌套算法。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

possible_keys

possible_keys列指出优化器为查询选定的索引。
一个会列出大量可能的索引的QEP意味着备选索引数量太多了,同时也可能提示存在一个无效的单列索引。

key_len

key_len列定义了用于SQL语句的连接条件的键的长度。
此列值对于确认索引的有效性以及多列索引中用到的列的数目很重要。

table

table列是EXPLAIN命令输出结果中的一个单独行的唯一标识符。
这个值可能是表名,表的别名或者一个为查询产生临时表的标识符,如派生表,子查询或集合。

select_type

在这里插入图片描述

simple

对于不包含子查询和其他复杂语法的简单查询,这是一个常见类型。

primary

这是为更复杂的查询而创建的首要表(最外层表)。这个类型通常可以在derived和union类型混合使用时见到。

derived

当一个表不是一个物理表时,就被叫做derived。

dependent subquery

这个select_type值是为使用子查询而定义的。

union

这是union语句其中的一个sql元素。

union result

这是一系列定义在union语句中的表的返回结果。

partitions

在这里插入图片描述

Extra

在这里插入图片描述

using where

在这里插入图片描述

using temporary

在这里插入图片描述

using filesort

在这里插入图片描述

Using index

这个值重点强调了只需要使用索引就可以满足查询表的要求,不需要直接访问表数据.

using join buffer

这个值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果.
如果出现这个值,我们可以根据查询的具体情况添加索引改进性能.

Impossible where

在这里插入图片描述

select tables optimized away

在这里插入图片描述在这里插入图片描述

Distinct在这里插入图片描述
index merges

在这里插入图片描述

id

在这里插入图片描述

ref

在这里插入图片描述

filtered

在这里插入图片描述

type

在这里插入图片描述

解释EXPLAIN输出结果

理解你的应用程序和优化SQL语句同等重要。
下面给出一个父子关系中获取孤立的父辈记录的商业需求的例子。
这个查询可以用三种不同的方式构造。尽管产生相同的结果,但QEP会显示三种不同的路径。
第一种:
在这里插入图片描述在这里插入图片描述
第二种:
在这里插入图片描述在这里插入图片描述
第三种:
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值