何时修复MYSQL中的自动增量差距

时间:2009-12-22 23:17:30

标签: mysql auto-increment

我现在正在处理的数据库中有成千上万的记录被添加和删除,因此自动递增的密钥中存在数十万个大的自动增量和自动增加的数字。

这些数字从不存储以引用单个记录,但用于在进行即时计算时引用记录。

有没有理由删除这些间隙并重置自动增量编号或这是无关紧要的?

id字段是unsigned int,我应该将它增加到unsigned big int吗?根据我的理解,现在如果它达到4,294,967,295就会破裂。

2 个答案:

答案 0 :(得分:3)

我担心的唯一原因是你发现自己接近2 ^ 32的限制。如果您没有将该列用作行ID,则不要担心它。

编辑如果您使用此列获取任何类型的标识信息,那么我会将列切换为GUID或其他内容,因为您将会溢出,然后您'我会得到重复的值。那不是bueno。

答案 1 :(得分:1)

我不知道你的自动增量场的增长率是多少,但是你应该用简单的数学来估计你何时会达到4294967295的限制。

如果您仍然觉得需要做某事,可以选择以下选项:

  1. 将当前计数重置为1.理想情况下,通过删除列并重新创建它来执行此操作。由于您没有使用此字段进行参照完整性,因此应该是下一次快速简单的修复...
  2. 将数据类型更改为无符号BIGINT。现在你可以达到18446744073709551615.但是你需要更多的空间来存储这些增加的数据量,而你只是推迟了你的问题。
  3. 从自动增量(INT / BIGINT)更改为UUID。然后你可以不再担心数字和无穷大的性质,但你很可能不得不改变你所有的客户代码。
  4. 另外,在这里,我感觉到一个糟糕的决定或两个早些时候的某个地方。

相关问题