Sql-Server

什麼可能導致自動增量主鍵跳過數字?

  • January 9, 2018

我有一個使用以下 T-SQL 創建的表:

CREATE TABLE [dbo].[TableName](
   [id] [int] IDENTITY(1,1) NOT NULL
PRIMARY KEY CLUSTERED 
(
   [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

我今天看了一下這張表,注意到 id 列正在跳過值:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 2034, 2035, 3034

我不擔心這個或任何事情(我的應用程序不關心主鍵是什麼),我只是好奇可能導致這種情況發生的原因。似乎確實有一種模式,每次“跳躍”發生時跳躍 1000 次。

我的應用程序使用實體框架插入這些行,如果這有什麼不同的話。

有很多事情會導致 IDENTITY 列中的間隙(回滾、刪除),但在這種情況下,由於跳轉,我懷疑這是這個錯誤 - 由引入 SEQUENCE 對 IDENTITY 的更改引起:

所以我敢打賭,如果你查看 SQL Server 的錯誤日誌,與這些跳轉相關的行是在 SQL Server 服務重新啟動、數據庫分離/重新連接等之後不久插入的。

不過,真的,你為什麼要關心差距?你不應該。如果您需要連續的數字序列,請停止使用 IDENTITY。

引用自:https://dba.stackexchange.com/questions/62151