mysql Explain 详解

  1. EXPLAIN 是做什么的
 EXPLAIN语句提供了有关MySQL如何执行语句的信息。 EXPLAIN使用SELECT,DELETE,INSERT,REPLACE和UPDATE语句。EXPLAIN返回SELECT语句中使用的每个表的一行信息。它按照MySQL在处理语句时读取它们的顺序列出输出中的表。 MySQL使用嵌套循环连接方法解析所有连接。这意味着MySQL从第一个表中读取一行,然后在第二个表,第三个表中找到匹配的行,依此类推。处理完所有表后,MySQL通过表列表输出选定的列和回溯,直到找到有更多匹配行的表。下一行从该表中读取,并且该过程继续下一个表。EXPLAIN输出包含分区信息。另外,对于SELECT语句,EXPLAIN生成扩展信息,可以在EXPLAIN之后使用SHOW WARNINGS显示。

      2. explain 如何使用

EXPLAIN
SELECT * FROM information_schema.PROCESSLIST

  结果

+----+-------------+-------------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table       | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+-------------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | PROCESSLIST | NULL       | ALL  | NULL          | NULL | NULL    | NULL | NULL | NULL     | NULL  |
+----+-------------+-------------+------------+------+---------------+------+---------+------+------+----------+-------+

     3. explain 字段解析

 中文名详情
id查询IDID
select_type查询类型      查询类型,会因为关联关系更改值
table表名查询的表名
partitions分区信息      The matching partitions
type链接类型 连接类型。 有关不同类型的说明,请参阅EXPLAIN“加入类型”。
possible_keys可能命中的索引        possible_keys列表示MySQL可以从中选择查找表中的行的索引。 请注意,此列完全独立于EXPLAIN输出中显示的表的顺序。
key命中的索引

 关键字列表示MySQL实际决定使用的关键字(索引)。如果MySQL决定使用其中一个possible_keys索引来查找行,则该索引被列为关键值。

 要强制MySQL使用或忽略possible_keys列中列出的索引,请在查询中使用FORCE INDEX,USE INDEX或IGNORE INDEX

key_len索引长度key_len数值越小越优
 由于密钥的存储格式,关键字长度对于可以为NULL的列的长度大于对于NOT NULL列的关键字长度
 key_len列表示MySQL决定使用的密钥的长度。 key_len的值使您能够确定MySQL实际使用的多部分密钥的多少部分。 如果键列指NULL,则len_len列也指NULL。
refref ref列显示哪些列或常量与键列中指定的索引进行比较,以从表中选择行。
 如果该值是func,则使用的值是某个函数的结果。 要查看哪个函数,请在EXPLAIN之后使用SHOW WARNINGS来查看扩展的EXPLAIN输出。 该函数实际上可能是一个运算符,如算术运算符。
 (目前我自己测试的只有const 如果有知道怎么更改这个值的请直接留言)
rows行数 
filtered过滤行数百分比 过滤的列表示将由表条件过滤的表行的估计百分比。 也就是说,行显示了检查的估计行数,行×过滤/ 100显示了将与之前的表连接的行数。
ExtraNone Extra其他 其他值比如  :Using where  ;Using temporary; Using filesort; Using join buffer (Block Nested Loop)

 4. explain 拓展

  4.1select_type 结果解析

参考:  https://yq.aliyun.com/articles/61934

未完

列名解释示列
SIMPLE简单查询,系统不做任何优化
EXPLAIN
SELECT * FROM information_schema.`PROCESSLIST`;
PRIMARY查询最外层表 select_type 为 primary
EXPLAIN
SELECT * FROM (
 SELECT * FROM information_schema.`PROCESSLIST`
 UNION ALL
 SELECT * FROM information_schema.`PROCESSLIST`
) AS t
UNION关联表,列子中 p2 , p3 为关联表
EXPLAIN
	SELECT ID FROM information_schema.`PROCESSLIST` AS p1
	UNION ALL
	SELECT ID FROM information_schema.`PROCESSLIST` AS p2
	UNION ALL
	SELECT ID FROM information_schema.`PROCESSLIST` AS p3
DEPENDENT UNION表示union或union all联合而成的单位查询受外部影响
EXPLAIN
SELECT * FROM information_schema.`PROCESSLIST` WHERE ID in(
	SELECT ID FROM information_schema.`PROCESSLIST` AS p1
	UNION ALL
	SELECT ID FROM information_schema.`PROCESSLIST` AS p2
	UNION ALL
	SELECT ID FROM information_schema.`PROCESSLIST` AS p3
)
UNION RESULT联合查询结果集
SUBQUERYnone未完
DEPENDENT SUBQUERYnone 
DERIVEDnone未完
MATERIALIZEDMaterialized  查询
UNCACHEABLE SUBQUERY无法缓存结果的子查询,必须对外部查询
UNCACHEABLE UNION第二个或更高版本在属于不可缓存子查询的UNION中选择


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值