Mysql千万级别的大表,要如何优化

根据不同的业务,优化的侧重点可能不一样,大体上可以归纳了如下一下方法,建议优化的时候要考虑成本问题,

最好是改动又少又快,效果还又好;改动越大越容易出各种问题。

大部分博文都没有提到硬件升级的方法,这种方法比较适合于短时间急需提高性能的场景,比如过明天马上有什么节日活动了,系统需要承受更高的请求量峰值,当其它简单的优化策略都用了,还达不到效果,紧急改代码增加缓存又有点仓促了,可以考虑买个更好的云服务器(内存、磁盘),租用个半个月一个月,顶一下峰值。

 

  1. 优化sql和索引;
  2. 调整mysql配置参数,参数若是读为主,索引已经创建的非常好,若是读为主,可以考虑打开query_cache,以及调整一些参数值:sort_buffer_size,read_buffer_size,read_rnd_buffer_size,join_buffer_size ;
  3. 升级硬件,更多的内存和更快的硬盘。如果是InnoDB引擎,多利用点内存,减轻磁盘IO负载,因为IO往往是数据库服务器的瓶颈;
  4. 读写分离,做主从复制,对主库进行增删改,对从库进行读,可以再应用层修改,也可以用第三方工具。由于Mysql主从复制是异步的,主从在同一时刻难免存在数据不一致的问题,特别是主从机器是跨机房或者跨地域,网络延迟大,数据很难保持强一致性。所以若是要求数据强一致性,这种方法就不合适。
  5. 增加缓存层,比如redis。需要修改应用层代码,读的时候先读cache,cache没有的话,再查数据库并回写cache;增删改时需要先删除cache的数据,再操作mysql,操作mysql成功后回写到cache,避免出现cache和mysql数据不一致的情况。
  6. 分区,mysql自带分区表,对应用是透明的,无需更改代码, 但是sql语句是需要针对分区表做优化的,sql条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区;
  7. 水平分表(垂直分表需要根据具体的字段和业务分析,此处不考虑),需要修改应用代码,修改sql语句。分表的方法:比如通过日期进行分表(如交易订单表),每个月分成一张表,这个相对简单一点。或者通过账号ID(如用户信息表),算出一个hash值再取模N(N个表,这时候要注意,如果这N个表过阵子又涨到千万级别,可能又需要扩容到2*N个表,迁移数据是个麻烦事,所以N可以适当大一点)。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值