当我已经有了合适的唯一聚集索引时,为什么 PK 约束需要单独的索引?

sha*_*oth 2 index sql-server primary-key azure-sql-database

这是此处表定义的一部分:

CREATE TABLE [dbo].[JobItems] (
[ItemId]            UNIQUEIDENTIFIER NOT NULL,
-- lots of other columns
CONSTRAINT [PrimaryKey_GUID_HERE] PRIMARY KEY NONCLUSTERED ([ItemId] ASC)
);

CREATE UNIQUE CLUSTERED INDEX [JobItemsIndex]
ON [dbo].[JobItems]([ItemId] ASC);
Run Code Online (Sandbox Code Playgroud)

这是一些遗留设计,所以请不要问“为什么”。无论如何,当我查找索引列表时,我看到有两个索引 - 其中一个是JobItemsIndex,另一个是PK-GUID-HERE,它们都用于JobItems表。

我的问题是...

为什么需要一个单独的索引来维护 PK,当我已经拥有JobItemsIndex它是唯一的并且包含非常相同的列并且适合维护 PK 约束时?

Rob*_*ley 6

它不需要单独的索引。之所以这样做,是因为您实际上已经告诉它在脚本中。您可以使用相同的功能执行此操作:

CREATE TABLE [dbo].[JobItems] (
[ItemId]            UNIQUEIDENTIFIER NOT NULL,
-- lots of other columns
CONSTRAINT [JobItemsIndex] PRIMARY KEY CLUSTERED ([ItemId] ASC)
);
Run Code Online (Sandbox Code Playgroud)