mysql-Innodb存储引擎-Explain

使用explain/desc sql查看SQL执行计划,明确语句执行是否高效。

示例:

explain select id,name from t1 where name=’zhangsan’;

desc select id,name from t1 where name=’zhangsan’;

  1. 执行计划重要信息
  1. possible_keys:      该列上可使用的索引
  2. key:               最终使用的索引
  3. key_length:         索引长度(越小越快)
  4. rows:               需要扫描表的行数(越小越好)

说明:

possible_keys:如果很多值,说明列上索引过多;如果是NULL,说明列上没有索引,可以考虑添加索引。

key:SQL执行时,使用的索引。如果是NULL,说明SQL未使用索引,可以考虑添加索引;如果是索引名,表示SQL执行使用了索引,无需优化。

key_length:被用索引的长度,值越小代表索引长度越短,查询时IO就越小,结果返回越快。正常值key_length在32以下,如果超过32说明字段类型过长,考虑使用其他字段类型替代。比如:使用unsigned bigint 替代uuid

Rows:SQL执行需要查询表的行数,所扫描的行数越小,性能越好。如果Rows大于表总行数的20%,表示SQL可能需要优化。

type表示表的连接类型

首先类型有许多,这里我只给大家介绍企业里面用的最多的类型:

system>const>eq_ref>ref>range>index>ALL

越往左边,性能越高

我们自己实际能优化到ref>range这两个类型,就是你自己写SQL,如果你没优化基本上就是ALL,如果你优化了,那就尽量达到ref>range这两个级别;

所以,要对type优化的前提是,你需要有索引,如果你连索引都没有创建,那你就不用优化了,肯定是ALL.....;

索引是数据库优化中最常用也是最重要的手段之一,通过索引通常可以帮助用户解决大多数的SQL性能问题。

const:单表中最多有一个匹配行,例如primary key或者unique index

eq_ref:多表连接中使用primary key或者unique index

ref:使用普通索引

range:单表中的范围查询

index:对于前面的每一行,都通过查询索引来得到数据

all:对于前面的每一行,都通过全表扫描来得到数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值