Mysql 执行计划

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 操作使用了关联查询或者子查询,且需要进行嵌套循环计算。

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

相关阅读更多精彩内容

友情链接更多精彩内容