美文网首页
Mysql 执行计划

Mysql 执行计划

作者: 子丿龙 | 来源:发表于2021-12-17 15:47 被阅读0次

    1. type:

    其扫描速度由快到慢: system > const > eq_ref > ref > range > index > ALL

    • system:系统表,少量数据,往往不需要进行磁盘IO
    • const:常量连接( 1.命中主键(primary key)或者唯一(unique)索引
      2.被连接的部分是一个常量(const)值 )
    • eq_ref:主键索引(primary key)或者非空唯一索引(unique not null)等值扫描
    • ref:非主键非唯一索引等值扫描
    • range:范围扫描
    • index:索引树扫描
    • ALL:全表扫描(full table scan)

    2. extra

    额外信息。

    • Using filesort:性能极差,需要进行优化 .
      MySQL 对数据使用一个外部的文件内容进行了排序,而不是按照表内的索引进行排序读取。
      在一个没有建立索引的列上进行了 order by,就会触发 filesort,常见的优化方案是,在 order by 的列上添加索引,避免每次查询都全量排序。

    • Using temporary:性能较低,往往也需要进行优化.
      使用临时表保存中间结果,也就是说 MySQL 在对查询结果排序时使用了临时表,常见于order by 或 group by。
      临时表存在两种引擎,一种是 Memory 引擎,一种是 MyISAM 引擎,如果返回的数据在 16M 以内(默认),且没有大字段的情况下,使用 Memory 引擎,否则使用 MyISAM 引擎

    • Using index:性能较好
      表示 SQL 操作中使用了覆盖索引(Covering Index),避免了访问表的数据行,效率高。

    • Using index condition:性能也较高,但不如 Using index
      表示 SQL 操作命中了索引,但不是所有的列数据都在索引树上,还需要访问实际的行记录。

    • Using where:一般
      表示 SQL 操作使用了 where 过滤条件。

    • Select tables optimized away:一般
      基于索引优化 MIN/MAX 操作或者 MyISAM 存储引擎优化 COUNT(*) 操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即可完成优化。

    • Using join buffer (Block Nested Loop):性能往往也较低,需要进行优化
      表示 SQL 操作使用了关联查询或者子查询,且需要进行嵌套循环计算。

    相关文章

      网友评论

          本文标题:Mysql 执行计划

          本文链接:https://www.haomeiwen.com/subject/chuifrtx.html