喜迎
春节

MySQL中的explain


当我们在执行sql时,一般都会使用explain来分析sql的效率情况。

用法

只需要在查询的 SQL 前面添加上 explain 关键字即可。

结果列说明

  • id — 选择标识符,id 越大优先级越高,越先被执行;
  • select_type — 表示查询的类型;
  • table — 输出结果集的表;
  • partitions — 匹配的分区;
  • type — 表示表的连接类型;
    type 值有如下类型
    • all — 全表扫描,在数据量大时效率极低;
    • index — 遍历索引,全索引排序;根据extra的内容分以下几种情况:
      Using Index:覆盖索引,即只需要通过索引就可以返回查询所需要的数据
      Using Where:查询列未用到索引
      Using Index Using Where:其中的查询列是索引,但是并不是前导列,因此其实是没法用到这个索引的
      Null:查询列有些不是索引,需要回表来查询未被索引覆盖的字段(不是纯粹用了索引,也不是完全没用到索引)
    • range — 索引范围查找,有范围的索引排序;如:between and < > in or
    • index_subquery — 在子查询中使用 ref;非唯一性索引,一般出现在in查询中;
    • unique_subquery — 在子查询中使用 eq_ref,一般出现在in查询中;
    • index_merge — 使用了索引合并优化。(对多个索引分别进行了条件的查询,最后对这几个查询的结果进行合并交集运算)
    • ref_or_null — 对 null 进行索引的优化的 ref; 类似 ref。区别是他会额外的搜索包含 null 的记录,他会对其进行一些优化。(例如:SELECT * FROM table WHERE age = 18 and name is null)
    • fulltext — 使用全文索引;
    • ref — 使用非唯一索引查找数据;利用查询索引来进行搜索。(非主键以及 UNIQUE)
    • eq_ref — 在 join 查询中使用主键或唯一索引关联;查询列是主键或者非 NULL 的 UNIQUE 索引,常用在联合查询。(例如:SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column => ref_table.key_column 是主键或者非 NULL 的 UNIQUE 索引)
    • const — 将一个主键放置到 where 后面作为条件查询, MySQL 优化器就能把这次查询优化转化为一个常量,如何转化以及何时转化,这个取决于优化器,这个比 eq_ref 效率高一点。
      查询条件是主键或者非 NULL 的 UNIQUE 索引,因此结果只有一条,同时优化过程中查询列值会转成常量。
    • system — 表中数据只有一行的情况;
    • null — 不用访问表就可以直接得到结果。(例如:SELECT 1)
      type的效率高低情况:all < index < range < index_subquery < unique_subquery < index_merge < ref_or_null < ref < eq_ref < const < system
  • possible_keys — 表示查询时,可能使用的索引;
  • key — 表示实际使用的索引;
    如果这一列为 NULL 则表示未使用索引,反之则使用了索引。
  • key_len — 索引字段的长度;
  • ref— 列与索引的比较;
  • rows — 大概估算的行数;
  • filtered — 按表条件过滤的行百分比;
  • Extra — 执行情况的描述和说明。

文章作者: Crazy Boy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Crazy Boy !
评 论
 上一篇
MySQL中decimal类型
MySQL中decimal类型
在mysql中,经常会使用decimal数据类型来保存精度准确的数值,如工资、价格、金额等货币数据。 语法及其说明columName decimal(P,D);P表示有效数字的精度,范围为1~65;P的默认值为10,如columName
2020-07-05
下一篇 
MySQL索引
MySQL索引
导致 MySQL 索引失效的常见场景 联合索引不满足最左匹配原则 最左匹配原则是指以最左边的为起点字段查询可以使用联合索引,否则将不能使用联合索引。 假设联合索引为A+B+C,则能使用索引的为A+B+C、A+B、A+C。 模糊查询最前面的为
2020-05-23
  目录