explain各个字段代表的意思

  • 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表示全表扫描,并且表的数量很大

你可能感兴趣的:(#,MySQL,数据库,MySQL,索引,explain)