MYSQL之explain详解

MYSQL之explain详解

一、table
二、 id
三、select_type
四、type
五、key
六、ref
七、Extra

一、table

单表表名,联表查询会有多条数据,一条数据table只有一个值。

二、 id

虽然说多表查询,explain会返回多条数据,但是,只要对应一个select,那么id就相同。即一个select,对应一个一样的id。只有多个select时,id值才有多个

三、select_type

每个select语句在整个sql中扮演的角色是什么。

PRIMARY:
主要的,就是最外层的sql查询

SIMPLE:
最简单的,没有子查询的sql和没用union的

SUBQUERY:
子查询

四、type

我们优化sql时,最少达到range级别,最好达到ref级别。
结果值从好到坏依次是:
system>const>eq_ref>ref>fulltext>range>index>all。
这里解释几个常见的:

const:
根据主键或唯一二级索引列与常数进行等值匹配时,如:select * from table where id=‘xxx’
eq_ref:
在连接查询时(内连接,左连接,右连接),如果被驱动表(被连接表)是通过主键或者唯一二级索引列等值匹配的方式进行访问的
(如果唯一二级索引是联合索引的话,所有的索引列都必须进行等值比较),
则对该被驱动表访问方法就是eq_ref。
ref:
:通过普通二级索引列与常量进行等值匹配来查询某个表,对该表的访问方式就是ref。注意是等值匹配,=号, in和between等都不行。
index_merge:
索引合并,就是把两个二级索引合并成一个去执行sql了。
range:
使用索引获取范围区间的记录,如between,<,>,in等。
index:
在遍历完所有的二级索引之后,使用了索引覆盖的,就是index。意思就是联合索引中,没有遵循最左原则,where条件用了联合索引中间的值,
然后select的列里都是联合索引的列,那么就会全部扫描索引,然后返回结果。因为没遵循最左原则,所以要扫描全部的索引,查找合适的值。
如果select的列里,有不是索引的列出现,那么就会是all,而不是index。这个叫索引下推。
索引下推就是没遵循最左原则,但是涉及到的列,都是联合索引的列,那么,就从这个联合索引中去全部扫描数据,进行数据查询,这样效率肯定比全表扫描高点儿。
这种情况,like的%在左边,也会走索引下推。因为这样扫描信息量肯定比扫描全部信息量低。
all:
全表扫描

五、key

sql语句最终使用的索引列

六、ref

当type是ref,ref_eq等值匹配的类型时,ref表明做等值匹配的是一个常量const还是一个函数hunc。不是等值匹配的ref列没值。

七、Extra

额外的信息,包括:

Impossible where:
查询语句的where子句永远为false

using index:
使用了索引覆盖,就是using index

using index condition:
在联合索引中,当根据最左列的索引定位到范围后,如果sql中还有右侧列的查询条件,根据右侧列的条件在联合索引上继续筛选了数据,就显示using index condition

using where:
当sql中用了非索引进行过滤的时候,显示using where。也就是过滤数据的时候,没有通过二级索引,来过滤条件,则就是using where。

using join buffer:
连接查询时,被驱动表不能利用索引加快访问速度,显示这个。

using filesort:
当 order by的字段不是索引时,就需要进行文件排序了。这个过程是很慢的。

using temporary:
使用临时表进行sql的处理,一般和using filesort一起出现。一般group by,order by有可能会出现。这个性能也很慢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值