假设一个表具有自动递增的标识,例如:
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/