mysql之执行计划——explain中的extra详解

之前一直对explain中的extra和type两个类型混淆。其实两者完全不同,type列和覆盖索引毫无关系,它只是表示这个查询访问数据的方式,或者说是MySQL查询行的方式。

我们使用一个例子来讲解这个extra列。下面的例子来自:https://blog.csdn.net/jeffrey11223/article/details/79100761

首先我们创建一个表

CREATE TABLE test_extra ( 
	xxx varchar(20) NOT NULL, 
	yyy varchar(20) NOT NULL, 
	zzz datetime NOT NULL, 
	aaa varchar(10) NOT NULL, 
	PRIMARY KEY (xxx,yyy,zzz)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

通过show index from test_extra;语句来显示刚刚创建的表中的索引情况:

这里写图片描述

1. 第一种情况

这里写图片描述

这三个执行计划,extra字段的值是using index,意思是索引覆盖,查询的内容可以直接在索引中拿到。

2. 第二种情况

这里写图片描述

第一个查询语句的type使用ref,是因为匹配索引的最左前缀。extra为null,是因为什么?????????难道是因为直接使用索引就可以查询出来的原因吗???这里我没搞懂。。。

这里写图片描述

第二个查询语句的type使用All,是因为不符合最左前缀的理论,从而使用全盘扫描的方式查询数据,而extra的值是using where是因为,使用where来过滤条件。

3. 第三种情况

这里写图片描述

查询的内容在索引内,where条件符合索引最左前缀,extra是using where using index, 且type是ref,表面用了索引,索引覆盖了查询,using where表示发生了过滤

4. 第四种情况

这里写图片描述

查询的内容不再索引内,where条件为索引最左前缀,extra为null, type为ref,表明虽然用到了索引,但是没有索引覆盖,产生了回表。???回表问题需要搞一下。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值