假设一个表具有自动递增的标识,例如:

CREATE TABLE [dbo].[Category]
(
    [CategoryId] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [Title] NVARCHAR(50) NOT NULL,
    [Description] NVARCHAR(128) NULL
)

由于自动增量PK使表固有地排序,这是否意味着我应该将CategoryId设置为Non Clustered,然后在其他两列CREATE CLUSTERED INDEX [IX_Category_Column] ON [dbo].[JobCategory] ([Title], [Description])上创建聚集索引?

最佳答案

默认情况下,PRIMARY KEY在该PK列上创建一个clustered index,而该索引存储的是物理排序顺序,而不是我相信的IDENTITY列。

因此,如果需要,您应该在其余列上创建Non-clustered索引。

如果您打算在过滤条件或联接条件等条件下使用这些列,则其他列上的索引无疑将有助于提高查询性能。在这种情况下,它将执行索引扫描而不是表扫描。要体验相同的结果,请运行一个查询,该查询涉及处于这种状态的其他列,并带有或不带有索引。获取实际的查询执行计划并亲自查看。

关于sql - 身份主键是否应该始终非集群?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44609622/

10-09 00:58