Mysql性能调优之Explain

执行计划(query Execution plan)

语句格式:explain select * from emp
执行该语句并不会真正的查询出数据库表内的一行数据,而是有10列字段信息:
id,select_type,table,type,partitions,possible_keys,key,key_len,ref,rows,Extra
下面分别介绍各字段含义:

ID:
select出现的顺序号,如果含有子查询,id值从左往右逐渐增大,值越大,执行的优先级越高,即先被执行。id如果相同,执行顺序由上至下。

select_type:
simple:简单查询,查询不包含子查询和union。
primary:复杂查询的最外层的select
subquery:在select的子查询,但不在from子句。或子查询中的第一个select。
derived:衍生表,一般在复杂查询的from后的第一个select,可以提供查询出一个数据表。

type:
表示MySQL在表中找到数据行的方式,又称访问类型。查找数据行记录的大概范围。
常用的类型有: system, const, eq_ref, ref, range, index, ALL(从左到右,性能从最优到最差)

system
该表只有一行。这是const连接类型的特例

const
该表最多只有一个匹配行,在查询开头读取。因为只有一行,所以优化器的其余部分可以将此行中列的值视为常量。 const表非常快,因为它们只读一次。

eq_ref
对于前面表格中的每个行组合,从该表中读取一行。除了 system和 const类型之外,这是最好的联接类型。当连接使用索引的所有部分且索引是 索引PRIMARY KEY或UNIQUE NOT NULL索引时使用它。

ref
相比eq_ref.不使用唯一索引,而是使用普通索引或是联合索引的前缀,索引要和某个值相比较,可能会找到多个符合条件的行。

range
范围扫描通常出现在in(),between,>,<,>=等操作中。使用一个索引来检索给定范围的行。

index
扫描全表索引,通常比ALL快一些。

ALL
即全表扫描,意味着mysql需要从头到尾查找所需要的行,通常情况下这需要增加索引来进行优化。

possible_keys
该possible_keys列指示MySQL可以选择在此表中查找行的索引,指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用

Key
key列显示MySQL实际决定使用的键(索引)

key_len
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)不损失精确性的情况下,长度越短越好。

创作时间:2019年11月25日16:55:52于公司

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值