mysql的Explain sql分析工具介绍

Explain 分析工具可以模拟sql执行过程,我们可以借此可以发现其性能瓶颈,更精准的对sql或表结构调优。

1、explain字段内容释义


在这里插入图片描述
在这里插入图片描述
在Type列中查询的性能:
system>const>eq_ref>ref>range>index>all,尽量不要让表走全表扫描(all级别),尽量优化在range以上(若数据量很小,那没关系)。

2、explain示例


下面通过几个SQL查询的例子给大家列下上面explain工具分析出现的情况,示例表user结构为:
在这里插入图片描述
在这里插入图片描述
1) 通过此explain分析我们能看到的信息为:是简单的sql查询,对user表进行全表扫描(all)查询,没有使用索引,可能扫描的行数为5;
explain select * from user;
在这里插入图片描述
2)通过此explain分析我们能看到的信息为:是简单(simple)的sql查询,对表user使用主键索引进行查询,其查询类型为常量(const)表示返回是1条记录,索引的长度为4字节(因为id为int类型,int类型为4字节),扫描的行数为1行。
explain select * from user where id=2;
在这里插入图片描述
3)通过此explain分析我们能看到的信息为:是简单(simple)的sql查询,对表user使用主键索引进行查询,其查询类型为范围(range)表示返回多行,索引的长度为4字节(因为id为int类型,int类型为4字节),扫描的行数为3行,extra附加信息字段显示查询的字段信息未被索引覆盖(走的聚簇索引)。
explain select * from user where id>2;
在这里插入图片描述
4)通过此explain分析我们能看到的信息为:是简单(simple)的sql查询,对表user使用普通索引进行查询,其查询类型为ref表示可能返回多行,索引使用了三个字段,但只用到了name字段所以长度为28字节(因为name为var(25)类型,此表字符集utf8下:25 3+3),扫描的行数为1行,extra附加信息字段显示查询的字段信息不完全被索引覆盖,即select后面查询的信息不能完全在索引中找到。
explain select * from user where name=‘lisi’;
在这里插入图片描述
5)表示此表对user表使用普通索引进行查询索引使用了三个字段,但只用到了name字段所以长度为28字节(因为name为var(25)类型,此表字符集utf8下:25
3+3),扫描的行数为1行,extra附加信息字段显示查询的字段信息不完全被索引覆盖,即select后面查询的信息不能完全在索引中找到,还有使用的filesort排序未使用索引排序;
explain select * from user where name=‘lisi’ order by id;
在这里插入图片描述
6)针对上个sql,发现此sql走了索引排序,因为name就在二级索引中,并已经排好序了;
explain select * from user where name=‘lisi’ order by name;
在这里插入图片描述
7)此即是多个sql执行的分析情况,执行顺序为id=2的sql先执行,id=1的sql后执行且表依赖于id=2的查询
explain select * from (select * from user where id=1) a;
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值