mysql调优

70 阅读2分钟

一、调优重点之开发规范与索引

  1. 回表对效率影响很大,尽量使用覆盖索引
  2. 考虑是否组件联合索引,并需要遵守最左匹配原则
  3. 对索引进行函数操作或表达式计算会导致索引失效
  4. 利用explain查看索引使用情况,是否走索引。通过show profile查看资源损耗情况
  5. 尽量减少锁持有时间,比如一个事务进行插入&&更新操作,则先插入再更新,因为更新需要持有锁
  6. 利用子查询优化多分页场景。比如limit offset,需要先获取offset+n的记录,再返回n条。 子查询则是先查出n条,再通过ID检索出对应记录

二、调优重点之解决线上慢查询

  1. 一般为数据量太大,可以考虑删掉旧的数据,但不太会删
  2. mysql查询前加一层redis,但需要能够忍受数据时效性差的问题
  3. 再考虑是否有字符串检索场景导致查询效率低下,是的话能引入elasticsearch
  4. 如果还是不行的话,考虑根据查询条件的维度,做相应的聚合表,线上的请求就查询聚合表的数据,比如用户下单,产生的订单明细表的量级太大,前台的查询功能是以天维度展示,故将用户每天的数据聚合起来,这样聚合表就是一个用户一天只有一天汇总后的数据

三、写性能同样有瓶颈怎么办?

  1. 将架构升级为主从架构,主服务器接收写请求,从服务器接收读请求
  2. 从服务器通过主服务器给予的binlog来实现主从数据一致
  3. 若还是觉得效率低的话,得考虑分库分表
  4. 分库分表后的ID通过redis自增或雪花算法自增

四、分库分表的迁移过程是怎么样的?

采用双写

  1. 新增消息各自往新表和旧表写一份
  2. 将旧表的数据迁移至新库
  3. 迟早新表的数据追上旧表
  4. 校验新表和老表得到数据是否正常
  5. 开启双读(一部分流量走新表,一部分老表),即灰度上线
  6. 读流量全切新表,停止老表的写入