我想了解NewId
和'NewSequentialId
的实际使用情况,我在创建新表时通常会使用Identity
属性:
CREATE TABLE MYTABLE
(
[ID] INT PRIMARY KEY IDENTITY,
[NAME] NVARCHAR(MAX) NOT NULL
);
GO
以上代码不是最佳做法,如果是这样,我应该用它替换它:
CREATE TABLE MYTABLE
(
[ID] UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
[NAME] VARCHAR(MAX) NOT NULL
);
GO
或者用这个:
CREATE TABLE MYTABLE
(
[ID] UNIQUEIDENTIFIER ROWGUIDCOL PRIMARY KEY DEFAULT NEWSEQUENTIALID(),
[NAME] nVARCHAR(MAX) NOT NULL
);
GO
问题:NewId或NEWSEQUENTIALID是Identity的替代品,如果不是何时使用每个身份?
我不是试图将NewId
或NewSequentialId
用作Primary Key
,上面的代码仅用于演示目的,也许这段代码更像是这样:
CREATE TABLE MYTABLE
(
[ID] INT NOT NULL PRIMARY KEY,
[ROWGUID] UNIQUEIDENTIFIER ROWGUIDCOL DEFAULT NEWSEQUENTIALID(),
[NAME] nVARCHAR(MAX) NOT NULL
);
GO
答案 0 :(得分:2)
GUID作为主键的主要用途是在分布式系统中,您希望在客户端之间使用唯一ID,而无需往返于服务器/数据库的开销。
它们可能带来自己的问题,例如,如果用作集群密钥(可以通过适当的定期索引重建来缓解),则会出现碎片。
我不会使用SEQUENTIALID
;而是使用'梳子' GUID如果您想要订购。
答案 1 :(得分:1)
如果我理解正确,那么GUID并不总是表现良好,因为它不是索引的可排序字段。
sequentialid可以通过创建更好的可排序的GUID来克服这个问题,从而为您的表提供更好的索引。
我知道它比这更复杂,但我想尽可能简单地解释。
因此,如果您想使用GUID作为主键而不是我建议使用顺序ID。
你应该问问自己为什么你想要一个GUID作为主键,如果不需要,那就不要了。
答案 2 :(得分:-1)
GUID密钥在全球范围内是独一无二的。如果您希望钥匙在全球范围内独一无二,则应使用它们。例如,群集中的多个服务器,或在制图中使用地图。