来源:blog.youkuaiyun.com/weixin_40307206/article/details/105158912
MySQL本身并没有对单表最大记录数进行限制,这个数值取决于你的操作系统对单个文件的限制本身。业界流传是500万行。超过500万行就要考虑分表分库了。
阿里巴巴《Java 开发手册》提出单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
一个简单的 test
通过循环给表中插入数据,记录插入条数,并输出到控制台。
结果:
private static void insertDataDemo() {DButil dButil = new DButil();myCon = dButil.getConnection();try {int i = 0;while(1==1) {i++;String sql = "insert into users (user_name,user_password)"+ " value ('"+i+"','password')";sta = myCon.createStatement();sta.execute(sql);System.out.println(i);}} catch (Exception e) {e.printStackTrace();}finally {dButil.close();}}

经过一晚上的运行,早晨发现已经插入了两百多万条数据, 尽管还可以插入数据,但通过控制台台输出发现插入数据的速度相对来说慢了很多,隔2-3秒插入一条,这速度是不能忍受的。
事实上,MySql数据库一张表中能存储的最大数据量和实际记录的条数无关,而与 MySQL 的配置以及机器的硬件有关。因为,MySQL 为了提高性能,会将表的索引装载到内存中。InnoDB buffer size 足够的情况下,其能完成全加载进内存,查询不会有问题。
但是,当单表数据库到达某个量级的上限时,导致内存无法存储其索引,使得之后的 SQL 查询会产生磁盘 IO,从而导致性能下降。当然,这个还有具体的表结构的设计有关,最终导致的问题都是内存限制。


这篇博客探讨了MySQL单表数据量达到一定规模时可能遇到的问题。虽然MySQL没有硬性的单表最大记录数限制,但业界普遍建议在500万行左右考虑分库分表。作者通过实验验证,发现在插入大量数据后,插入速度显著下降,这是因为当表索引超出内存限制时,会导致查询性能降低,主要由内存和表结构设计决定。文章强调了在数据库设计中需要考虑性能和内存使用,以避免因数据增长引发的性能瓶颈。
3360





