一个简单的explain结果
explain select * from xx\G;
explain 中的列
1.id:是一个编号 标示select所属的行
2.select_type列
1) SUBQUERY
2)DERIVED
3) UNION
4) UNION RESULT
3table列 显示对应行正在访问那个表
4.type列 从差到优依次为
1)ALL(全表扫描)
2)index(按索引全表扫描)
3)range(索引有范围扫描)
4)ref(索引访问,返回匹配某个单个值的行)
5)eq_ref(返回最多一条记录的索引查找)
6)const, system(将一部分查找条件转化为常量)
7)NULL(不用访问表或者索引)
5.possible_keys列
显示查询可以使用哪些索引,没什么用
6.key列
该列显示mysql决定采用那个索引来优化对该表的访问,注意区别possible_keys,前者是采用,后者是建议
7.key_len列
mysql在索引里使用的字节数,非实际字节数,而是表定义的字节数
8.ref
显示了之前表在key列记录的索引中查找值所用的列或者常量
9.rows列
mysql估计为了找到所需大行所需要扫描的行数,不精确
10.filterd列
使用explain extend出现,作用是针对表里符合某个条件的记录数的百分比所做的一个悲观估算
11.extra列,常见的最重要的值如下:
1)"using index"(使用了覆盖索引,避免访问表)
2) "using where"(msyql存储引擎检索后再进行过滤)
3)"using temporary" (对查询结果排序时会使用临时表)
4)"using filesort" (对结果使用外部索引排序,而不是按索引次序在表里读取行)
5) "range checked for each record" (意味着没有好的索引)
注:个人读书笔记,出自《高性能mysql第三版》