自动增量在mysql中可以生成的最大ID号是多少

时间:2012-05-22 17:33:12

标签: mysql database integer auto-increment

我有一个快速填充数据的数据库,我们每天谈论10-20k行。

ID和自动增量选项的限制是多少?如果ID被创建为INTEGER,那么我可以为无符号值做最大值2,147,483,647?

但是当自动增量高于此值时呢?这一切都崩溃了吗?那会有什么解决方案呢?

我确信很多人都拥有大型数据库,我想听听他们。

谢谢。

2 个答案:

答案 0 :(得分:58)

如果你担心它过快地超出界限,我会将PK设置为UNSIGNED BIGINT。这样您的最大值为18446744073709551615,这应该足够了。

答案 1 :(得分:27)

                    | Min. (inclusive)           | Max. (inclusive)
-----------------------------------------------------------------------------
INT Signed (+|-)    |             -2,147,483,648 |             +2,147,483,647
-----------------------------------------------------------------------------
INT Unsigned (+)    |                          0 |              4,294,967,295
-----------------------------------------------------------------------------
BIGINT Signed (+|-) | -9,223,372,036,854,775,807 | +9,223,372,036,854,775,806
-----------------------------------------------------------------------------
BIGINT Unsigned (+) |                          0 | 18,446,744,073,709,551,615

MySQL reference

如果您的mysql表具有列ID(INT unsigned),并且该表有4,294,967,295条记录,那么您尝试再插入1条记录,新记录的ID将自动更改并设置为最大值“ 4,294,967,295“,因此您收到MySQL错误消息Duplicate entry '4294967295' for key 'PRIMARY',如果将列设置为主键,您将拥有重复的ID。

2可能的解决方案:

  1. 简单方法:通过将ID设置为 BIGINT unsigned 来扩展限制,就像 Dan Armstrong 所说的那样。虽然这并不意味着它牢不可破!当表变得非常大时,性能可能会受到影响。
  2. 更难的方法Use partitioning,这是一个更复杂的方法,但提供更好的性能,并且真正没有数据库限制(您的唯一限制是您的物理硬盘的大小。)。 Twitter(以及类似的大型网站)每天使用这种方法发送数百万条推文(记录)!