mysql explain 说明

mysql explain 说明

总结学习一下mysql的explain 。innodb

说明
id 就是每个sql的编号,有以下原则:
1.id越大,越优先执行。
2. id相同就从上往下执行。
3. id为null最后执行
select_type 对应的查询类型(是简单查询还是复杂的联合)。
simple:简单查询,不包含union和join。
primay:最外层的select
subquery:包含再select 中的查询
derived:包含再from的子查询,就是一个临时的结果表。
union:再union第二个跟着的select
table 对应的行访问那个表
type 非常重要:代表对应的行关联或者访问的类型(就是访问是索引树还是常量等)。
NULL:在优化阶段就已经得到了结果了,不需要再扫描索引了。比如:select min(id) from film; 【ID主键索引】
const、system:就是可以直接将查询结果优化成常量返回。system就是const的特例,就是只有1条结果的常量
eq_ref:直接关联或者匹配主键索引
ref:不是主键索引,而是二级索引,需要回表(回溯主键索引拉取数据)
range:查询一个索引的范围。
index:需要全表扫描索引获取结果。就是不从B+树的根节点查找,而是扫描某个二级索引的叶子节点扫描(因为二级索引小,而聚簇索引大,如果扫描聚簇索引那么消耗的内存比较多),然后得到的主键再回表带出所有结果。
ALL:全表扫描,直接扫描聚簇索引叶子节点的数据
possible_key 优化阶段mysql觉得可能走的key。具体的索引取决于执行的时候
key 执行阶段真正走的索引。可以直接使用force_index强制走某个索引
key_len 具体走了哪几个索引。比如索引:【name_age】,那么使用这个长度就是name字段的字节数+age的字节数。这个一般用再联合索引上,可以具体算出走了那几个索引,进行继续优化
ref 这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),字段名(例:film.id)
rows 预估扫描的行数,不准确,仅供参考
Extra 显示额外的信息。
Using Index:使用了覆盖索引。就是查询的值可以直接从对应的索引中全部带出【完美不需要优化】
UsingWhere:使用where处理,并没有走覆盖索引???啥JB玩意,不懂【还可以,不需要优化】
Using index condition:查询的列不能完全被索引覆盖。。Where前导列范围??啥JB玩意,不懂【还可以,不需要优化】
Using temporay:mysql 需要一个临时的地方处理。【一般,需要优化】
Using filesort:参与排序的数据量非常大,无法再内存中处理【差劲!需要优化】
Select tables optimized away:使用某些聚合函数(如min、max)。来访问索引再某个字段。

你可能感兴趣的:(mysql explain 说明)