MySql-explain

影响服务器性能的几个方面

  1. 服务器硬件
  2. 服务器操作系统
  3. 数据库存储引擎的选择
  4. 数据库参数的配置
  5. 数据库结构设计和SQL语句

SQL性能下降的原因

  1. 查询语句写的不好
  2. 索引失效
  3. 关联查询太多join
  4. 服务器调优及各个参数设置

SQL加载顺序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CwKhrHYF-1577071528437)(F9EC10B5442444219DEBE37F51DF4850)]

MySql常见瓶颈

  • CPU:CPU在饱和的时候一般发生在数据装入内存或磁盘读取数据的时候
  • IO:磁盘I/O瓶颈发生在装入数据远大于内存容量的时候
  • 服务器硬件的性能瓶颈

explain

使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySql是如何处理sql语句的。

explain能做什么?

  • 显示表的读取顺序
  • 数据读取操作的操作类型
  • 有哪些索引可以使用
  • 哪些索引被实际使用
  • 表之间的引用
  • 每张表有多少行被优化器查询

语法

explain sql语句
explain select * from jd;
idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEgoodsNULLALLNULLNULLNULLNULL21100.00NULL

explain字段解释

id

表示读取顺序,即使用查询时,sql先读的那张表,再读的那张。如果id相同,执行顺序由上至下。如果id不同,id值越大优先级越高,越先被执行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YxzkyAAj-1577071528439)(704AD5A65C194FEABAA7253D714ED54E)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D6tBPkW6-1577071528439)(44C89F67A3DA46DDBC8BB7AF072163E1)]

select_type

  1. simple 表简单的select查询,查询中不包含子查询和union
  2. primary 表最后被查询的,当查询语句中包含任何复杂的子部分,最外层查询则标记为primary
  3. subquery 在select或where列表中包含了子查询
  4. union 出现在union之后的查询表会被标记为union
  5. union result 从union表获取结果的select

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-33jDK3Iu-1577071528440)(A118B36E2A2D45A28051BF9ACD5521F8)]

table

显示该行数据来自于哪张表

partitions

查询访问的分区

type

从最快到最慢依次是

system > const > eq_ref > ref > range > index > ALL
  • system 表示只有一行记录,是content的特列
  • const 该表最多有一个匹配行,按主键或唯一索引读取。由于只有一行,因此该行中列的值可以被优化器的其余部分视为常量。
  • eq_ref 对于每个来自于前面的表的行组合,从该表中读取一行。用于联表查询的情况。
  • ref 非唯一索引(主键是唯一索引),返回匹配某个单独值得所有行
  • range 在制定范围内,使用一个索引来查找
  • index 比all多了遍历索引树
  • all 遍历全表找到匹配值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GduLga7l-1577071528441)(EF5824E03E464C9C9CAFFCD522C6D283)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7oqWMZkm-1577071528442)(F2BFA923BC2447B1BA564B7A2CA5AD96)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KRMa4dyx-1577071528442)(4426360169AE45D9AC78CB76C02740F8)]

possible_keys

显示该表中可能用到的索引,一个或多个,也可能NULL

key

实际使用的索引,NULL表示没有使用索引。查询中如果使用了覆盖索引,则该索引仅出现在key列表中

key_len

表示索引中使用的字节数,可以得知使用索引的长度。在不损失精准性的情况下,长度越短约好。ken_len显示的值为索引字段的最大可能长度,并非实际使用长度。

ref

表示索引那一列是否被使用到

rows

根据表统计信息及索引选用情况,大致估算出找到所需的记录需要读取的行数。

extra

包含不适合在其他列中显示 但十分重要的额外信息

  • using filesort 文件内排序,说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取
  • using temporary 使用临时表保存中间结果,mysql在对查询结果排序时使用临时表
  • using index 使用了索引,避免了全表扫描
  • using where 使用了where过滤
  • using join buffer 使用了连接缓存
  • impossible where 不可能条件,where子句的值总是false

当出现using filesort时,说明你“九死一生”,该查询语句有很大的问题,必须优化

当出现using temporary,说明“凉透了”,必须优化

using join buffer,需要优化,但问题没有上面两个严重

impossible where,说明你写的语句有问题,语法问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值