MySQL之执行计划

今天面试,问及一个问题,如果在一张表上添加索引,你该如何判断该索引是否执行。诚然我不知晓,面试后才知道MYSQL里面有一个执行计划,可以解决这个问题。

一.什么叫做MYSQL执行计划

SQL执行计划,就是一条SQL语句,在数据库中实际执行的时候,一步步的分别都做了什么。就是我们用EXPLAIN分析一条SQL语句时展示出来的那些信息

二.为什么要学习MYSQL执行计划

了解SQL执行计划的意义就在于我们可以通过执行计划更加清晰的认识到这一条语句,分为了哪几步,有没有用到索引,是否有一些可优化的地方等。
首先我们来看一条sql语句的执行计划
在这里插入图片描述
select_type

查询的类型,主要是用于区分普通查询、联合查询、子查询等复杂的查询
1、SIMPLE:简单的select查询,查询中不包含子查询或者union
2、PRIMARY:查询中包含任何复杂的子部分,最外层查询则被标记为primary
3、SUBQUERY:在select  where列表中包含了子查询
4、DERIVED:在from列表中包含的子查询被标记为derived(衍生),mysql或递归执行这些子查询,把结果放在零时表里
5、UNION:若第二个select出现在union之后,则被标记为union;若union包含在from子句的子查询中,外层select将被标记为derived
6、UNION RESULT:从union表获取结果的select

执行计划的 type


访问类型,SQL 查询优化中一个很重要的指标,结果值从好到坏依次是:
system > const > eq_ref > ref > range > index > ALL。
system:系统表,少量数据,往往不需要进行磁盘IO
const:常量连接
eq_ref:主键索引(primary key)或者非空唯一索引(unique not null)等值扫描
ref:非主键非唯一索引等值扫描
range:范围扫描
index:索引树扫描
ALL:全表扫描(full table scan)

三实际测试

create table easy_user(
id int primary key auto_increment,
name varchar(30) not null
) engine=innodb default charset=utf8mb4;

根据id查询mysql执行计划
explain select * from easy_user where id=1;
在这里插入图片描述
在没有加索引的情况下,根据name查询
explain select * from easy_user where name=‘Jack’;
在这里插入图片描述
我在name上添加一个索引字段
在这里插入图片描述
explain select * from easy_user where name=‘Jack’;
在这里插入图片描述
我修改索引类方法
在这里插入图片描述
explain select * from easy_user where name=‘Jack’;
在这里插入图片描述
如果更换为唯一索引呢
在这里插入图片描述
在这里插入图片描述
explain select * from easy_user where name=‘Jack’;
更换索引方法
在这里插入图片描述
实践证明:这个执行计划是可以清晰的看到sql的执行是否使用了索引的

参考博文:
https://www.cnblogs.com/yinjw/p/11864477.html
https://www.jianshu.com/p/514aa0b139d8

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值