我有 SQL Server 2008 的代码优先 MVC 4 应用程序。
我的一张表用得很多,所以每天都有很多数据存储在上面,一段时间后我删除了旧数据。这就是为什么,元素的ID
迅速增加。
我将其定义ID
为int
模型中的类型。我担心桌子会在一段时间后填满。
如果表 ID 将达到最大长度,我该怎么办?我从来没有遇到过这种情况。
我的第二个问题是,如果我将 ID 的类型从类型更改int
为long
导出导入数据库,这种long
类型会影响(降低)站点的速度吗?
我有 SQL Server 2008 的代码优先 MVC 4 应用程序。
我的一张表用得很多,所以每天都有很多数据存储在上面,一段时间后我删除了旧数据。这就是为什么,元素的ID
迅速增加。
我将其定义ID
为int
模型中的类型。我担心桌子会在一段时间后填满。
如果表 ID 将达到最大长度,我该怎么办?我从来没有遇到过这种情况。
我的第二个问题是,如果我将 ID 的类型从类型更改int
为long
导出导入数据库,这种long
类型会影响(降低)站点的速度吗?
如果您使用从 1 开始的值,并且您每秒、一年中的每一天、全年都INT IDENTITY
插入一行- 那么您需要 66.5年才能达到 20 亿的限制...
如果你害怕 - 这个命令告诉你什么?
SELECT IDENT_CURRENT('your-table-name-here')
你真的接近 2,147,483,647 - 还是你还有很长的路要走?
如果您应该“太接近”:您始终可以将列的数据类型更改为BIGINT
- 如果您使用从 1 开始的 a,并且您每秒BIGINT IDENTITY
插入一千行,您需要一个令人难以置信的2.92 亿年才能达到922 万亿极限....
据我所知,目前还没有任何有效的方法来防止达到自动增加身份的限制。您可以将其设置为足够大的数据类型,以便在创建表时持续很长时间。但是,这是我能想到的一种解决方案。
创建一个具有相同数据结构的新临时表,其中已包含自动增量列并设置为主键。然后,在 Management Studio 中,将数据从旧表导入到新表中。当您被要求复制数据或编写自己的查询时,只需选择编写查询,然后从旧表中选择除 ID 之外的所有内容。这可以将身份重置为从 1 开始。之后您可以删除旧表并重命名新的临时表。虽然您必须右键单击数据库本身才能访问导入和导出命令,但您可以在选项中将源数据库和目标数据库设置为相同。
这种方法非常简单,我自己做过几次。