我知道基於Guid的主鍵不具備最佳性能(歸因於碎片),但它們是全局唯一的並允許複製方案。MS SQL中的sequental uniqueidentifier的用途是什麼?
另一方面,集成標識符以可伸縮性爲代價具有更高的性能。
但是在某些情況下,有人希望使用序列uniqueidentifier作爲主鍵?我認爲,它擊敗了GUID的目的,但我仍然看到時不時地提到序列。
我在這裏錯過了什麼?
我知道基於Guid的主鍵不具備最佳性能(歸因於碎片),但它們是全局唯一的並允許複製方案。MS SQL中的sequental uniqueidentifier的用途是什麼?
另一方面,集成標識符以可伸縮性爲代價具有更高的性能。
但是在某些情況下,有人希望使用序列uniqueidentifier作爲主鍵?我認爲,它擊敗了GUID的目的,但我仍然看到時不時地提到序列。
我在這裏錯過了什麼?
什麼是通常稱爲SQL Server 2005中的連續GUID(由NEWSEQUENTIALID()生成)是一種嘗試克服常規GUID的問題。
他們是仍然普遍獨特,但也總是上升。這意味着它們可以用於複製和比傳統的GUID有更好的插入性能。
其中一個缺點是它們不「安全」,因爲可以猜測下一個連續的guid。
使用順序的GUID可確保你總是使用比上次值大的值。對於索引字段這很重要。不是隨意在整個頻譜中插入,而是始終插入數據的最後一個「頁面」的末尾,從而大大減少頁面拆分,特別是在uniqueidentifier列也是聚簇索引的情況下。
只是一個小點。他們幾乎肯定是獨一無二的。它們在特定的計算機上是唯一的。如果一臺機器沒有網卡,它們可能變成非唯一的(儘管這種情況對於SQL Server來說不太可能)。 – BlackWasp 2009-03-15 21:53:29