一线大厂面试真题——执行SQL响应比较慢,你有哪些排查思路

一、排查思路

如果执行SQL响应比较慢,有以下4个原因:

第1个原因:没有索引或者导致索引失效。

2个原因:单表数据量数据过多,导致查询瓶颈

第3个原因:网络原因或者机器负载过高。

第4个原因:热点数据导致单点负载不均衡。

接下,针对以上几种情况,分别来聊一聊我的解决方案。

二、解决方案

1种情况

索引失效或者没有没有索引的情况

首先,可以打开MySQL的慢查询日志,收集一段时间的慢查询日志内容,然后找出耗时最长的SQL语句对这些SQL语句进行分析

比如可以利用执行计划explain去查看SQL是否有命中索引。如果发现慢查询的SQL没有命中索引,试去优化这些SQL语句,保证SQL走索引执行。如果SQL结构没有办法优化的话,可以考虑在表上再添加对应的索引。我们在优化SQL或者是添加索引的时候,都需要符合最左匹配原则

第2情况

单表数据量数据过多,导致查询瓶颈的情况。即使SQL语句走了索引,表现性能也不会特别好。这个候我们需要考虑对表进行切分。表切分规则一般分为两种,一种是水平切分,一种是垂直切分。水平分的意思是把一张数据行数达到千万级别的大表,按照业务主键切分为多张小表,这些小表可能达到100张甚至1000张

那垂直切分的意思是,将一张单表中的多个列,按照业务逻辑把关联性比较大的列放到同一张表中去。

这种分表之外,我们还可以分库,

比如我们已经拆分完1000表,然后,把后缀为0-100的表放到同一个数据库实例中,然后,100-200的表放到另一个数据库实例中,依此类推把1000表存放到10个数据库实例中。这样的话,我们就可以根业务键把请求路由到不同数据库实例,从而让每一个数据库实例承担的流量比较小,达到提高数据库性的目的。

第3情况

网络原因或者机器负载过高的情况,我们可以进行读写分离.

MySQL支持一主多从的分布式部署,我们可以将主库只用来处理写数据的操作,而多个从库只用来处理读操作。在流量比较大的场景中,可以增加从库来提高数据库的负载能力,从而提升数据库的总体性能。

4种情况

热点数据导致单点负载不均衡的情况。

这种情况下,除了对数据库本身的调整以外,还可以增加缓存。将查询比较频繁的热点数据预存到缓存当中,比如RedisMongoDBES等,以此来缓解数据的压力,从而提高数据库的响应速度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值