mysql 执行计划extra_mysql执行计划explain type和extra

mysql执行计划,搞定type和extra就能优化大部分sql了。type为主,extra为辅。

type:

system表只有一行,MyISAM引擎。

const常量连接,表最多只有一行匹配,通用用于主键或者唯一索引比较时

eq_ref每次与之前的表合并行都只在该表读取一行,这是除了system,const之外最好的一种,特点是使用=,而且索引的所有部分都参与join且索引是主键或非空唯一键的索引

ref如果每次只匹配少数行,那就是比较好的一种,使用=或<=>,可以是左覆盖索引或非主键或非唯一键

fulltext全文搜索

ref_or_null与ref类似,但包括NULL

index_merge表示出现了索引合并优化(包括交集,并集以及交集之间的并集),但不包括跨表和全文索引。这个比较复杂,目前的理解是合并单表的范围索引扫描(如果成本估算比普通的range要更优的话)

unique_subquery在in子查询中,就是value in (select…)把形如select unique_key_column的子查询替换。PS:所以不一定in子句中使用子查询就是低效的!

index_subquery同上,但把形如”select non_unique_key_column“的子查询替换

range常数值的范围

index索引树扫描。a.当查询是索引覆盖的,即所有数据均可从索引树获取的时候(Extra中有Using Index);b.以索引顺序从索引中查找数据行的全表扫描(无 Using Index);c.如果Extra中Using Index与Using Where同时出现的话,则是利用索引查找键值的意思;d.如单独出现,则是用读索引来代替读行,但不用于查找

all全表扫描(full table scan)

extra:

Using index索引最优

Using index condition命中索引,但是查询的列不在索引树中,导致需要查找实际行记录,看情况优化

Using index where只有where,可能没走索引,结合type看情况优化

Using indexfilesort排序优化order by,加索引,需要优化

Using temporary临时表,需要优化

Using join buffer (Block Nested Loop)两个关联表join,关联字段均未建立索引,需要优化

null为空时需要去type找原因

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值