重置高度活跃的MySQL数据库中的标识符

时间:2011-03-05 21:15:52

标签: mysql database maintenance

我有一个MySQL数据库,用于存储从远程用户收到的更新数据包。每五到十次更新,一些额外的代码运行会创建本质上是集体更新数据包。此方法允许用户获取应用程序的最新信息,而无需从更新数据包零重新生成状态。

我知道重复使用数据库索引通常是不好的做法,因为最终会破坏关系引用。在我的情况下,没有辅助表引用我的更新分组数据。索引仅由客户端应用程序使用,以确定尚未处理哪些更新。经过几个月的典型使用后,由于访问集体更新数据包,我的自动增量索引无疑会变得非常大并且远远超出必要的值。那么,在我的具体情况下,在生成集体更新数据包之后重置索引是否有意义并且是首选的?

我没有太多的数据库经验,所以我可能会在这里忽略一种技术 - 如果是这样,请指出我正确的方向。谢谢!

2 个答案:

答案 0 :(得分:2)

我发现这个问题有点令人困惑,直到我认识到您使用术语“索引”来指代我们通常称之为“标识符”的内容。

是的,重用主键值通常被认为是不好的做法。 (理想情况下,主键值是简单,唯一,不可变和匿名。)

你所说的是你在表上有一个AUTO_INCREMENT列,并且你在表中插入了很多行,并且这个值不用作表上的PRIMARY KEY。 (由于没有引用该表的外键,因此该表不必定义PRIMARY KEY。)

我只想使用BIGINT UNSIGNED的数据类型,它会给我10 ** 19个可能的值。

我没有看到我需要重置AUTO_INCREMENT值。在任何情况下,都不可能将其重置为低于存储的最高值,因此将其设置得较低将需要从表中删除行。

答案 1 :(得分:1)

具有非常高编号的自动增量ID不应该在实践中引起问题。如果你使用bigint,你可以在几十年内创造每秒1,000,而不会耗尽。