我们知道,当MySQL中的单表数据量很大以后,一般就要考虑做分库分表了,主要原因就是单表量太大会导致查询效率下降。
但是,因为分库分表其实不仅实现方案复杂,并且也会带来很多问题,比如跨库事务、分页查询等,不到万不得已,不建议大家直接做分库分表。
在分库分表前应该先考虑其他的方案。以及分表的必要性。
一般来说,我们做分库的目的是提升数据库的吞吐量,做分表的目的是提升查询的效率。那么,当数据量大的时候,也可以用其他的方案来解决,应该优先考虑以下几个方案:
1、数据库优化
比如说,2000万的数据量,其实大多数情况下用好索引就可以提升很大的效率的,有的时候把索引优化好,表结构设计好(比如适当做数据冗余),SQL语句(比如减少多表JOIN)优化好,就可以大大提升性能。
2、缓存
减少对数据库的压力可以通过缓存来实现,不要把所有的流量都交给数据库来抗。适当的在近端做一些缓存,如本地缓存、分布式缓存等就可以快速的返回,还能减少数据库的压力。
3、分区
通过数据分区可以减小单个表的物理存储空间,数据分区后,存储在不同的表或文件中,以减小单表的数据量,可以提高查询性能。
4、数据归档
我们可以定期的清理一些不再需要,或者不再活跃的数据,把他们进行数据归档到辅助存储中(如历史表,离线数仓等),这样就可以减少数据的数量,就能大大提升效率。
5、分布式数据库
另外,也可以考虑采用分布式数据库系统,这样可以在多个节点上分散数据,提高性能和容量。虽然分布式数据库需要的成本比较高,但是相比分库分表的改造来说,受益也比较大。