【问题标题】:Reset/compact mysql AI ID field?重置/压缩 mysql AI ID 字段?
【发布时间】:2011-05-18 22:39:23
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: mysql sql auto-increment


    【解决方案1】:

    如果您将 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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      最简单、最快 :) 只需删除索引,设置 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);
      

      【讨论】:

        猜你喜欢
        • 2012-02-22
        • 1970-01-01
        • 1970-01-01
        • 2014-07-24
        • 1970-01-01
        • 2011-10-17
        • 2019-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多