随着公司业务的快速扩展,数据日益增多,对于性能要求也被慢慢的提上了日程,谈下我在Mysql优化上面进行的方向吧。
截止优化前,公司几张数据量较大的表如下:
1.场次关联商品表 73万条记录
2.场次时间表 21万条记录
3.LBS上报记录表 37万条记录
4.用户登录记录表 178万条记录
5.用户手机通讯录存储表 42万条记录
一.之前主键ID使用了UUID类型,但是此类型做索引之后占用的空间较大,比较效率低下,将主键全部换成的INT类型,加上索引之后效率和空间使用上面有明显的效果
二.对列添加索引的顺序上面进行了调整,根据业务需求中经常使用的ORDER BY 和 GROUP BY顺序对列索引顺序进行相应调整,尽量使索引使用达到二星、三星
三.原先SQL中使用到OR查询的地方尽量拆分成UNION或者使用复合索引
四.把原先进行null值判断的数据都给默认值,使用null判断后可能导致不走索引查询
五.去除了一些不必要的索引,加快INSERT/UPDATE速度
六.修改代码中涉及到的大事务操作,将此部分代码拆分成异步执行的方式
七.将主键改成INT后进行分表处理
进行以上优化之后,整体效率提升了近三倍,如果有更好的优化意见欢迎大家提出讨论下~