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