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

xpe*_*int 165 mysql database limit database-table

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

Bil*_*win 229

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

确实,如果使用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.这适合多少行取决于每行的大小.

  • 垃圾 - 我希望我之前会读到这个...我刚刚在我的一张桌子上超过了我的64 TB的尺寸,现在我的系统太慢了! (55认同)
  • 这必须是这个问题的公认答案. (11认同)
  • @ Ext3h,[Sphinx搜索](http://sphinxsearch.com/)通常比MyISAM或InnoDB中的全文索引更好。 (2认同)

KM.*_*KM. 61

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

  • 海报不是询问数字或任何其他数据类型..我真的不明白这是如何被标记为正确的答案.虽然我必须承认问题含糊不清,但我们应该区分PK数据类型和表的最大行数. (16认同)
  • **问题的上下文是关于自动增量字段是否可以处理大量行,而不是其他资源的限制** (7认同)
  • 最大2147483647,所以如果你正在使用数十亿条目,你只需要自动增量bigint?(这可能只是让你的选择语句在此之前很久就消失了) (6认同)
  • @Tchalvak那是签名int,请阅读mysql文档. (2认同)
  • 尽管如此 - 问题是关于表记录限制而不是数据类型最大值,因为“unsigned bigint”最大值不需要等于最大记录计数。换句话说 - 将您的 PK 更改为 bigint 可能不会为您提供预期的记录数量。 (2认同)

PHP*_*uru 12

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

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


Xyl*_*ylo 10

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

  • 不能仅根据行数和行大小来确定所需的硬盘大小。表大小本身将为 64 TB。但是,TEXT 和 BLOB 列的数据与行分开存储,需要额外的空间。此外,这将取决于 TEXT 和 BLOB 列的数量和类型,因为大小因类型而异。TEXT 列有四种类型,即 TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。还有四种类型的 BLOB 列,即 TINYBLOB、MEDIUMBLOB、BLOB 和 LONGBLOB。 (2认同)