MySQL数据库表中的最大记录数

时间:2010-04-26 19:27:03

标签: mysql database limit database-table

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

8 个答案:

答案 0 :(得分:217)

整数的最大值与您可以在表中存储的最大行数无关。

如果你使用int或bigint作为主键,那么你只能拥有与主键数据类型中唯一值的数量一样多的行,但是你不必创建主键。键一个整数,你可以使它成为CHAR(100)。您还可以在多个列上声明主键。

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

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

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

MyISAM存储引擎每个表支持2个 32 行,但您可以使用--with-big-tables选项构建MySQL,使其最多支持2个 64 行每桌。

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

InnoDB存储引擎似乎没有行数限制,但它的表大小限制为64TB。这适合多少行取决于每行的大小。

答案 1 :(得分:56)

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

无符号int最大值为4,294,967,295
无符号bigint最大值为18,446,744,073,709,551,615

答案 2 :(得分:12)

我建议,永远不要删除数据。不要说表是否超过1000截断表的末尾。您的计划中需要有真实的业务逻辑,例如此用户处于非活动状态的时间。例如,如果它超过1年,则将它们放在不同的表中。您可以在缓慢的时间内每周或每月在维护脚本中进行此操作。

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

答案 3 :(得分:8)

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

Row Size Limits

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

  • InnoDB表的最大行大小,适用于数据 本地存储在数据库页面中,略小于半页。例如,对于默认的16KB InnoDB页面大小,最大行大小略小于8KB,该大小由innodb_page_size配置选项定义。 “Limits on InnoDB Tables”。

  • 如果包含可变长度列的行超过InnoDB最大行大小,InnoDB会选择可变长度列进行外部页外存储,直到该行符合InnoDB行大小限制。 为可变长度列本地存储的数据量 存储的页外格式因行格式而异。有关更多信息,请参阅 “InnoDB Row Storage and Row Formats”。
  • 不同的存储格式使用不同数量的页眉和预告片数据,这会影响行可用的存储量。

答案 6 :(得分:1)

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

行大小限制

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

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

对于4KB,8KB,16KB和32KB innodb_page_size设置,InnoDB表的最大行大小(适用于本地存储在数据库页面中的数据)略小于半页。例如,对于默认的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

答案 7 :(得分:-2)

没有限制。它只取决于您的可用内存和系统最大文件大小。但这并不意味着您不应采取预防措施来解决数据库中的内存使用问题。始终创建一个脚本,可以删除不使用的行或者在特定数字中保留总行数,例如一千个。