我目前有夜间schtasks / cron作业,删除数据库表中的所有条目并将更新的数据转储到所述表中。可以理解的是,每行的唯一ID /键随着每晚的删除和更新而递增。数据库正在MS SQL Server上运行。
我的问题:这个独特的密钥在未来的某个时刻是否会达到最高/上限?或者,也许,我不应该担心这个问题,只需重置独特的密钥作为每个夜间schtasks工作的一部分?注意:密钥不用作外键,因此可以重置密钥。
这是推荐的重置密钥的SQL命令吗?:https://technet.microsoft.com/en-us/library/ms176057.aspx
答案 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中的最后一个标准选项是使用guid
或uniqueidentifier
。指导总数约为5.31 * 10 ^ 36。
所以,答案是,您必须弄清楚在这些不同情况下达到最大值需要多长时间,并确定哪一个最适合您。您还应该考虑记录的ID有多重要。如果它根本不重要,那么使用int并截断表可能就足够了。如果身份证很重要,那么你还有更多的研究要做。