Mysql explain

用explain来获取关于查询执行计划的信息。比如mysql中有慢查询语句,可以通过explian来返回其执行计划中的信息,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。

explain命令

EXPLAIN select * from address;

explain 的列

执行结果

id   select_type    table        partitions     type   possible_keys   key   key_len   ref   rows   filtered   Extra

1    SIMPLE      address                          ALL                                                              1       100    

1.id列

这一列总是包含一个编号,标识select所属的行。如果在语句中没有子查询或者是联合查询,那么只会有唯一的select。可以理解为select的一个执行顺序,id越小的越晚执行。

2.select_type列

显示对应的select是一个简单还是复杂select

simple

表示查询不包括子查询和UNION

SUBQUERY

包含在select列表中的子查询中的select(不在from子句中)

DERIVED

包含在FROM子句的子查询中的select。

UNION

在UNION中的第二个和随后的select被标记为UNION

3.table列

这一列显示了对应行正在访问哪个表。或者是该表的别名。

4.type列

访问类型。---mysql决定如何查找表中的行。下面是重要的访问类型,从最差到最优。

ALL

全表扫描,mysql必须扫描整张表。

index

mysql扫描表时按照索引次序进行,而不是行。主要优点是避免了排序。

range

范围扫描是一个有限制的索引扫描,它开始于索引里的某个点,返回匹配这个值域的行。例如between and 或者是where  > < 的查询。in和or也会显示为范围查询

ref

这是一种索引访问,返回所有匹配某个单个值的行。是查找和扫描的混合体。

eq_ref

使用这种索引查找,mysql知道最多只返回一条符合条件的记录。这种访问方法可以在mysql使用主键或者唯一性索引查找时看到。

const,system

当mysql能对查询的部分进行优化,并将其转换成一个常量时,它就会使用这些访问类型。比如,你通过将某一行的主键放入where子句的方式来选取此行的主键。

NULL

这种访问方式意味着mysql能在优化阶段分解查询语句,在执行阶段甚至不用再访问表或者索引。

5.possible_keys列

显示了查询可以使用那些索引,这是基于查询访问的列和使用的比较操作符来判断的。这个列表是在优化过程的早期创建的,因此有些罗列出来的索引可能对于后续的优化过程是没用的。

6.key列

显示了mysql决定采用哪个索引来优化对该表的访问。possible_keys表示选择哪个索引能有助于高效的查询,而key显示的是优化采用哪一个索引可以最小化查询成本。

7.key_len列

显示了mysql在索引里使用的字节数。

可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)

不损失精确性的情况下,长度越短越好 

8.ref列

这一类显示了之前的表在key列记录的索引中查找值所用的列或者常量。

9.rows列

mysql估计为了找到所需的行而要读取得行数,

10.Extra列

包含的是不适合在其它列显示的额外信息。

常见的最重要的几个值:

Using index

此值表示mysql将使用覆盖索引,避免访问表。

Using where

表示查询可收益于不同的索引。mysql服务器将在存储引擎检索后再进行过滤。

using temporary

mysql在对查询结果排序时会使用一个临时表。

using filesort

mysql会对结果使用一个外部索引排序,而不是按索引次序从表里读取行。

range checked for each record(index map:N)

表示没有好用的索引,新的索引将在联接的每一行上重新估算。

explain的限制:

  • explain不会告诉你触发器,存储过程会如何影响查询
  • 不支持存储过程,所以需要手动抽取查询单独进行explain操作
  • 不会告诉你mysql在查询执行中所做的特定优化
  • 不会显示关于查询的执行计划的所有信息
  • 不区分具有相同名字的事物。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值