「扫码关注我,面试、各种技术(mysql、zookeeper、微服务、redis、jvm)持续更新中~」
本周进行了线上清结算相关慢sql优化,通过分析以及处理,线上慢sql已经得到了部分改善,但是还需要持续优化。主要从以下几个方面进行了优化:
1.根据Explain执行计划,增加相关单列索引;
2.将以前单个区分度并不高的单列索引优化为联合索引,效果还是比较明显,例如表pp_business_check_data(商户对账中间表)的城市编码(area_code)和状态(status)创建的单列索引,首先这2个字断的区分度并不高,其次建立2个单列索引浪费磁盘空间,所以将其整合为一个联合索引,优化后,索引类型从range变为了ref,扫描行数从258万行变成了3行,效果如下图:
3.清结算中批量插入更新操作较多,以前都是3000行数据作为一个批次插入到数据库,网络IO和执行耗时比较严重,现在缩小至1500行数据为一个批次,这种方案还有待观察,因为如果每天交易数据量较大到话,降低每次执行行数势必会增大数据库链接耗时,所以该方式还有待观察调优;
4.由于财务表历史数据较多,导致单表数据量较大,但是对账、分账表一般业务只关注月财务数据,所以考虑以时间(年)维度对数据库表进行归档处理(水平拆分),降低单表数据量。
以上为本次优化的几个侧重点,总结了数据库优化的几个方面与大家分享