MySQL 数据库表中自增字段的最大值

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

302190 次浏览

mysql int类型可以做很多行:http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

unsigned int最大值是4,294,967,295
unsigned bigint最大值是18,446,744,073,709,551,615

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

确实,如果您使用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。但我认为,在将表扩展到这种大小之前,您会发现其他性能因素使这种方法不可取。

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

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

当您在表中遇到很多行时,您应该开始对表进行分片或分区,并按年将旧数据放入旧表中,例如users_2011_jan, users_2011_feb或使用数字表示月份。然后更改您的编程以使用该模型。也许可以创建一个包含更少信息的新表,以在更少的列中总结数据,然后只在需要更多信息时(比如用户查看他们的配置文件时)引用更大的分区表。所有这些都应该非常仔细地考虑,这样在未来重构就不会太昂贵。你也可以只把经常访问你网站的用户放在一个表中,而把从不访问的用户放在一组存档的表中。

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

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

行大小限制

The maximum row size for a given table is determined by several factors:
  • MySQL表的内部表示有一个最大行大小 限制为65,535字节,即使存储引擎有能力 支持较大的行。BLOB和TEXT列只贡献9到12 朝向行大小限制的字节,因为它们的内容被存储

  • InnoDB表的最大行大小,适用于data 本地存储在一个数据库页面中,略小于半个页面。例如,对于默认的16KB InnoDB页面大小,最大行大小略小于8KB,这是由innodb_page_size配置选项定义的。“InnoDB表的限制”。< / p > < /李>

  • 如果包含变长列的行超过InnoDB最大行大小,InnoDB将选择变长列进行外部页外存储,直到该行符合InnoDB行大小限制。 为变长列在本地存储的数据量 存储在页外的行格式不同。有关更多信息,请参见 李“InnoDB行存储和行格式”。< / >
  • 不同的存储格式使用不同数量的页头和尾数据,这会影响行可用存储的数量。

链接http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html

行大小限制

给定表的最大行大小由以下几个因素决定:

即使存储引擎能够支持更大的行,MySQL表的内部表示也有65,535字节的最大行大小限制。BLOB和TEXT列仅为行大小限制贡献了9到12个字节,因为它们的内容与行其余部分分开存储。

InnoDB表的最大行大小,适用于本地存储在数据库页面中的数据,对于4KB、8KB、16KB和32KB的innodb_page_size设置,略小于半页。例如,对于默认的16KB InnoDB页面大小,最大行大小略小于8KB。对于64KB的页面,最大行大小略小于16KB。参见15.8.8节“InnoDB表的限制”。

如果包含变长列的行超过InnoDB的最大行大小,InnoDB将选择变长列进行外部页外存储,直到该行符合InnoDB的行大小限制。对于存储在页外的变长列,本地存储的数据量因行格式而异。有关更多信息,请参见第15.11节“InnoDB行存储和行格式”。

不同的存储格式使用不同数量的页头和尾数据,这会影响行可用存储的数量。

有关InnoDB行格式的信息,请参见第15.11节“InnoDB行存储和行格式”和第15.8.3节“InnoDB表的物理行结构”。

有关MyISAM存储格式的信息,请参见第16.2.3节“MyISAM表存储格式”。

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