1.explian检验sql是否走索引

image.png

1.概述

explain 可以查询慢sql是否走索引,包括类型,是否全表搜索等信息共10列(id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra)

2.各列含义

  • select_type:示查询中每个select子句的类型
    SIMPLE:简单select语句,不实用union或子查询等
    PRIMARY:查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY
    UNION:UNION中的第二个或后面的SELECT语句
    UNION RESULT:UNION的结果
    SUBQUERY:子查询中的第一个SELECT
  • table:查询的表名
  • type:联接类型,下面给出从最佳到最坏
    system:表仅有一行(=系统表)。这是const联接类型的一个特例。
    const:表最多有一个匹配行,它将在查询开始时被读取。
    eq_ref:对于每个来自于前面的表的行组合,从该表中读取一行。
    ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。
    ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。
    index_merge:该联接类型表示使用了索引合并优化方法。
    unique_subquery:该类型替换了下面形式的IN子查询的ref: value IN (SELECT primary_key FROM single_table WHERE some_expr) unique_subquery是一个索引查找函数,可以完全替换子查询,效率更高。
    index_subquery:该联接类型类似于unique_subquery。可以替换IN子查询,但只适合下列形式的子查询中的非唯一索引: value IN (SELECT key_column FROM single_table WHERE some_expr)。
    range:只检索给定范围的行,使用一个索引来选择行。
    index:该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。
    ALL:对于每个来自于先前的表的行组合,进行完整的表扫描。
  • possible_keys:能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用
  • key:显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL
  • key_len:显示的值为索引字段的最大可能长度,并非实际使用长度
  • ref:连接匹配条件,即哪些列或常量被用于查找索引列上的值
  • rows:显示MySQL认为它执行查询时必须检查的行数。

你可能感兴趣的:(1.explian检验sql是否走索引)