首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时使用NEWID或NEWSEQUENTIALID及其原因

何时使用NEWID或NEWSEQUENTIALID及其原因
EN

Stack Overflow用户
提问于 2016-10-26 07:35:47
回答 3查看 12.2K关注 0票数 3

我试图了解NewId和'NewSequentialId的实际使用情况,在创建这样的新表时通常使用Identity属性:

代码语言:javascript
复制
CREATE TABLE MYTABLE
(
    [ID]    INT             PRIMARY KEY IDENTITY,
    [NAME]  NVARCHAR(MAX)   NOT NULL
);
GO

上面的代码不是最佳实践吗?如果是这样的话,我是否应该用以下内容来替换它:

代码语言:javascript
复制
CREATE TABLE MYTABLE
(
    [ID]    UNIQUEIDENTIFIER PRIMARY KEY DEFAULT NEWID(),
    [NAME]  VARCHAR(MAX)    NOT NULL
);
GO

或者这样做:

代码语言:javascript
复制
CREATE TABLE MYTABLE
(
    [ID]    UNIQUEIDENTIFIER ROWGUIDCOL PRIMARY KEY DEFAULT NEWSEQUENTIALID(),
    [NAME]  nVARCHAR(MAX)   NOT NULL
);
GO

问题: NewId或NEWSEQUENTIALID是否是身份的替代品,如果不是何时使用?

我并不试图使用NewIdNewSequentialId作为Primary Key,上面的代码只是为了演示目的,也许这段代码更好一些:

代码语言:javascript
复制
CREATE TABLE MYTABLE
(
    [ID]        INT                 NOT NULL PRIMARY KEY,
    [ROWGUID]   UNIQUEIDENTIFIER    ROWGUIDCOL DEFAULT NEWSEQUENTIALID(),
    [NAME]      nVARCHAR(MAX)       NOT NULL
);
GO
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-26 07:42:42

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

它们可能会带来自己的问题,例如,如果将碎片用作集群键(可以通过适当的周期性索引重新构建来缓解这种问题)。

我不会使用SEQUENTIALID,而是使用“梳子”GUID,如果您想订购。

GUID作为主密钥的成本

票数 1
EN

Stack Overflow用户

发布于 2016-10-26 07:47:31

如果我对它的理解正确,GUID在性能上并不总是很好,因为它不是索引的可排序字段。

顺序and可以通过创建GUID来克服这个问题,GUID可以更好地排序,从而为您的表创建更好的索引。

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

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

你应该问问自己,如果不需要,为什么要用GUID作为主键,而不是不需要。

票数 2
EN

Stack Overflow用户

发布于 2016-10-26 07:52:14

GUID键在全世界都是独一无二的。如果你希望你的钥匙在世界范围内是独一无二的,就应该使用它们。例如,集群中的多个服务器,或地图绘制中的地图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40256318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档