Mysql-explain

explain 关键字可以用来分析查询语句的执行情况
当执行完explain select * from test WHERE name = ‘小王’;这条语句的时候
会出现如下的结果;
在这里插入图片描述
(1)id:表示查询中执行selec子句或者操作表的顺序(表的加载数据),有几个 select 就有几个id,id为NULL最后执行。
《1》 id相同时,执行顺序是由上往下的。
explain select user.,orders. from user ,orders where user.id=orders.user_id;
在这里插入图片描述
《2》如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行。
explain select * from orders where user_id = (select id from User where username = ‘张三’);
在这里插入图片描述
《3》id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行
在这里插入图片描述
2. slect_type :告诉你我现在是什么类型操作,子查询,简单查询或者其他
select_type类型,有以下几种
(1)SIMPLE
在这里插入图片描述
(2)PRIMARY
在这里插入图片描述
(3)UNION
在这里插入图片描述
(4)DEPENDENT UNION
在这里插入图片描述
(5)DEPENDENT SUBQUERY
在这里插入图片描述
(6)DERIVED
在这里插入图片描述
3. table:表名
3. type:访问类型
在这里插入图片描述
ALL: MySQL进行全表扫描。
index:全索引扫描。index与ALL区别为index类型只遍历索引树
range:只检索给定范围的行,使用一个索引来选择行
ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
eq_ref: 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件
const、system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量,system是const类型的特例,当查询的表只有一行的情况下,使用system
4. possible_keys
possible_keys列指出MySQL能使用哪个索引在该表中找到行。注意,该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。

如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询
5. key(非常重要)
key列显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。
6. key_len
key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。
使用的索引的长度。在不损失精确性的情况下,长度越短越好
7. ref
表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。
8. rows
rows列显示MySQL认为它执行查询时必须检查的行数
10. Extra
该列包含MySQL解决查询的详细信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章