Mysql优化---type、key、Extra等字段含义

(3) type: 索引类型、类型
  • system>const>eq_ref>ref>range>index>all
    其中:system,const只是理想情况;实际能达到ref>range

system: 只有一条数据的系统表;或衍生表只有一条数据的主查询

const:仅仅能查到一条数据的SQL,用于Primary key或者unique索引

rq_ref:唯一性索引,对于每个索引键的查询,返回匹配唯一行数据(有且只有1个,不能多、不能0)
例如:select…from …where name=… 其中name必须为索引且唯一。

ref: 非唯一性索引,对于每个索引键的拆线,返回匹配的所有行(0,多)

range: 检索指定范围的行,where后面是一个范围查询(between, >, <…)
注意:in有时候会失效,从而转为无索引。

index:查询全部索引中数据

all:查询所有表中数据

(4)possible_keys:可能用到的索引,是一种预测,不准。
(5)key:实际使用到的索引
(6)key_len: 索引的长度;
  • 作用:用于判断复合索引是否被完全使用(a,b,c)。
(7)ref: 注意与type中的ref值区分。
  • 作用:指明当前表所参照的字段
(8)rows: 被索引优化查询的数据个数(通过索引查到的数据个数)
(9)Extra:
  • using filesort : 性能消耗大;需要额外一次查询
    例如:explain select * from test where a1=‘’ order by a2; --using filesort
    小结:1. 对于单索引,如果排序和查找是同一个字段,则不会出现using filesort;如果排序和查找不是同一个字端,则会出现。
    避免:where哪些字段,就order by 那些字段
    2. 对于复合索引,如果排序和查找的使用顺序是一致的(跨列部分索引失效,因此不算),则不会出现using filesort, 反之则会。
    复合索引:不能跨列(最佳左前缀)
    避免:where和order by按照复合索引的顺序使用,不要跨列或无序使用。
  • using temporary :性能损耗大,用到了临时表,一般出现在group by语句中。
    例如:explain select * from tests03 where a2 = 2 and a4=4 group by a3
    避免:查询哪些列,就根据哪些列group by.
  • using index :性能提升;索引覆盖(覆盖索引)。只要查询的列全为索引,即可达成索引覆盖。
  • using where :需要回表查询。
    假设age为索引
    例如:explain select age, name from test03 where age = a2;
  • impossible where: where子句永远为false.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值