执行计划
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