使用 Guid 或 Int 主键哪个更好?一些搜索结果支持 Guid,而其他搜索结果支持 Int。那么每个人的真正优点和缺点是什么。
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 字节与INT
4 字节,并且有几个非聚集索引和几百万行,这有很大的不同。
在 SQL Server 中,默认情况下您的主键是您的集群键 - 但它不是必须的。您可以轻松地将 GUID 用作非集群主键,并将INT IDENTITY
用作集群键 - 只需稍加注意即可。
因为整数主键是顺序的(假设自动递增),所以将行写入数据库会更容易。GUID 本质上是随机的,因此插入一行会导致页面拆分并降低插入速度。如果您真的想将 GUID 用作 PK,请考虑newsequentialid
确保 GUID 按顺序生成的功能。