id:选择标识符
select_type:表示查询的类型。
table:输出结果集的表
partitions:匹配的分区
type:表示表的连接类型
possible_keys:表示查询时,可能使用的索引
key:表示实际使用的索引
key_len:索引字段的长度
ref:列与索引的比较
rows:扫描出的行数(估算的行数)
filtered:按表条件过滤的行百分比
Extra:执行情况的描述和说明
1.id:select关键字
id如果相同,可以认为是一组,从上往下顺序执行
在所有组中,id值越大,优先级越高,越先执行
关注点:id号每个号码,表示一趟独立的查询, 一个sql的查询趟数越少越好
2.select_type
SIMPLE(简单SELECT,不使用UNION或子查询等)
PRIMARY(子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)
UNION(UNION中的第二个或后面的SELECT语句)
DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)
UNION RESULT(UNION的结果,union语句中第二个select开始后面所有select)
SUBQUERY(子查询中的第一个SELECT,结果不依赖于外部查询)
DEPENDENT SUBQUERY(子查询中的第一个SELECT,依赖于外部查询)
DERIVED(派生表的SELECT, FROM子句的子查询)
UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)
3.table 表名
4.type
结果值从最好到最坏依次是: system > const > eq_ref > ref > fulltext > ref_or_null > index_merge >unique_subquery > index_subquery > range > index > ALL 其中比较重要的几个提取出来(见上图中的蓝色)。SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,最好是 consts级别。(阿里巴巴开发手册要求)
5.possible_keys
索引有哪些
6.key
实际用到的索引
7.key_len
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度
当前索引字段的长度*(utf8=3,gbk=2,latinl=1)+1(null)+2(变长的字段)
8.ref
这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名(例:film.id)
9.rows
预估的需要读取的记录条数
10. filtered:
某个表经过搜索条件过滤后剩余记录条数的百分比
11.Extra:
一些额外的信息
更准确的理解MySQL到底将如何执行给定的查询语句
EXPLAIN四种输出格式
这里谈谈EXPLAIN的输出格式。EXPLAIN可以输出四种格式: 传统格式 , JSON格式 , TREE格式 以及 可
视化输出 。用户可以根据需要选择适用于自己的格式。
EXPLAIN FORMAT=JSON SELECT ....
EXPLAIN FORMAT=tree SELECT ....
SHOW WARNINGS\G # 查看sql执行的语句