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

问题描述 投票:54回答:2

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

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

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

我相信很多人都拥有大型数据库,我想听听他们的意见。

谢谢。

mysql database integer auto-increment
2个回答
60
投票

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


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无符号来扩展限制,就像Dan Armstrong所说的那样。虽然这并不意味着它牢不可破!当表变得非常大时,性能可能会受到影响。
  2. 更难的方法:Use partitioning,这是一个更复杂的方法,但提供更好的性能,并且真正没有数据库限制(您的唯一限制是您的物理硬盘的大小。)。 Twitter(以及类似的大型网站)每天使用这种方法来发送数百万条推文(记录)!
© www.soinside.com 2019 - 2024. All rights reserved.