gpt4 book ai didi

sql - sql server数据库中的主键数据类型

转载 作者:行者123 更新时间:2023-12-02 17:55:10 24 4
gpt4 key购买 nike

我发现安装了 ASP.NET 成员资格表后,它们对所有主键字段使用数据类型“uniqueidentifier”。

我一直在使用“int”数据类型,并在插入时加一并将列声明为 IDENTITY。

与我当前在新插入中使用 int 和自动增量的模型相比,使用 uniqueIdentifier 数据类型有什么特别的好处吗?

最佳答案

我个人使用 INT IDENTITY 作为我的大部分主键和集群键。我认为 Microsoft 选择在其 ASP.NET 成员资格表中使用 Uniqueidentifier 是相当不幸的 - 很多人将该数据库作为其他数据库的"template"......

您需要将主键分开,它是一个逻辑构造 - 它唯一标识您的行,它必须是唯一且稳定的并且不为空。 GUID 也适用于主键 - 因为它保证是唯一的。如果您使用 SQL Server 复制,则将 GUID 作为主键是一个不错的选择,因为在这种情况下,您无论如何都需要一个唯一标识 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 作为聚集键 - 只需要稍微注意一下即可。

关于sql - sql server数据库中的主键数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2889452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com