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,已过滤:按表条件过滤的行百分比