数据越来越多,数据库越来越慢该怎么办

参考:

数据越来越多,数据库越来越慢该怎么办

方案一:读写分离,主从复制

方案二:归档历史数据

当单表的数据太多,多到影响性能的时候,首选的方案是,归档历史数据。就是把大量的历史数据移到另外一张历史数据表中,因为像订单这类具有时间属性的数据,都存在热尾效应。大多数情况下访问的都是最近的数据。因为新数据只占数据总量中很少的一部分,所以把旧数据和新数据分开存放,可以提高新数据的查询效率。这种方法能起到的效果好,且对系统的改动小,升级成本低

方案三:分库分表

分库主要是为了减少每个数据库服务器的访问量,分表主要是为了提高对单个表的数据的查询速度。
并发大就分库:可以拆分业务就垂直分库,否则水平分库
查询慢就分表:有冗余字段就垂直分表,否则就水平分表

水平分表

字段的值为依据,按照一定策略(hash、range等),将一个中的数据拆分到多个中。把记录分别存到不同的表中
场景:
系统绝对并发量并没有上来,只是单表的数据量太多,影响了SQL效率,加重了CPU负担,以至于成为瓶颈。例如表中分表记录各个地区的数据或者不同时期的数据,特别是有些数据常用,有些不常用。
缺点:
1、给应用增加复杂度,通常查询时需要多个表名,查询所有数据都需UNION操作
2、在许多数据库应用中,这种复杂度会超过它带来的优点,查询时会增加读一个索引层的磁盘次数

垂直分表

字段为依据,按照字段的活跃性,将中字段拆到不同的(主表和扩展表)中。将同一条记录前半段存到一个表中,后半段存到一个表中
场景:
系统绝对并发量并没有上来,表中某些列常用,另外一些列不常用,可以使数据行变小,可以把常用的列和不常用的列放在不同的表中,这样一个数据页能存储更多数据,查询时减少I/O次数
缺点:
管理冗余列,查询所有数据需要join操作

水平分库

字段为依据,按照一定策略(hash、range等),将一个中的数据拆分到多个
场景:系统绝对并发量上来了,分表难以根本上解决问题,并且还没有明显的业务归属来垂直分库。

垂直分库

为依据,按照业务归属不同,将不同的拆分到不同的
场景:系统绝对并发量上来了,并且可以抽象出单独的业务模块。
原文地址:https://www.cnblogs.com/hi3254014978/p/14154614.html