数据库单表数据量太大的优化方案总结

场景:一个表每天新增几万数据,目前单表总数据量在几百万数据。会查询粒度大的统计数据,也会查询粒度比较小的数据,当天更新的数据查询频率最密,最近几天的数据次之。
随着数据越来越多,数据库的性能开始变低。那么应该从哪些角度出发思考优化方案?
1.从时间特征出发:看看大约的更新时间点,在这个时间点之前的当天数据查询,直接返回“没有更新”提示,不用查库;
2.从数据特征出发:
1)热点数据是当天的数据,所以可以设立一张当天数据表,在更新到原表的同时,也更新到当天数据表。查当天数据的时候就访问这张表,由于数据量更小,所以查询速度会更快。第二天将此表清空,再次同步数据。但这个方案的缺陷是数据会冗余,而且万一要看前几天的数据,那和查前几个月的数据一样慢;
2)有时候需要查询粒度大的数据,所以可以在同步数据的同时,统计数据并存储起来,加快查询统计数据的速度;不过也是会造成数据冗余;
3.从查询优化出发:优化sql:
1)减少嵌套子查询、查询连续数据时用between and代替in等;
2)加上索引,但加索引可能会影响更新效率,用explain执行计划查看优化效率,结合理论知识找出权衡最佳的索引组合;
4.单表数据量太大,负荷过重,会影响sql执行的性能。为了加快查询和更新速度,最佳的解决方法是分表,可以根据数据的冷热、更新时间(数据连续)、某个的哈希值(数据不连续)来进行水平拆分。但要确保每个单表的数据量在一定的范围内;
以上是适合上述场景的优化方案,事实上优化处理的方式还有很多,但务必结合具体的场景情况分析。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值