mysql-Explain关键字

Explain是什么?

一条查询语句在经过MySQL查询优化器优化后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如对于每个表采用什么访问方法来具体执行查询等等。
EXPLAIN可以帮助我们查看某个查询语句的具体执行计划.

EXPLAIN语句输出的各个列的作用:
在这里插入图片描述

执行计划详解

准备工作:建两张表s1、s2,里有10000条记录,除id列外其余的列都插入随机值。

CREATE TABLE s1/s2(
    id INT NOT NULL AUTO_INCREMENT,
    key1 VARCHAR(100),
    key2 INT,
    key3 VARCHAR(100),
    key_part1 VARCHAR(100),
    key_part2 VARCHAR(100),
    key_part3 VARCHAR(100),
    common_field VARCHAR(100),
    PRIMARY KEY (id),
    KEY idx_key1 (key1),
    UNIQUE KEY idx_key2 (key2),
    KEY idx_key3 (key3),
    KEY idx_key_part(key_part1, key_part2, key_part3)
) Engine=InnoDB CHARSET=utf8;

select_type

MySQL为每一个SELECT关键字代表的小查询都定义了一个称之为select_type的属性,只要知道了某个小查询的select_type属性,就知道了这个小查询在整个大查询中扮演了一个什么角色
select_type主要的几个属性如下:

1、SIMPLE
查询语句中不包含UNION或者子查询的查询都算作是SIMPLE类型,比方说下边这个单表查询的select_type的值就是SIMPLE:
在这里插入图片描述
2、PRIMARY

对于包含UNION、UNION ALL或者子查询的大查询来说,它是由几个小查询组成的,其中最左边的那个查询的select_type值就是PRIMARY,比方说:
在这里插入图片描述
从结果中可以看到,最左边的小查询SELECT * FROM s1对应的是执行计划中的第一条记录,它的select_type值就是PRIMARY。

3、UNION
对于包含UNION或者UNION ALL的大查询来说,它是由几个小查询组成的,其中除了最左边的那个小查询以外,其余的小查询的select_type值就是UNION,可以对比上一个例子的效果,这就不多举例子了。

还有其他的一些属性,相对比较少见就不一一介绍了;

table

table列代表该表的表名
在这里插入图片描述

id

查询语句中每出现一个SELECT关键字,就会为它分配一个唯一的id值,来唯一标识这个查询语句
在这里插入图片描述

type(核心)

type-表的访问方法

possible_keys和key

possible_keys列表示可能用到的索引有哪些,key列表示实际用到的索引有哪些,比方说下边这个查询:
在这里插入图片描述

key_len

key_len列表示当优化器决定使用某个索引执行查询时,该索引记录的最大长度
比如下边这个查询:
在这里插入图片描述

ref

当使用索引列等值匹配的条件去执行查询时,ref列展示的就是与索引列作等值匹配的是什么
在这里插入图片描述可以看到ref列的值是const,表明在使用idx_key1索引执行查询时,与key1列作等值匹配的对象是一个常数

rows

rows表示预计需要扫描的行数

  • 如果查询优化器决定使用全表扫描的方式对某个表执行查询时,执行计划的rows列就代表预计需要扫描的行数
  • 如果使用索引来执行查询时,执行计划的rows列就代表预计扫描的索引记录行数

比如下边这个查询:
在这里插入图片描述
我们看到执行计划的rows列的值是266,这意味着查询优化器在经过分析使用idx_key1进行查询的成本之后,觉得满足key1 > 'z'这个条件的记录只有266条。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值