2010-01-08 77 views
0

我知道使用由newid生成的GUID不是性能問題主鍵的良好候選者。使用newid和newsequentialid的複合主鍵

帶{newsequentialid(),newid()}的複合主鍵如何保證新的GUID大於先前生成的GUID?

這裏是否存在性能問題?

你可能會想,爲什麼會有人這樣做,但我寫代碼分析規則,不知道是什麼瘋狂的事情,用戶將做:)

感謝

回答

4

這比直更糟,使用newid()創建的單個GUID。

爲什麼?

  • 它仍然是完全隨機的(因爲NEWID()部分),從而導致大量的索引碎片
  • 這兩次作爲一個GUID的大,使所有非聚集索引更加臃腫,效率較低(32字節與4個字節的INT IDENTITY)

因此,我建議要麼:

  • 棒,只需NEWSEQUENTIALID()作爲默認的PK,如果你真的想和n EED一個GUID式PK
  • 使用INT/BIGINT IDENTITY以獲得最佳性能(如果複製不是要求)

這就是你擁有最好的兩個選擇。查看爲什麼一個隨機GUID是聚集鍵真的非常糟糕的選擇金佰利特里普的優秀文章:

+0

...和NEWSEQUENTIALID不會繼續SQL實例重新啓動後的序列... – gbn 2010-01-09 10:40:56