MySQL中explain关键字

概述

explain是去查看MySQL如何查询数据
explain示例:

EXPLAIN SELECT * FROM student WHERE `name`='Walter Yan' AND age=25

EXPLAIN返回值的格式

idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEstudentALL333.33Using where

id: 当前的查询标识符.
select_type: 查询类型, 具体请参考MySQL手册中的13.2.10 SELECT Statement章节.
table: 当前的表名.
partitions: 当前数据的分区, 如果没有分区则为NULL.
type: 联接的类型, 比如ALL,const等, 不同的联接类型会导致MySQL采用不同的方法区查找数据.
possible_keys: 可能用到的key.
keys: 显示MySQL实际决定使用的键值(或者索引).
key_len: MySQL决定使用的键值的长度.
ref: 显示将哪些列或常量与键列中命名的索引进行比较,以从表中选择行.
rows: MySQL执行查询必须检查的行数.
filtered: 通过条件查询(比如where条件)过滤到的行数.
Extra: 其他信息.

type: EXPLAIN联接类型

EXPLAIN语句的返回表的type字段描述了参与SQL运算的表之间是如何联接的. 下面列表中的联接方式是由好到坏排列的.

syatem
const

这张表最多只包含一条与这个查询匹配的行, 而这一行在查询开始时候就被读取到. 因为只有一行,所以这一行的其他字段的值就被剩余的优化器视为常量. 常量表的查询非常快, 因为他们只会被读取一次.
当我们使用唯一索引

eq_ref
ref

从先前表读取所有索引匹配的行组合, ref如果进行联接,则只是使用键值的最左前缀,如果键不是primary key或者unique key(即是:如果联接无法通过键值选择单个行). 如果使用的键值仅需要匹配几行, 则这是一个很好的方式.
ref适用于那些加了索引的列的比较(=, <=, =>), 在如下示例中, MySQL将采用ref join去处理ref_tbl.

# 在role_name字段上添加一个普通BTREE索引
EXPLAIN SELECT * FROM t_role WHERE role_name='admin';
EXPLAIN SELECT * from ref_tbl, other_tbl WHERE ref_tbl.col1=other_tbl.col1;
ALL

对在形成组合表之前的表进行全表扫描(逐行扫描).

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值