- id:联表查询是每个表的读取顺序,数字越大越先被读取。相同就需要通过table字段判断
- select_type:查询类型或者是其他操作类型(PRIMARY、UNION、UNION RESULT等)
- table:正在访问哪个表
- partitions:匹配的分区
- type: 访问的类型
- passible_keys:可能使用到的索引,不一定会用到
- key:实际使用到的索引,如果为null,则没有使用索引
- key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引长度
- ref:显示索引的哪一列被使用了,如果可能的话,是一个常数,哪些列或常量被用于查找索引列上的值
- rows:根据表统计信息及索引选用情况,数据库估算出的一个数据
- filtered:查询的表行占表的百分比,和row很相似
- Extra:包含不适合在其它列中显示但十分重要的额外信息
重点字段分析
type
NULL > system > const > eq_ref > ref > ref_or_null > index_merge > range > index > ALL
上面就是type列可能会出现的10个字段,越靠左效率越高。
NULL
表示不需要查询数据库,例如select 5 * 7
-system
表只有一行记录是才会出现,基本不会出现const
表示通过索引以下就找到了数据,例如通过主键id(唯一键)直接查询select * from table where id = 5
eq_ref
表示联表查询时,按联表的主键或唯一键联合查询ref
表示联表查询时,驱动表的一条记录能在被驱动表中通过主键来匹配一行或多行数据- ref_or_null类似ref,但是可以搜索NULL的行
- index_merge表示查询使用了两个以上的索引,然后将它们的结果取交集或者并集
- range表示索引范围查询,常见于<,>,IS NULL,IN()等
- index_index表示只遍历索引树,但是是读索引的全表,因为索引比全表数据能小点,所以性能好于ALL
- ALL表示全表扫描,并且表的数量很大