当前位置:首页 > 说编程 > 正文内容

MySQL单表数据量达到多少需要分库分表?

2020-09-26说编程855

阿里巴巴《Java 开发手册》提出单表行数超过500万行或者单表容量超过2GB,推荐进行分库分表。那么这个数据是如何得出来的,又跟什么因素有关呢?。

实际上,这个数值与单表行数和单表容量并没有直接的关系,真正的影响的一个重要因素其实是索引。因为,MySQL为了提高性能,会将表的索引装载到内存中。如果机器硬件配置够强悍,其索引能够完全加载至内存,自然不会有太大问题。但是当单表行数不断增加达到某个量级,索引也会随之增大,最后导致内存无法存储全部索引,那么SQL查询就会产生磁盘IO,我们知道磁盘的性能自然跟内存是无法比的,所以性能会出现明显的下降。

那么单纯增加内存提升硬件配置是否可以解决问题呢?

当然短期是可以解决一部分性能需求,但随着业务的增长,仍然会再次出现问题。所以我们还需要找机会进行表结构优化,在无法继续优化的时候,再考虑分库分表提高系统的性能。实际上就是将单表的大数据量拆分到多个表中,这样单表的数据量降下来了,系统整体的性能自然是优化了。

那么,我们是不是一开始就考虑分库分表更好呢?省得后期再进行重构?

答案当然是否定的。实际上,我们要结合实际需求,在项目一开始根据初期数据量和硬件配置进行综合考量来决定,如果预计三年内的数据量根本达不到这个级别,那么就没必要在创建表时就分库分表。而500万行或者单表容量2GB只是一个通常的划线,算是一个比较折中的数值,便于决策,实际执行过程中根据表结构设计的不同、代码逻辑的复杂度不同以及SQL语句的不同,可能在50w、100w、300w、500w、800w等等单表行数时出现性能问题,我们要根据情况不断进行优化重构。

系统是不断变化发展的,每个项目的需求也是不同的,不能一概而论,要结合实际需求情况和硬件配置进行综合考量。

扫描二维码推送至手机访问。

本站内容仅供学习研究,转载请以链接形式注明,如有侵犯请联系处理。

本文链接:https://suyu.net/post/7.html

分享给朋友:

发表评论

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。