MySQL数据库表记录的上限是多少?我想知道自增域。如果我添加数百万条记录会发生什么?如何处理这种情况? 谢谢!


当前回答

整数的最大值与表中可以存储的最大行数关系不大。

确实,如果您使用int或bigint作为主键,那么您只能拥有与主键数据类型中唯一值数量相同的行数,但您不必将主键设置为整数,您可以将其设置为CHAR(100)。还可以在多个列上声明主键。

除了行数之外,表大小还有其他限制。例如,您可以使用具有文件大小限制的操作系统。或者你有一个300GB的硬盘,如果每行大小为1KB,那么只能存储3亿行。

数据库大小的限制非常高:

http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html

MyISAM存储引擎支持每个表232行,但是您可以使用——with-big-tables选项构建MySQL,使其支持每个表最多264行。

http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html

InnoDB存储引擎每个表都有一个内部的6字节行ID,因此最大行数等于248或281,474,976,710,656。

InnoDB表空间也有64tb的表大小限制。它能容纳多少行取决于每一行的大小。

64TB限制假设默认页面大小为16KB。您可以增加页面大小,从而将表空间增加到256TB。但我认为,在将表扩展到这种大小之前,您会发现其他性能因素使这种方法不可取。

其他回答

在InnoDB中,表的大小限制为64tb, MySQL的行大小限制为65,535,因此可以有1,073,741,824行。这将是利用最大行大小限制的最小记录数。但是,如果行大小较小,则可以添加更多记录。

我建议,永远不要删除数据。不要说如果表的长度大于1000,就截断表的末尾。你的计划中需要有真实的业务逻辑,比如这个用户不活跃了多长时间。例如,如果它长于1年,那么将它们放在不同的表中。在维护脚本中,您可能每周或每月都遇到这种情况。

When you run into to many rows in your table then you should start sharding the tables or partitioning and put old data in old tables by year such as users_2011_jan, users_2011_feb or use numbers for the month. Then change your programming to work with this model. Maybe make a new table with less information to summarize the data in less columns and then only refer to the bigger partitioned tables when you need more information such as when the user is viewing their profile. All of this should be considered very carefully so in the future it isn't too expensive to re-factor. You could also put only the users which comes to your site all the time in one table and the users that never come in an archived set of tables.

没有限制。它只取决于您的空闲内存和系统最大文件大小。但这并不意味着您不应该采取预防措施来处理数据库中的内存使用问题。始终创建一个脚本,该脚本可以删除不再使用的行,或者将保持特定数字(比如1000)内的行总数。

整数的最大值与表中可以存储的最大行数关系不大。

确实,如果您使用int或bigint作为主键,那么您只能拥有与主键数据类型中唯一值数量相同的行数,但您不必将主键设置为整数,您可以将其设置为CHAR(100)。还可以在多个列上声明主键。

除了行数之外,表大小还有其他限制。例如,您可以使用具有文件大小限制的操作系统。或者你有一个300GB的硬盘,如果每行大小为1KB,那么只能存储3亿行。

数据库大小的限制非常高:

http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html

MyISAM存储引擎支持每个表232行,但是您可以使用——with-big-tables选项构建MySQL,使其支持每个表最多264行。

http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html

InnoDB存储引擎每个表都有一个内部的6字节行ID,因此最大行数等于248或281,474,976,710,656。

InnoDB表空间也有64tb的表大小限制。它能容纳多少行取决于每一行的大小。

64TB限制假设默认页面大小为16KB。您可以增加页面大小,从而将表空间增加到256TB。但我认为,在将表扩展到这种大小之前,您会发现其他性能因素使这种方法不可取。

根据http://dev.mysql.com/doc/refman/5.6/en/features.html中的可伸缩性和限制部分, MySQL支持大型数据库。他们使用MySQL服务器,数据库包含5000万条记录。一些用户使用的MySQL服务器有20万个表和约50亿行。