使用Guid(UniqueIdentifier)作为Primary / Surrogate Key列或序列化的“identity”整数列是否更好;为什么它更好?在哪种情况下你会选择一个而不是另一个?
解决方法
我个人使用INT IDENTITY来处理我的大多数主键和集群键.
您需要将作为逻辑构造的主键分开 – 它唯一地标识您的行,它必须是唯一且稳定且非NULL. GUID也适用于主键 – 因为它保证是唯一的.如果使用sql Server复制,GUID作为主键是一个不错的选择,因为在这种情况下,无论如何都需要唯一标识的GUID列.
sql Server中的聚类键是一个物理构造,用于数据的物理排序,并且更难以正确.通常,sql Server上的索引女王Kimberly Tripp也需要一个好的集群密钥,它是唯一的,稳定的,尽可能窄的,并且理想情况下不断增加(INT IDENTITY是).
在这里查看她关于索引的文章:
> GUIDs as PRIMARY KEYs and/or the clustering key
> The Clustered Index Debate Continues…
> Ever-increasing clustering key – the Clustered Index Debate……….again!
对于群集密钥,GUID是一个非常糟糕的选择,因为它很宽,完全随机,因此导致错误的索引碎片和糟糕的性能.此外,群集密钥行也存储在每个非群集(附加)索引的每个条目中,因此您确实希望保持较小 – GUID为16字节,而INT为4字节,并且有几个非聚集索引和几百万行,这是一个巨大的差异.
在sql Server中,您的主键默认情况下是您的群集密钥 – 但它不一定是.您可以轻松地使用GUID作为NON-Clustered主键,并使用INT IDENTITY作为您的群集键 – 只需要了解一点.