您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > MySQL

如何查看sql的执行计划

时间:12-31来源:作者:点击数:

如何使用plsql查看sql的执行计划?

explain plan for (select * from table)

可查看该语句的sql执行计划

返回的结果:

table access by index rowId 索引返回多少行数据,回表就要回多少次,每次回表都是单独(因为RowID对应一个数据块)

merge join cartesian 表 之间的自然连接等,进行笛卡尔积计算,非常影响效率,尽量多的减少数据条数。

buffer sort 临时表的创建方式

使用navicat

除此之外,也可以使用navicat的可视化界面直接点击:解释(保密原因数据打了马赛克)

请添加图片描述

返回内容解释

id

表示表的读取顺序,分为两种情况:

  • id相同,读表顺序从上往下
  • id不同,优先读取id大的

这玩意儿多表查询的时候,可以用来看读表的顺序,不过一般生产开发中不会多表查询,大伙看个乐就行。

select_type

查询类型,有如下类型:

simple 简单语句,不包含子查询或者union

primary 若语句包含复杂查询,则语句的最外层为primary

subquery 在select或者where中包含子查询

derived 在from中包含的子查询为derived(衍生表)

union 在union之后的查询,被标记为union类型

union result 从union获取结果的select查询

一般都是simple,因为生产环境的sql不会写那么复杂,这也是为了高并发下的性能考虑。

可以看到我上面的图片中,select_type就是SIMPLE

table

不多bb了吧

type

索引类型, 有很多种,常见的类型按照性能从差到好为:

all < index < range < ref < eq_ref < const < system

all 表示全表扫描,性能最差

index 走索引,扫描了索引文件的全部数据

range 走索引,索引列使用了范围查找,如between, in, <, >

ref 表示非唯一性索引

eq_ref 表示唯一索引

const 一次就找到数据的唯一索引

system 只有一条数据的系统表

在上面的实际场景中,可以看到索引类型type是const,说明索引的结构还是很合理的!

possible_keys

mysql分析可能使用到的索引

可以看到是PRIMARY

也就是它分析应该是走了主键索引

key

实际使用的索引,当key有值时才表示真的用到了索引

可以看到是PRIMARY

也就是实际上查询确实是走了主键索引

key_len

使用到的索引长度,根据索引组合字段类型所占的字节数来计算。

我们的主键应该是varchar(字符串类型),占8个字节长度

ref

哪些列或常量被用于查找索引列上的值,即索引列=ref值。

一般情况下有常量和表的列名两种情况

此处可以看到是常量const

rows

mysql估算的找到满足条件的记录所需要读取的行数,越少越好。

可以看到这次是只需要读取一行,非常牛逼了

extra

mysql将执行计划的其他信息放到extra中。常见的有:

Using filesort 排序没有用到索引(重要,能使用索引排序是更好的)

Using temporary 使用了临时表保存中间结果,mysql在对查询结果排序时使用临时表,常见于order by 和group by(重要,使用临时表降低性能,最好排除掉)

Using index 表明select查询使用了覆盖索引(即只查索引文件就找到了需要的数据,不再需要访问表)

Using where 表示使用了where查询条件

Using join buffer 表示表join关联使用到了缓存

impossible where 表示where条件永远是false,拿不到数据

using index condition 使用了索引条件

这里是NULL

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐