192

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

4

8 回答 8

267

整数的最大值与您可以在表中存储的最大行数几乎没有关系。

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

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

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

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

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

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

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

InnoDB 表空间也有 64 TB 的表大小限制。有多少行适合这取决于每行的大小。

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

于 2010-04-26T20:00:52.567 回答
69

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

于 2010-04-26T19:30:04.537 回答
15

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

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

于 2012-04-15T02:11:53.527 回答
11

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

于 2013-06-21T15:04:23.737 回答
2

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

于 2013-08-14T13:13:57.770 回答
1

行大小限制

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 配置选项定义的。“<a href="http://dev.mysql.com/doc/refman/5.6/en/innodb-restrictions.html" rel="nofollow noreferrer">InnoDB 表的限制”。

  • 如果包含可变长度列的行超过 InnoDB 最大行大小,则 InnoDB 选择可变长度列用于外部页外存储,直到该行符合 InnoDB 行大小限制。对于在页外存储的可变长度列,本地存储的数据量因行格式而异。有关更多信息,请参阅“<a href="http://dev.mysql.com/doc/refman/5.6/en/innodb-row-format.html" rel="nofollow noreferrer">InnoDB 行存储和行格式”。
  • 不同的存储格式使用不同数量的页眉和尾数据,这会影响可用于行的存储量。
于 2016-11-22T11:35:58.263 回答
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

于 2017-01-16T08:25:26.227 回答
-4

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

于 2011-12-21T06:51:31.043 回答