<span>MySQL Explain分析执行计算</span>

用法

{EXPLAIN | DESCRIBE | DESC}
    tbl_name [col_name | wild]

{EXPLAIN | DESCRIBE | DESC}
    [explain_type]
    {explainable_stmt | FOR CONNECTION connection_id}

{EXPLAIN | DESCRIBE | DESC} ANALYZE select_statement    

explain_type: {
    FORMAT = format_name
}

format_name: {
    TRADITIONAL
  | JSON
  | TREE
}

explainable_stmt: {
    SELECT statement
  | TABLE statement
  | DELETE statement
  | INSERT statement
  | REPLACE statement
  | UPDATE statement
}

explain 输出的字段含义

Explain执行计划包含字段信息如下:id、select_type、table、partitions、type、possible_key、key、key_len、ref、rows、filtered和Extra 12个字段。

字段 format=json时的名称 含义
id select_id 该语句的唯一标识
select_type 查询类型
table Table_name 表名
partitions partitions 匹配的分区
type Access_type 连接类型
possible_keys possible_keys 可能得索引选择
key key 实际选择的索引
key_len key_length 索引的长度
ref ref 索引的哪一列被引用了
rows rows 估计要扫描的行数
filtered filtered 表示符合查询条件的数据百分比
Extra 没有 附加信息

type 连接类型,有如下几种取值,性能从好到坏排序如下

  • system:该表只有一行,相当于系统表,system是const类型的特例。
  • const:针对主键或唯一索引的等值查询扫描,最多只返回一行数据,const查询速度非常快,因为它仅仅读取一行数据即可。
  • eq_ref: 当使用了索引的全部组成部分,并且索引是primary key 或unique not null 才会使用该类型,性能仅次于system及const
  • ref: 当满足索引的最左前缀规则,或者索引不是主键也不是唯一索引时才会发生。如果使用的索引实惠匹配到少量的行,性能也是不错的。
  • fulltext: 全文索引
  • ref_or_null:该类型类似于ref,但MySQL会额外搜索哪些行包括了NULL,这种类型常见于解析子查询 sql select * from ref_table where key_column = exp or key_column is null;
  • index_merge:表示使用了索引合并优化
  • unique_subquery:该类型和eq_ref类似
  • index_subquery:与unique_subquery类似
  • range:范围扫描,常见于between、><
  • index:全索引扫描,和ALL类似,只不过index是全哦按扫描了索引的数据。当查询仅使用索引中的一部分列时,可使用此场景。
  • ALL:全表扫描,性能最差。

rows rows:以表的统计信息和索引使用情况,估算要找到所需要的记录,需要读取的行数。

这是评估SQL性能的一个比较重要的数据,mysql需要扫描的行数,可以直观的显示SQL性能的好坏,一般情况下rows值越小越好。

Extra Extra:不适合在其他列中显示的信息,explain中的很多额外的信息都会在extra字段显示。 using index:在相应的select操作中使用了覆盖索引。

覆盖索引:通俗一点来说就是查询的列被索引覆盖,使用到覆盖索引查询速度非常快,SQL优化中理想的状态 using where:查询时未找到可用的索引,进而通过where条件过滤所需数据,但是要注意并不是所有带where语句的查询都会显示 using where using temporary: 表示查询后结果需要使用临时表来存储,一般在排序或者分组查询时用到。 using filesort:表示无法利用索引完成的排序操作,也就是order by 的字段没有索引,通常这样的SQL都是需要优化的。

如果 order by 字段有索引就会用到覆盖索引,相比执行速度快很多。

参考文章

全部评论

相关推荐

08-19 17:40
Java
吴offer选手:666 打老板了吗
点赞 评论 收藏
分享
来个厂收我吧:首先,市场侧求职我不是很懂。 但是,如果hr把这份简历给我,我会觉得求职人不适合做产品经理。 问题点: 1,简历的字体格式不统一,排版不尽如人意 2,重点不突出,建议参考star法则写个人经历 3,印尼官方货币名称为印度尼西亚卢比(IDR),且GMV690000印尼盾换算为305人民币,总成交额不高。 4,右上角的意向职位在发给其他公司时记得删除。 5,你所有的经历都是新媒体运营,但是你要投市场营销岗位,jd和简历不匹配,建议用AI+提示词,参照多个jd改一下经历内容。 修改建议: 1,统一字体(中文:思源黑体或微软雅黑,英文数字:time new romans),在word中通过表格进行排版(b站学) 2,校招个人经历权重:实习经历=创业经历(大创另算)>项目经历>实训经历>校园经历 3,请将项目经历时间顺序改为倒序,最新的放最上方。 4,求职方向不同,简历文字描述侧重点也需要不同。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务