MS SQL:唯一ID /唯一键的最大/上限? - 或 - 重置密钥的最佳方法

时间:2016-11-10 16:34:57

标签: sql-server database

我目前有夜间schtasks / cron作业,删除数据库表中的所有条目并将更新的数据转储到所述表中。可以理解的是,每行的唯一ID /键随着每晚的删除和更新而递增。数据库正在MS SQL Server上运行。

我的问题:这个独特的密钥在未来的某个时刻是否会达到最高/上限?或者,也许,我不应该担心这个问题,只需重置独特的密钥作为每个夜间schtasks工作的一部分?注意:密钥不用作外键,因此可以重置密钥。

这是推荐的重置密钥的SQL命令吗?:https://technet.microsoft.com/en-us/library/ms176057.aspx

2 个答案:

答案 0 :(得分:3)

尝试使用truncate而不是delete,唯一ID /键会自动重置为开头,因此您不必担心它。

TRUNCATE TABLE TableName

有关详细信息,请参阅此https://msdn.microsoft.com/en-us/library/ms177570.aspx

答案 1 :(得分:0)

所以答案是,这取决于。

标准主键通常写成如下:

PK_ID int identity(1, 1) primary key

这个主键会在1处开始,最后在2,147,483,647处开始。根据您的日志增长速度,可能需要数年才能实现这一目标,或者只需几天。您需要弄清楚数据增长的速度,并做一些数学运算来确定您接近这个数字的速度。

延长int主键生命周期的另一种方法是创建它:

PK_ID int identity(-2,147,483,648, 1) primary key

这将以int的最低可能值启动主键,并增长到可能的最高值。这使您的成长空间翻倍。但是,请注意,您的应用程序中可能存在检查id>的逻辑。 0确保有记录,这可能会导致问题。

另一种方法是使用数据类型bigint。它从-9,223,372,036,854,775,808(-9.22 * 10 ^ 18)到9,223,372,036,854,775,807(9.22 * 10 ^ 18)。

SQL Server中的最后一个标准选项是使用guiduniqueidentifier。指导总数约为5.31 * 10 ^ 36。

所以,答案是,您必须弄清楚在这些不同情况下达到最大值需要多长时间,并确定哪一个最适合您。您还应该考虑记录的ID有多重要。如果它根本不重要,那么使用int并截断表可能就足够了。如果身份证很重要,那么你还有更多的研究要做。