再谈MySQL之执行计划Explain

前言

我们经常会使用 Explain 去查看执行计划,这个众所周知。但在面试时问面试者,你用 Explain 主要是看什么?对方的回答大多是查看是否有使用到索引,这显然不是最好的答案

Explain 各个字段及其含义

  • id : 表示 SQL 执行的顺序的标识, SQL 从大到小的执行
  • select_type:表示查询中每个 select 子句的类型
  • table:显示这一行的数据是关于哪张表的,有时不是真实的表名字
  • type:表示 MySql 在表中找到所需行的方式,又称访问类型。常用的类型有:ALL, index, range, ref,eq_ref, const, system, NULL(从左到右,性能从差到好)
  • possible_keys:指出 MySql 能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
  • Keykey 列显示 MySql 实际决定使用的键(索引),如果没有选择索引,键是 NULL
  • key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len 显示的值为索引字段的最大可能长度,并非实际使用长度,即 key_len 是根据表定义计算而得,不是通过表内检索出的)
  • ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
  • rows:表示 MySql 根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数,理论上行数越少,查询性能越好
  • Extra:该列包含 MySql 解决查询的详细信息

Explain 执行计划中,我们重点关注 TypeExtra 两个字段,它们是核心

Explain 中的 Type

Explain 中的 TypeMySql 的官网解释为:连接类型(the join type)。它描述了找到所需数据使用的扫描方式。最为常见的扫描方式有

  • system:说明数据已经加载到内存里,不需要进行磁盘 IO,这类扫描是速度最快的
  • const:命中主键索引或者唯一索引,被连接的部分是一个常量值
  • eq_ref:主键索引或者非空唯一索引等值扫描
  • ref:非主键索引或非唯一索引等值扫描
  • range:范围扫描,它是索引上的范围查询,它会在索引上扫描特定范围内的值
  • index:索引树扫描,需要扫描索引树上的全部数据
  • ALL:全表扫描

上面各类扫描方式由快到慢:system > const > eq_ref > ref > range > index > ALL

Explain 中的 Extra

Explain 中的 Extra 的值有

  • Using index:说明 SQL 所需要返回的所有列数据均在一棵索引树上,而无需访问实际的行记录
  • Using where:说明 SQL 使用了 where 条件过滤数据
explain select * from account_user_base where id > 4;
  • Using index condition:说明确实命中了索引,但不是所有的列数据都在索引树上,还需要访问实际的行记录
explain select * from account_user_security t1, account_user_base t2 where t1.user_id = t2.id;
  • Using filesort:说明得到所需结果集,需要对所有记录进行文件排序。典型的,在一个没有建立索引的列上进行了 order by,就会触发 filesort,常见的优化方案是,在 order by 的列上添加索引,避免每次查询都全量排序。详情可以参考:MySql 中 order by 的原理
  • Using temporary:说明需要建立临时表来暂存中间结果。这类 SQL 语句性能较低,往往也需要进行优化。典型的 group byorder by 同时存在,且作用于不同的字段时,就会建立临时表,以便计算出最终的结果集
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值