SQL Server 身分差距:理解與緩解
概述
SQL Server 的 IDENTITY 屬性透過自動遞增整數值來簡化主鍵管理。 然而,這個序列中可能會出現意想不到的間隙,讓使用者感到困惑。
根本原因:身分快取
Microsoft 的文檔解釋說 SQL Server(2012 及更高版本)採用身分快取來最佳化效能。 此快取通常針對 int
IDENTITY 欄位設定為 1,000,預先指派一個值區塊。
快取大小的影響
此範例顯示,由於 1,000 個值的緩存,因此身份增量跳躍了大約 100。 當分配像 1,206,321 這樣的值時,接下來的 1,000 個將被保留,從而產生間隙。 一致的最後三位數字(例如 321)反映了保留區塊的結尾。
縮小差距的策略
雖然身分差距本身並不是問題,但它們可能是不可取的。 考慮以下選項:
ALTER DATABASE SCOPED CONFIGURATION
與 IDENTITY_CACHE = OFF
停用特定資料庫的快取。 重要注意事項
沒有任何方法可以完全消除身分差距。 並發插入或事務失敗仍然可以建立它們。 對於需要絕對序列完整性的應用程序,請考慮 GUID 或自訂序列生成機制。
以上是為什麼我的 SQL Server 身分增量會突然跳過值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!