回答
当 MySQL 中的单表数据量很大以后(超千万级别),我们一般都会考虑采用分库分表,主要因为单表单库的性能瓶颈和存储限制。详情见:
但是,当数据量一大就要分库分表吗?其实不然,虽然分库分表在一定程度上提升了系统的性能和扩展了存储限制,但是分库分表的实现方案比较复杂,需要考虑的问题有很多,比如如何从单库迁移系统到分库分表系统,如何进行数据迁移,而且分库分表后也会带来很多问题,比如事务、跨库 join 等等。
所以,不到万不得已的时候,大明哥不建议一上来就分库分表!!
如果不分库分表,那又有什么方案来解决这种单表数据量过大的问题呢?我们可以考虑如下几种方案:
- 优化查询和索引
如果是查询问题,我们首先需要考虑的是是否可以通过优化查询、添加合适的索引来解决查询性能问题。其实,千万级别的单表,只要我们添加合适的索引、设计良好的表结构(比如数据冗余、隔离冷热数据字段)、减少 Join 操作,其实是可以大大提升数据库性能的。
- 历史数据归档