重置/压缩mysql AI ID字段?

时间:2011-05-18 22:39:24

标签: mysql sql auto-increment

我有一个相当大的表,大约有250k行。它有一个自动递增的ID列,实际上是没用的。我不能在不重写太多应用程序的情况下删除该列,但ID永远不会被用作外键或其他任何东西(除了作为标识符,当你想删除一行时,我猜)。

大多数数据每天至少被删除和重写几次(不要问!它并不重要,虽然我意识到它的设计很糟糕!),尽管行的总数保持相当均匀。这意味着AI#每天都会增加25万左右。

我的问题是:在几年后,ID列对于INT值会变得太大。有没有办法“重置”ID,如OPTIMIZE或其他什么,或者我应该只计划执行SELECT INTO临时表并截断原始表,将ID重置为0?< / p>

由于

3 个答案:

答案 0 :(得分:2)

如果你有一个id为整数你可以有2 ^ 32/2(2.147.483.647)行,如果是无符号整数重复到4.294.967.295,不用担心250.000什么都没有,如果你想要更多,请使用unsigned bigint( 18.446.744.073.709.551.615):P

重置auto_numeric位置:

ALTER TABLE表AUTO_INCREMENT = 1

答案 1 :(得分:1)

将ID的数据类型更改为BIGINT并相应地调整程序,或者如果在删除数据时清除所有内容,则可以使用TRUNCATE TABLE TABLENAME 将重置序列。

答案 2 :(得分:1)

最简单,最快:)只需删除索引,设置autoincrement = 1,然后将其添加回来:)

ALTER TABLE yourtable DROP id_field;
ALTER TABLE yourtable AUTO_INCREMENT=1;
ALTER TABLE yourtable ADD id_field INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id_field);