【问题标题】:Max Size of SQL Server Auto-Identity FieldSQL Server 自动标识字段的最大大小
【发布时间】:2012-01-26 04:08:43
【问题描述】:

SQL Server 标识字段 (int) 的最大大小是多少?

我每天在几个表中一次删除和插入数百条记录,我很好奇这会对自动标识字段产生什么影响。

我可以每天晚上左右运行一项工作,并在需要时截断这些数据。

感谢您的想法。

谢谢。

【问题讨论】:

    标签: sql auto-increment


    【解决方案1】:
    1. bigint - 范围: -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) 存储: 8 字节
    2. int - 范围: -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) 存储: 4 字节
    3. smallint - 范围 -2^15 (-32,768) 到 2^15-1 (32,767) 存储: 2 字节
    4. tinyint - 范围 0到255 存储: 1字节

    【讨论】:

      【解决方案2】:

      2^31 - 1 (2,147,483,647) 是 int 的上限

      【讨论】:

        【解决方案3】:

        限制与数据类型本身有关,与自动递增的事实无关。

        如果您关心最大尺寸,您可以从零以下开始序列,从而使容量翻倍,如下所示:

        CREATE TABLE [MYTABLE](
        [ID] [int] IDENTITY(-2147483648,1),
            (...)
        

        【讨论】:

        • 这是一个有趣的想法。但是,仍然应该担心未来,因为从现在开始,这种删除/插入将在每个日期每天至少发生一次或两次?
        • 如果你负担得起,你可以做一个 TRUNCATE TABLE 而不是 DELETE;您的身份值将被重置,而不是增加。
        【解决方案4】:

        一个 INT 最多可以带你 2,147,483,647。

        BIGINT 将获得 9,223,372,036,854,775,807。

        【讨论】:

        • 谢谢。在一天之内,我达到了 50 万……所以如果不经常截断,我可能无法使用其中任何一个?
        • @Becky 如果每天有 50 万,BIGINT 将持续大约 50,539,024,859 年。 :-)
        • 好的,那我的答案就出来了。我不会担心之后会发生什么:)。
        • @Becky:到那时你可能会退休:-)
        • @Becky 如果你使用 INT,你有 4293 天。这还不够吗?或者每 11.7 年进行一次截断太多了? :P
        猜你喜欢
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-11
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多