何时使用NEWID或NEWSEQUENTIALID以及为什么

问题描述 投票:3回答:3

我试图理解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的替代品,如果不是何时使用每个身份?

我不是试图使用NewIdNewSequentialId作为Primary Key,上面的代码仅用于演示目的,也许这个代码更好像这样:

CREATE TABLE MYTABLE
(
    [ID]        INT                 NOT NULL PRIMARY KEY,
    [ROWGUID]   UNIQUEIDENTIFIER    ROWGUIDCOL DEFAULT NEWSEQUENTIALID(),
    [NAME]      nVARCHAR(MAX)       NOT NULL
);
GO
sql sql-server database tsql database-design
3个回答
2
投票

GUID作为主键的主要用途是在分布式系统中,您希望在客户端之间使用唯一ID,而无需往返服务器/数据库的开销。

它们可能带有自己的问题,例如,如果用作集群密钥(可以通过适当的定期索引重建来缓解),则会出现碎片问题。

我不会用SEQUENTIALID;如果您想要订购,请使用'Comb'GUID。

The Cost of GUIDs as Primary Keys


1
投票

如果我理解它正确,那么GUID并不总是表现良好,因为它不是索引的可排序字段。 sequentialid可以通过创建更好的可排序GUID来克服这个问题,从而为您的表提供更好的索引。

我知道它比这复杂一点,但我想尽可能简单地解释。

因此,如果您想使用GUID作为主键,而不是我建议使用sequentialID。

您应该问问自己为什么要将GUID作为主键,如果不需要,则不要。


-1
投票

GUID键在全球范围内是独一无二如果您希望钥匙在全球范围内独一无二,则应使用它们。例如,群集中的多个服务器,或在制图中使用地图。

© www.soinside.com 2019 - 2024. All rights reserved.