nvaicat查看mysql数据库sql执行计划

本文解析了Navicat中SQL查询的执行计划,包括id、select_type、table、type、possible_keys、key、key_len和extra等关键指标,重点讲解了主键索引的使用和性能优化技巧。
摘要由CSDN通过智能技术生成

除此之外,也可以使用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 使用了索引条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值