mysql的explain解析

explain 一条sql语句得到以下的参数

id

id越大越早执行
id相同,自上而下的执行

select_type

(1)SIMPLE (简单的SELECT,没有UNION或子查询等)

(2)PRIMARY(子查询中最外面的查询,如果查询包含任何复杂的子部分,则最外面的选择标记为PRIMARY)

(3)UNION(UNION中的第二个或后续SELECT语句)

(4)DEPENDENT UNION(UNION中的第二个或后续SELECT语句,取决于外部查询)

(5)UNION RESULT(UNION的结果,union语句中第二次选择之后的所有选择)

(6)SUBQUERY(子查询中的第一个SELECT,结果不依赖于外部查询)

(7)DEPENDENT子查询(子查询中的第一个SELECT,取决于外部查询)

(8)DERIVED(SELECT的子查询,派生表的FROM子句)

(9)不可查询子查询(无法缓存子查询的结果,必须重新评估外部链接的第一行)

type

对表的访问方法意味着MySQL在表中查找所需行的方式,也称为”访问类型”。【日常优化的关键】
常用的类型有:ALL,索引,范围,ref,eq_ref,const,system,NULL(从左到右,性能从差到好)

(1)ALL:全表扫描,MySQL将遍历整个表以查找匹配的行

(2)index:全索引扫描,索引和ALL的区别在于索引类型仅遍历索引树

(3)range:仅检索给定范围的行,使用索引选择行

(4)ref:表示上表的连接匹配条件,即使用哪些列或常量在索引列上查找值

(5)eq_ref:与ref相似,不同之处在于所使用的索引是唯一索引。对于每个索引键值,表中只有一个记录匹配。

(6)const,system:当MySQL优化查询的一部分并将其转换为常量时,将使用这些类型的访问。如果将主键放在where列表中,MySQL可以传输查询

更改为常量,系统是const类型的特例,当查询表只有一行时,请使用系统

(7)NULL:MySQL在优化过程中分解语句,甚至在执行过程中不需要访问表或索引。例如,可以通过单独的索引搜索来从索引列中选择最小值。

key

键:指示实际使用的索引

显示MySQL实际决定使用的键(索引),这些键必须包含在possible_keys中

如果未选择索引,则键为NULL。要强制MySQL使用或忽略possible_keys列中的索引,请在查询中使用FORCE INDEX,USE INDEX或IGNORE INDEX。

key_len

索引字段的长度

指示索引中使用的字节数。此列可用于计算查询中使用的索引的长度(key_len显示的值是索引字段的最大可能长度,而不是实际使用的长度,也就是说,
key_len是根据表定义计算的,未从表中检索)在不损失准确性的情况下,长度越短越好。

row,filter

10,行数:扫描的行数(估计的行数)

估计结果集中的行数,这表明MySQL会根据表统计信息和索引选择来估计要读取以查找所需记录的行数。

11,已过滤:按表条件过滤的行百分比

 

 

posted on 2022-08-21 10:33  topass123  阅读(69)  评论(0编辑  收藏  举报