explain 参数详解

explain

explain 只能解释select查询,并不会对存储过程、insert、update、delete或其他语句做解释。可以通过重写非select查询,来利用explain

参数解释

id

标示select所属的行,如果在语句中没有子查询或者联合,那么只会有唯一的select

select_type

这一列显示了对应行是简单还是复杂。

  • SIMPLE
    simle 意味着查询不包含子查询或者联合,如查询包含任何复杂的子查询,则最外层被标记为primary

  • SUBQUERY
    包含在select中的子查询,被标记为subquery。意思是不再from子句中

  • DERIVED
    derived值表示包含在from子句的子查询中的select。

  • UNION
    在union中的第二个和随后的select被标记为union

  • UNION RESULT
    用来标记union 的匿名临时表检索结果的select

table

显示对应行正在访问的表。即表名 或者是表的别名

type

访问类型,mysql决定如何查找表中的行 从最差到最优 ALL、INDEX、RANGE、REF、eq_ref、const、system、NULL

  • ALL
    全表扫描,通常意味着mysql必须扫描整张表,从头到尾去找需要的行。

  • index
    这个跟全表扫描一样,只是mysql扫描表时,按索引的次序进行。主要的优点是避免了排序,最大缺点是按索引顺序读表,开销很大。

  • range
    范围扫描就是一个有限制的索引扫描。它开始于索引的某个点,返回匹配这个值域的行。

  • ref
    索引访问,它返回匹配某个值的行。

  • eq_ref
    使用这个索引查找,mysql知道最多只返回一条符合记录的条件。在使用唯一索引或主键查找时,能够看到。

  • const,system
    当mysql能对查询的某部分进行优化并转换成一个常量时,它就会使用这些访问类型。

  • null
    这种访问方式意味着mysql能在优化阶段分解查询语句,在执行阶段甚至不再需要访问表或者索引。

possilble_keys

这一列显示了查询可以使用到的哪些索引。

key

这一列显示了mysql决定使用哪个索引来优化对该表的访问

key_len

该列显示了mysql在索引里使用的字节数

ref

这一列显示了之前的表在key列记录的索引中查找值所用的列或常量。

rows

这一列显示了mysql为了找到所需的行而需要读取的行数

extra

这一列包含了不适合在其他列显示的信息

  • using index
    表示mysql将使用索引覆盖,以避免访问表

  • using where
    表示mysql服务器将在存储引擎检索行后再进行过滤

  • using temporary
    表示mysql 在对查询结果排序时使用了临时表。

  • using filesort
    mysql将对结果使用一个外部索引排序,而不是按索引次序读取。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容