我试图了解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是否是身份的替代品,如果不是何时使用?
我并不试图使用NewId或NewSequentialId作为Primary Key,上面的代码只是为了演示目的,也许这段代码更好一些:
CREATE TABLE MYTABLE
(
[ID] INT NOT NULL PRIMARY KEY,
[ROWGUID] UNIQUEIDENTIFIER ROWGUIDCOL DEFAULT NEWSEQUENTIALID(),
[NAME] nVARCHAR(MAX) NOT NULL
);
GO发布于 2016-10-26 07:42:42
在分布式系统中,主要使用GUID作为主键,您希望在客户机之间使用唯一的is,而不需要往返到服务器/数据库的开销。
它们可能会带来自己的问题,例如,如果将碎片用作集群键(可以通过适当的周期性索引重新构建来缓解这种问题)。
我不会使用SEQUENTIALID,而是使用“梳子”GUID,如果您想订购。
GUID作为主密钥的成本
发布于 2016-10-26 07:47:31
如果我对它的理解正确,GUID在性能上并不总是很好,因为它不是索引的可排序字段。
顺序and可以通过创建GUID来克服这个问题,GUID可以更好地排序,从而为您的表创建更好的索引。
我知道这比这要复杂一些,但我想尽可能简单地解释。
因此,如果您想使用GUID作为主键,我建议使用sequentialID。
你应该问问自己,如果不需要,为什么要用GUID作为主键,而不是不需要。
发布于 2016-10-26 07:52:14
GUID键在全世界都是独一无二的。如果你希望你的钥匙在世界范围内是独一无二的,就应该使用它们。例如,集群中的多个服务器,或地图绘制中的地图。
https://stackoverflow.com/questions/40256318
复制相似问题