MySQL慢查询优化&缩容实践

Nobody / 2024-10-09 / 原文

索引调整

在一个数据量较大的订单表中,发现某些查询因为缺少合适的索引而变慢。添加了必要的索引后,查询效率明显提升。

查询条件调整

  1. 在一个sql中需要根据时间条件查询,但是等号左边的字段使用了函数操作(将时间戳转换成了年月日),导致索引失效进行了全表扫描。解决:将等号右边的条件反向转换成表里的字段类型。
  2. 一个统计报表的查询非常慢,原因是查询需要处理大量的数据。通过优化查询条件,只获取必要的数据,减少了数据的处理量,从而加快了查询速度。

分区处理

一个表中有大量的删除操作,后续将其按指定字段分区,定时drop分区

频繁调用的sql

与业务人员沟通,将其放入缓存

消除排序

将排序字段添加到索引上。(并不是所有都可以这样,要看具体的sql中排序字段所处的位置)

优化器没使用指定索引

通过explain analyze 去看一条语句执行时的信息统计,比较cost与actual time,再使用explain analyze force index去看使用指定索引的开销,确认是否没走合适的索引。
如果没走建立的指定索引,这是最难搞的,线上不允许使用optimize table,业务那边也不愿意使用force index。一般这种表的分析主要看

  • 表的大小
  • sql的频率

如果表比较小,则可以将其放到缓存中。或者等维护的时候清理表的碎片,但是需要提前克隆实例,测量操作时间。