mysql explain详解

java1234

共 1998字,需浏览 4分钟

 · 2020-09-01

点击上方蓝色字体,选择“标星公众号”

优质文章,第一时间送达

  作者 |  瓦斯突突突

来源 |  urlify.cn/Aj67Jb

66套java从入门到精通实战课程分享 

适合创建索引的情况

  • 频繁作为查询条件的字段

  • 查询中与其它表关联的字段(左外连接建到右表字段上,右外连接建到左表字段上)

  • 查询中排序的字段, 排序字段若通过索引去访问将大大提高排序速度

  • 查询中统计或者分组字段


不适合创建索引的情况

  • 表记录太少

  • 经常增删改的表或者字段


Explain 性能分析(sql执行计划)

  • 能干嘛?

    • 表的读取顺序(id)

    • select查询的类型(数据读取类型 select_type)

    • 哪些索引可以使用

    • 哪些索引被使用

    • 表之间的引用

    • 每张表有多少行被优化器查询

  • Explain各字段含义

    • Using filesort :说明 mysql 会对数据使用一个外部的索引排序, 而不是按照表内的索引顺序进行读取。MySQL 中无法利用索引完成的排序操作称为“文件排序”

    • Using temporary :使了用临时表保存中间结果,MySQL 在对查询结果排序时使用临时表。常见于排序 order by 和分组查询group by

    • Using index :代表表示相应的 select 操作中使用了覆盖索引(Covering Index), 避免访问了表的数据行, 效率不错!

    • rows 列显示 MySQL 认为它执行查询时必须检查的行数。越少越好!

    • ref显示索引的哪一列被使用了,如果可能的话,是一个常数,哪些列或者常量被用于查找索引列上的值。只有当type为ref级别以上的时候,ref这列才会有值

    • 表示索引中使用的字节数, 可通过该列计算查询中使用的索引的长度。key_len 字段能够帮你检查是否充分的利用上了索引,ken_len 越长, 说明索引使用的越充分

    • 实际使用的索引。如果为NULL, 则没有使用索引

    • 显示可能应用在这张表中的索引, 一个或多个。查询涉及到的字段上若存在索引, 则该索引将被列出, 但不一定被查询实际使用

    • 意义:type是查询的访问类型,是较为重要的一个指标,结果值从最好到最坏依次是:system > const > eq_ref > ref > range > index > ALL ,一般来说, 得保证查询至少达到 range 级别, 最好能达到 ref

    • system:表只有一行记录(等于系统表), 这是 const 类型的特列, 平时不会出现, 这个也可以忽略不计

    • const:单表中最多有一个匹配行,查询起来非常迅速,例如根据主键或唯一索引查询 (单表)

    • eq_ref:eq_ref用于联表查询(被联)的情况,按联表的主键或唯一键联合查询。唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配 (联表)

    • ref:使用非唯一索引或非唯一索引前缀进行的查找

    • range:扫描部分索引,索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行,常见于between、<、>等的查询

    • index:扫描全部索引树

    • all:扫描全表,不走索引,或者说没有索引

    • 这个数据是基于哪张表的

    • 意义 : select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询,辨识查询的类型,调整查询方式

    • simple:简单的select,不使用UNION或者子查询

    • primary:最外层select

    • derived:在 from 列表中包含的子查询被标记为derived(衍生)

    • subquery:在select或where列表中包含了子查询

    • depedent subquery:在select或where列表中包含了子查询,子查询基于外层

    • union:若第二个select出现在union之后, 则被标记为union

    • union resulet:从union表获取结果的select

    • 意义 : select 查询的序列号,包含一组数字,表示查询中执行 select 子句或操作表的顺序

    • id相同 : 执行顺序由上至下

    • id不同 : 如果是子查询,id 的序号会递增,id 值越大优先级越高,越先被执行

    • id有相同也有不同 : id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行

    • id

    • select_type

    • table

    • type

    • possible_keys

    • key

    • key_len

    • ref

    • rows

    • Extra 其他额外信息



粉丝福利:108本java从入门到大神精选电子书领取

???

?长按上方锋哥微信二维码 2 秒
备注「1234」即可获取资料以及
可以进入java1234官方微信群



感谢点赞支持下哈 


浏览 37
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报