MySQL优化-EXPLAIN笔记

艺帆风顺 发布于 2025-04-03 20 次阅读


explain执行计划

explain可以输出SQL语句执行的信息,常用的语法格式为EXPLAIN SELECT statement

explain输出列如下:

  1. id                    标识号
  2. select_type            查询类型
  3. table                表名称
  4. partitions            匹配的分区
  5. type                连接类型
  6. possible_keys        可能/可以用到的索引
  7. key                    实际选择的索引
  8. key_len                选择的索引的长度
  9. ref                    
  10. rows                找到记录需要读取的行数的估计值
  11. extra                额外的信息

id

查询标识,是一个有序的数字。

select_type

查询类型,值包含以下几种

  • SIMPLE 语句没有用union和子查询
  • PRIMARY 最外层的查询
  • UNION union语句中的第二个查询
  • DEPENDENT UNION union语句中的第二个查询,依赖外层查询
  • UNION RESULT union语句查询结果
  • SUBQUERY select语句中的第一个子查询
  • DEPENDENT SUBQUERY select语句中的第一个子查询,依赖外层查询
  • DERIVED 派生表
  • DEPENDENT DERIVED 派生表,依赖另一个表
  • MATERIALIZED 物化子查询
  • UNCACHEABLE SUBQUERY 子查询的结果不能被缓存,外部查询每一行需要重新计算
  • UNCACHEABLE UNION 不可缓存的union语句中的第二个查询

type

描述表时如何被连接的,以下按由好到坏列出各个值

  • system 表中只有一行
  • const 表中最多有一个匹配行,如果将一个主键放置到where后面作为条件查询,mysql优化器就能把这次查询优化转化为一个常量
  • eq_ref 表中的某行数据读取需要循环前面表中的行,它用在一个索引的所有部分被连接使用并且索引是UNIQUE或PRIMARY KEY