MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP)。这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的。这条命令并没有提供任何调整建议,但它能够提供重要的信息帮助你做出调优决策。
语法: explain < table_name >
1)id: 代表select语句的编号,从1开始. 如果是连接查询,表之间是平等关系, select 编号都是1,如果某select中有子查询,则编号递增.
2)select_type: 查询类型
①SIMPLE 简单的select,没有union和子查询
②PRIMARY 最外面的select,在有子查询的语句中,最外面的select查询就是primary 如上图
③UNION UNION中的第二个或后面的SELECT语句 如下图
④DEPENDENT UNION UNION中的第二个或后面的SELECT语句,取决于外面的查询
⑤.UNION RESULT UNION结果 如上图
⑥.SUBQUERY 子查询中的第一个SELECT 如图1
⑦.DEPENDENT SUBQUERY 子查询中的第一个SELECT,取决于外面的查询 如上图
⑧.DERIVED 派生表的SELECT(FROM子句的子查询)
3)table: 查询针对的表有可能是
实际的表名 如select * from t1;
表的别名 如 select * from t2 as tmp;
derived 如from型子查询时
null 直接计算得结果,不用走表
4)type: 是指查询的方式, 非常重要,是分析”查数据过程”的重要依据,从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL
all: 意味着从表的第1行,往后,逐行做全表扫描.,运气不好扫描到最后一行.
index: 比all性能稍好一点,通俗的说: all 扫描所有的数据行,相当于data_all index 扫描所有的索引节点,相当于index_all
range: 意思是查询时,能根据索引做范围的扫描
ref 意思是指 通过索引列,可以直接引用到某些数据行
eq_ref 是指,通过索引列,直接引用某1行数据
onst, system, null 这3个分别指查询优化到常量级别, 甚至不需要查找时间.
5)possible_keys 可能用到的索引,但最终,只能用1个