mysql 执行计划解读

本文详细介绍了MySQL Workbench中执行计划的各个组成部分,包括Id、select_type、table、type、possible_keys、key、ref、rows和extra等字段的含义。重点讲解了如何理解查询优化过程,如索引使用、全表扫描、文件排序和临时表的使用情况,帮助优化SQL性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

执行计划

mysql自带的 workbench中 , 执行计划有以下12点(不清楚有没有别的,做测试的时候只有这些),
在这里插入图片描述

下面分别做解释

Id
1.id相同执行顺序由上至下。
2.id不同,id值越大优先级越高,越先被执行。
3.id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中。

select_type
select_type有以下几种常见类型:

1 .SIMPLE
不包含任何子查询或union等查询
2 .PRIMARY
包含子查询最外层查询就显示为 PRIMARY
3 SUBQUERY
在select或 where字句中包含的查询
4 DERIVED
from字句中包含的查询
5 UNION
出现在union后的查询语句中
6 UNION RESULT
从UNION中获取结果集,例如上文的第三个例子

table
查询的数据表, 别名

** type**
ALL 扫描全表数据
index 遍历索引
range 索引范围查找
index_subquery 在子查询中使用 ref
unique_subquery 在子查询中使用 eq_ref
ref_or_null 对Null进行索引的优化的 ref
fulltext 使用全文索引
ref 使用非唯一索引查找数据
eq_ref 在join查询中使用PRIMARY KEYorUNIQUE NOT NULL索引关联。
const 使用主键或者唯一索引,且匹配的结果只有一条记录。
system const 连接类型的特例,查询的表为系统表。

possible_keys
可能使用的索引,注意不一定会使用。查询涉及到的字段上若存在索引,则该索引将被列出来。当该列为 NULL时就要考虑当前的SQL是否需要优化了。

key
显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL。

TIPS:查询中若使用了覆盖索引(覆盖索引:索引的数据覆盖了需要查询的所有数据),则该索引仅出现在key列表中

ref
表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

rows
返回估算的结果集数目,并不是一个准确的值。

** extra**
extra的信息非常丰富,常见的有:
1.Using index 使用覆盖索引
2.Using where 使用了用where子句来过滤结果集
3.Using filesort 使用文件排序,使用非索引列进行排序时出现,非常消耗性能,尽量优化。
4.Using temporary 使用了临时表

参考链接:https://juejin.cn/post/6844903545607553037

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值