SQL标识规范的目的是什么

Mr.*_*ibs 0 t-sql sql-server

想象一下,我有一个这样的表:

CREATE TABLE [dbo].[Things](
    [Id] [uniqueidentifier] NOT NULL DEFAULT (newId()),
    [ThingName] [nvarchar](100) NOT NULL,
    [ThingCode] [int] NOT NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

如果我将Id列设为Identity,那么支持它会更难.是否有任何性能因素或任何让我改变主意的事情?

谢谢,

Mit*_*eat 6

性能考虑:是的.甲唯一标识符(GUID)列是细作为主键,但不是作为聚簇索引.在将在范围搜索中使用的列上创建聚簇索引,并在GUID列上创建非聚集索引.

uniqueidentifier(GUID)列使用16个字节,因此使用的存储空间更高(数据库页面上的行数更少),数据传输所消耗的带宽更高.

GUID作为主键(通过int或使用bigint)的主要用途是能够在中间应用程序层中分配这些内容而无需往返数据库,同时仍避免键冲突.

如果你需要的是一个大于int的键范围(4bytes,2 31 - 1)那么使用一个bigint(8字节),它支持2 63 - 1行(对于大多数应用程序来说已经足够了)