MySQL一张表中可以存放多少数据?

MySQL一张表中可以存放多少数据?

一个简单的测试

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();
		}
	}

结果:MySQL一张表中可以存放多少数据?_第1张图片
运行了一晚上,早上发现已经插入了两百多万条数据, 尽管还可以插入数据,但是插入数据的速度相对来说慢了很多。

通过查阅资料发现:
MySQL本身并没有对单表最大记录数进行限制,这个数值取决于你的操作系统对单个文件的限制本身。业界流传是500万行。超过500万行就要考虑分表分库了。阿里巴巴《Java 开发手册》提出单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。

事实上,这个数值和实际记录的条数无关,而与 MySQL 的配置以及机器的硬件有关。因为,MySQL 为了提高性能,会将表的索引装载到内存中。InnoDB buffer size 足够的情况下,其能完成全加载进内存,查询不会有问题。但是,当单表数据库到达某个量级的上限时,导致内存无法存储其索引,使得之后的 SQL 查询会产生磁盘 IO,从而导致性能下降。当然,这个还有具体的表结构的设计有关,最终导致的问题都是内存限制。

你可能感兴趣的:(数据库)