1

使用 Guid 或 Int 主键哪个更好?一些搜索结果支持 Guid,而其他搜索结果支持 Int。那么每个人的真正优点和缺点是什么。

4

2 回答 2

2

对于 SQL Server,我个人使用INT IDENTITY大部分主键和集群键。

您需要将主键分开,这是一个逻辑结构 - 它唯一标识您的行,它必须是唯一且稳定的,并且NOT NULL. AGUID也适用于主键 - 因为它保证是唯一的。GUID如果您使用 SQL Server 复制,作为主键的 A 是一个不错的选择,因为在这种情况下,无论如何您都需要一个唯一标识的 GUID 列。

SQL Server 中的集群键是一种物理构造,用于对数据进行物理排序,要正确执行要困难得多。通常, SQL Server 上的索引女王Kimberly Tripp 也需要一个好的集群键是唯一的、稳定的、尽可能窄的,并且理想情况下是不断增长的(这INT IDENTITY是)。

在此处查看她关于索引的文章:

并参见 Jimmy Nilsson 的The Cost of GUIDs as Primary Key

GUID 对于集群键来说是一个非常糟糕的选择,因为它很宽,完全随机,因此会导致索引碎片和性能不佳。此外,集群键行也存储在每个非集群(附加)索引的每个条目中,所以你真的想保持小 -GUID是 16 字节与INT4 字节,并且有几个非聚集索引和几百万行,这有很大的不同。

在 SQL Server 中,默认情况下您的主键是您的集群键 - 但它不是必须的。您可以轻松地将 GUID 用作非集群主键,并将INT IDENTITY用作集群键 - 只需稍加注意即可。

于 2011-11-01T10:02:12.603 回答
1

因为整数主键是顺序的(假设自动递增),所以将行写入数据库会更容易。GUID 本质上是随机的,因此插入一行会导致页面拆分并降低插入速度。如果您真的想将 GUID 用作 PK,请考虑newsequentialid确保 GUID 按顺序生成的功能。

于 2011-11-01T09:44:54.437 回答