我试图理解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
GUID作为主键的主要用途是在分布式系统中,您希望在客户端之间使用唯一ID,而无需往返服务器/数据库的开销。
它们可能带有自己的问题,例如,如果用作集群密钥(可以通过适当的定期索引重建来缓解),则会出现碎片问题。
我不会用SEQUENTIALID
;如果您想要订购,请使用'Comb'GUID。
如果我理解它正确,那么GUID并不总是表现良好,因为它不是索引的可排序字段。 sequentialid可以通过创建更好的可排序GUID来克服这个问题,从而为您的表提供更好的索引。
我知道它比这复杂一点,但我想尽可能简单地解释。
因此,如果您想使用GUID作为主键,而不是我建议使用sequentialID。
您应该问问自己为什么要将GUID作为主键,如果不需要,则不要。
GUID键在全球范围内是独一无二如果您希望钥匙在全球范围内独一无二,则应使用它们。例如,群集中的多个服务器,或在制图中使用地图。