使用Guid和Int主键哪个更好?一些搜索结果偏向于Guid,另一些偏向于Int。那么,每种方法的优缺点是什么呢?
发布于 2011-11-01 18:02:13
对于SQL Server,我个人将INT IDENTITY
用于我的大多数主键和集群键。
您需要将主键分开,这是一个逻辑结构-它唯一地标识您的行,它必须是唯一的、稳定的和NOT NULL
的。GUID
也可以很好地用于主键-因为它可以保证是唯一的。如果使用SQL Server复制,则GUID
作为主键是一个很好的选择,因为在这种情况下,无论如何都需要一个唯一标识GUID列。
SQL Server中的集群关键字是一种物理结构,用于数据的物理排序,要正确处理要困难得多。通常,SQL Server上的索引女王Kimberly Tripp还要求一个好的聚集键是唯一的、稳定的、尽可能窄的,并且理想情况下会不断增加( INT IDENTITY
就是这样)。
在这里查看她关于索引的文章:
也可以看看吉米·尼尔森的The Cost of GUIDs as Primary Key
GUID对于聚集键来说是一个非常糟糕的选择,因为它是广泛的,完全随机的,因此会导致糟糕的索引碎片和糟糕的性能。此外,聚类键行也存储在每个非聚集(附加)索引的每个条目中,所以您真的希望保持它很小- GUID
是16字节,而INT
是4字节,并且有几个非聚集索引和数百万行,这会产生巨大的差异。
在SQL Server中,默认情况下,您的主键是您的聚集键-但它不是必须的。您可以很容易地使用GUID作为您的非集群主键,并使用INT IDENTITY
作为您的集群键-这只需要一点了解。
发布于 2011-11-01 17:44:54
因为整数主键是顺序的(假设是自动递增的),所以更容易将行写入数据库。GUID本质上是随机的,所以插入一行可能会导致页面拆分,从而降低插入速度。如果您真的想使用GUID作为PK,可以考虑使用newsequentialid
函数,它可以确保GUID按顺序生成。
https://stackoverflow.com/questions/7964684
复制相似问题