最好使用Guid或Int主键吗?一些搜索结果有利于Guid和其他有利于Int。 那么每个人的利弊究竟是什么呢?
答案 0 :(得分:2)
对于SQL Server,我个人使用INT IDENTITY
来处理大多数主键和群集密钥。
您需要将主键分开,这是一个逻辑结构 - 它唯一标识您的行,它必须是唯一且稳定的NOT NULL
。 GUID
也适用于主键 - 因为它保证是唯一的。如果使用SQL Server复制,GUID
作为主键是一个不错的选择,因为在这种情况下,无论如何都需要唯一标识的GUID列。
SQL Server中的集群密钥是一个物理结构,用于数据的物理排序,并且更难以正确使用。通常,SQL Server上的索引女王,Kimberly Tripp,也需要一个好的聚类密钥,以便尽可能地独特,稳定,并且理想地不断增加(INT IDENTITY
GUID
是)。
请参阅她关于索引的文章:
还可以看到Jimmy Nilsson的The Cost of GUIDs as Primary Key
GUID对于群集密钥来说是一个非常糟糕的选择,因为它很宽,完全随机,因此导致错误的索引碎片和糟糕的性能。此外,群集密钥行也存储在每个非群集(附加)索引的每个条目中,因此您确实希望保持较小 - INT
是16字节而不是{{ 1}}是4字节,并且有几个非聚集索引和几百万行,这会产生巨大差异。
在SQL Server中,您的主键默认情况下是您的群集密钥 - 但它不一定是。您可以轻松地将GUID用作非群集主键,并使用INT IDENTITY
作为群集密钥 - 只需要了解一点。
答案 1 :(得分:1)
因为整数主键是顺序的(假设自动递增),所以将行写入DB会更容易。 GUID本质上是随机的,因此插入行会导致页面拆分并降低插入速度。如果您确实希望将GUID用作PK,请考虑使用newsequentialid
函数来确保按顺序生成GUID。