MySQL 的执行计划 explain

MySQL 查询优化器在基于成本和规则对一条查询语句进行优化后,会生成一个执行计划,这个执行计划展示了接下来执行查询的具体方式,比如多表连接的顺序是什么,采用什么访问方法来具体查询每个表等。

执行计划是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化。
在MySQL中使用 explain 关键字查看。

查询
SELECT * FROM A WHERE NAME = "TOM";
查看上述语句的执行计划
explain select * from A where name = "TOM";
  • select_type
    该表示选择的类型,常见可选值有: SIMPLE(简单的),PRIMARY(最外层) ,SUBQUERY(子查询中的第一个select查询)

  • table
    无论我们的查询语句有多复杂,里面包含了多少个表,到最后也是对每个表进行单表访问。

  • id
    查询语句一般都以 SELECT 关键字开头,比较简单的查询语句只有一个 SELECT 关键字,

    但也有包含多个 SELECT 关键字的。

    所以查询语句每出现一个SELECT 关键字,EXPLAIN 中记录就会分配一个ID,这个ID就是 EXPLAIN 输出的第一列。

  • type
    该属性表示访问类型,有很多种访问类型。
    最常见的其中包括以下几种:

    • ALL(全表扫描)
    • index(索引扫描)
      这种类型表示是MySQL会对整个索引进行扫描。要想用到这种类型的索引,对这个索引并无特别要求,只要是索引,或者某个复合索引的一部分,MySQL都可能会采用index类型的方式扫描。缺点是效率不高,MySQL会从索引中的第一个数据一个个的查找到最后一个数据,直到找到符合判断条件的某个索引。
    • range(范围扫描)
    • ref (非唯一索引扫描)
    • eq_ref(唯一索引扫描,)
    • (const)常数引用, 访问速度依次由慢到快。

    访问速度依次由慢到快。

  • possible_keys
    顾名思义,该属性给出了该查询语句可能走的索引,(如某些字段上索引的名字)这里提供的只是参考,而不是实际走的索引。

  • key
    显示MySQL实际使用的索引,其中就包括主键索引(PRIMARY),或者自建索引的名字。

  • key_len
    表示索引所使用的字节数。

  • ref
    连接匹配条件,如果走主键索引的话,该值为: const,全表扫描的话为null值

  • rows
    扫描行数,也就是说,需要扫描多少行,采能获取目标行数,一般情况下会大于返回行数。通常情况下:rows越小,效率越高,大部分SQL优化,都是在减少这个值的大小。

    注意: 理想情况下扫描的行数与实际返回行数理论上是一致的,但这种情况及其少,如关联查询,扫描的行数就会比返回行数大大增加。

  • Extra
    这个属性非常重要,该属性中包括执行SQL时的真实情况信息,如上面所属,使用到的是"using where",表示使用where筛选得到的值。常用的有: "Using temporary" 使用临时表; "using filesort" 使用文件排序

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

相关阅读更多精彩内容

友情链接更多精彩内容