【问题标题】:SQL Server table ID approachs to max lengthSQL Server 表 ID 接近最大长度
【发布时间】:2013-02-10 14:04:27
【问题描述】:

我有 SQL Server 2008 的代码优先 MVC 4 应用程序。

我的一个表使用得很多,所以每天都有很多数据存储在上面,一段时间后我删除了旧数据。这就是为什么元素的ID 快速增加的原因。

我在模型中将ID 定义为int 类型。我担心桌子会在一段时间后填满。

如果表格 ID 达到最大长度,我该怎么办?我从来没有遇到过这种情况。

我的第二个问题是,如果我将 ID 的类型从int 更改为long 类型,然后导出-导入数据库,这种long 类型会影响(降低)站点的速度吗?

【问题讨论】:

    标签: asp.net-mvc sql-server-2008 entity-framework long-integer sqldatatypes


    【解决方案1】:

    如果您使用从 1 开始的INT IDENTITY,并且您每秒、一年中的每一天、全年都插入一行 - 那么您需要 66.5 strong> 在你达到 20 亿上限之前...

    如果你害怕 - 这个命令告诉你什么?

    SELECT IDENT_CURRENT('your-table-name-here')
    

    真的接近 2,147,483,647 - 还是还有很长的路要走??

    如果您应该“太接近”:您始终可以将列的数据类型更改为 BIGINT - 如果您使用从 1 开始的 BIGINT IDENTITY,并且您插入 每秒一千行,你需要一个令人难以置信的 2.92 亿年,才能达到 922 万亿的极限......

    【讨论】:

    • 感谢您提前提供信息。我看到“int”是足够大的数字。在我的项目中,我大约在第二个添加 1 行。所以,“int”类型对我来说仍然足够了..它会在我死时填满;)
    【解决方案2】:

    据我所知,目前还没有任何有效的方法来防止达到自动增加身份的限制。您可以将其设置为足够大的数据类型,以便在创建表时持续很长时间。但是,这是我能想到的一种解决方案。

    创建一个具有相同数据结构的新临时表,其中已包含自动增量列并设置为主键。然后,在 Management Studio 中,将数据从旧表导入到新表中。当您被要求复制数据或编写自己的查询时,只需选择编写查询,然后从旧表中选择除 ID 之外的所有内容。这可以将身份重置为从 1 开始。之后您可以删除旧表并重命名新的临时表。虽然您必须右键单击数据库本身才能访问导入和导出命令,但您可以在选项中将源数据库和目标数据库设置为相同。

    这个方法很简单,我自己做过几次。

    【讨论】:

    • 此外,只要您对结果满意,您可以保留旧桌子并使用新桌子。因此,它对您的数据几乎无害。
    猜你喜欢
    • 2020-04-27
    • 2012-06-09
    • 1970-01-01
    • 2011-10-07
    • 2012-03-24
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多