前言
之前写了Explain性能分析概述其中简单介绍了一下Explain的返回值都有那些,和每个返回值的简单介绍。这篇文章主要是针对上一篇的细节上的描述并有sql语句的实例参考。
Explain性能分析(一)
Explain性能分析(二)
Explain性能分析(三)
正文
一、id
select 查询的序列号,包含一组数字,表示查询中执行 select 子句或操作表的顺序。
1、id相同,执行顺序由上到下
2、 id 不同,id 不同,如果是子查询,id 的序号会递增,id 值越大优先级越高,越先被执行
3、有相同也有不同
id 如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id 值越大,优先级越高,越先执行衍生 = DERIVED
关注点:id 号每个号码,表示一趟独立的查询。一个 sql 的查询趟数越少越好。
二、select_type
select_type 代表查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询。
1、SIMPLE
SIMPLE 代表单表查询;
2、PRIMARY
查询中若包含任何复杂的子部分,最外层查询则被标记为 Primary。
3、DERIVED
在 FROM 列表中包含的子查询被标记为 DERIVED(衍生),MySQL 会递归执行这些子查询, 把结果放在临时表里。
4、SUBQUERY
在 SELECT 或 WHERE 列表中包含了子查询。
5、DEPENDENT SUBQUERY
在 SELECT 或 WHERE 列表中包含了子查询,子查询基于外层。 都是 where 后面的条件,subquery 是单个值,dependent subquery 是一组值。
6、UNCACHEABLE SUBQUREY
当使用了@@来引用系统变量的时候,不会使用缓存。
7、UNION
若第二个 SELECT 出现在 UNION 之后,则被标记为 UNION;若 UNION 包含在 FROM 子句的子查询中,外层 SELECT 将被标记为:DERIVED。
8、UNION RESULT
从 UNION 表获取结果的 SELECT。
结束
不想把篇幅写的太长了,所以就分开来写了,应该算是一个系列的博客了吧!