索引
EXPLAIN
使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句
1、使用方法
Explain+SQL 语句 或者 Explain+ tablename
2、返回信息
image.pngid:select 查询的序列号,包含一组数字, 表示查询中执行 select 子句或操作表的顺序。
id相同,执行顺序由上至下
id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行。
有相同也有不同,id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行衍生=DERIVED。
注:id号每个号码,表示一趟独立的查询。一个sql的查询趟数越少越好
select_type:查询的类型,主要是用于区别普通查询,联合查询,子查询等的复杂查询。
-
SIMPLE:单表查询
explain select * from t1; -
PRIMARY:查询中若包含任何复杂的子部分,最外层查询则被标记为Primary
explain select * from (select t1.content from t1 ) a; -
DERIVED:在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放到临时表中。
explain select * from (select t1.content from t1 ) a; -
SUBQUERY:在SELECT或WHERE列表中进行了子查询
explain select t2.id from t2 where t2.id = (select t3.id from t3 where t3.id =2); -
DEPENDENT SUBQUERY :在 SELECT 或 WHERE 列表中包含了子查询,子查询基于外层。
explain select t2.id from t2 where t2.id in (select t3.id from t3 where t3.id =2);
都是where后的条件,subquery是单个值,dependent subquery是一组值。 - UNCACHEABLE SUBQUREY : 当使用了@@来引用系统变量的时候, 不会使用缓存。
-
UNION:若第二个 SELECT 出现在 UNION 之后, 则被标记为 UNION; 若 UNION 包含在 FROM 子句的子查询中,外层
SELECT将被标记为: DERIVED。
网友评论