查询分析explain的使用

查询分析explain的使用

在了解索的具体使用之前我们想了解一下MySQL中用于性能分析的工具Explain,这里面的语法是很简单的重点在于要理解其中各个字段的含义,便于可以在后面的分析中能够读懂其中的含义并加以分析。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HudaqyRc-1646708736738)(F:\typroa\aimages\image-20220307215403707.png)]

1、id

表明执行顺序,id越大优先级越高优先被执行,id值相同的情况下,从上到下执行

2、select_type

标识出的是查询的类型,需要重点理解一下

  • SIMPLE
  • PRIMARY

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OQj19aCz-1646708736739)(F:\typroa\aimages\image-20220307222603343.png)]

  • DERIVED——from中包含的子查询
  • SUBQUERY ——在select或是where中包含的子查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rIApI2Xh-1646708736740)(F:\typroa\aimages\image-20220307220929933.png)]

  • DEPENDENT SUBQUERY
  • UNCACHEABLE SUBQUERY——无法被缓存的子查询
  • UNION
  • UNION RESULT——从UNION获取结果的SELECT

3、table——表名

4.type——访问类型

访问类型也是sql分析中一个重要的指标,通常来说他的顺序是system>const>eq_ref>ref>range>index>ALL system通常是我们不能够达到的级别,因为这指的是系统级别的常量或是表。但是在应用中我们也应该尽量避免ALL的场景他是全表扫描。

  • const

表示通过索引一次就找到,在下面的列子中content虽然也是索引但是他并不是唯一性索引所以说他的type类型就是ref级别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9inaNz1-1646708736741)(F:\typroa\aimages\image-20220308090619754.png)]

  • eq_ref

唯一性索引扫描,对于一个主键,表中只有一条记录与之匹配
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1mQpPOYU-1646708736742)(F:\typroa\aimages\image-20220308091357721.png)]

  • ref
  • range
  • index

这个应该是用上了覆盖索引,要读取的数据刚好全部都在索引中,所以不需要再次从磁盘中读取;而all是所有的数据都需要去磁盘中读取。所以说index相对于all要稍微好一些,虽然他们都对全表进行了扫描但是index扫描的是索引文件。相对来说减少了来了磁盘IO的次数。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2eBFGujC-1646708736742)(F:\typroa\aimages\image-20220308091706701.png)]

5、possible_keys—可能用到的索引

6、key—实际上用到的索引

7、key_len—索引的长度

所有数据类型的列中如果要是允许为null那么长度是需要增加1,如果要是对于varchar类型,是动态类型的话需要加2

如果列的类型为int那么他的初始长度为4,char类型的则是**长度*3,**在结合上面的进行计算
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bf0TNaKm-1646708736743)(F:\typroa\aimages\image-20220308095457855.png)]

8、ref

表示的是哪些常量或是列,被用于索引中值的查找
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-StKBpuoB-1646708736744)(F:\typroa\aimages\image-20220308100001166.png)]

9、rows——Mysql 认为执行时候他必须检查的行数

10、extra——不适合在其他列中显示但是又非常重要的信息

  • Using filesort

查询中使用了文件内排序,这是一种较为影响系统性能的一个指标。他的语义是建数据读到Buffer Pool中之后又在Buffer Pool中进行了排序。在索引优化中应该考虑是不是索引失效。

  • Using temporary

使用临时表保存中间结构,常见于order by 与group by中

  • Using index

使用了覆盖索引

  • Using where
  • Using join buffer
  • impossible where

where中的值总是false,没能取到任何元组

  • select table optimized away

Mysiam的结构中会存储一个总行数的结构,所以如果要是用count()的时候就会产生这样的效果。

在没有group by子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化count操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值