簡體   English   中英

SQL身份增量和種子

[英]SQL Identity Increment and Seed

我正在使用Microsoft SQL Server作為我的數據庫。

我的表中有一個ID列。 在我的使用中,行被刪除並重新創建多次。 因此,如果我使用SQL Server的身份增量和身份種子,一段時間后ID號會非常大......

每個新行的ID都大於其他行並不重要。 它必須是獨一無二的。

如何在SQL Server中執行此操作? 我應該禁用自動增量並手動設置ID嗎? 怎么樣?

我正在使用C#和SQL Server Express。

我不確定你為什么關心數字是大還是小(希望用戶沒有感情價值或對身份價值有任何意義),但避免用盡問題的一種方法是使用BIGINT。 我忘記了確切的數字,但是如果你每秒生成1000個ID就需要80年左右才能達到極限 - 如果從負邊界開始,你可以加倍。 是BIGINT是8個字節而不是4個字節但是它仍然比GUID小得多且可用。 如果你將它與數據壓縮相結合,那么在你使用了20億個數字之后,你將不再需要任何存儲而不是INT。

不要過度設計這一點,也不要誤認為身份值的大小或值應該意味着什么。 這是僅為內部識別和效率生成的替代值。 如果你告訴用戶這個價值,那就有些不對勁了。

你可以試試這個代碼

--Disable identity SET IDENTITY_INSERT YourSchema.YourTable OFF GO

除非你想搞砸很多東西,即只在存儲過程中添加東西,使用select Max(ID)或其中包含next_ID的表,處理多用戶訪問等,你在2005年就會遇到這種情況(SQL 2012年引入了序列。

其他選項是重新編號ID並重新設置身份,但這也是很多工作。

除了大數字不是問題,它們只占用四個字節,與小字節相同。 滾動是一個問題當然,但這需要一段時間才能做到!

你可以翻轉到一個可以擴展的GUID,但是它們會產生一個效率非常低的索引,所以除非你有超過2 ^ 31個記錄,否則它們也不值得。

正如其他人所說,Bigint會給你更大的范圍,當然還有更大的數字。 :(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM