删除集群PK创建集群索引

时间:2018-08-24 17:17:50

标签: sql-server indexing clustered-index

我有一个99mm +行800GB的表(以及其他类似大小的表)。我想删除现有的集群PK(重新创建为非集群)并创建一个新的集群索引。这用于性能调整。 阅读了性能调整/索引之后,我得出的结论是,按日期重新创建聚簇索引,Id(标识)列可能是最好的选择。它将以较少读取和IO的逻辑方式重新组织表。

ALTER TABLE [dbo].[Adventure_works] DROP CONSTRAINT [PK_ADV]
GO

ALTER TABLE [dbo].[Adventure_works] ADD  CONSTRAINT [PK_ADV] PRIMARY KEY NONCLUSTERED 
(
[id] ASC,
[leg_id] ASC,
[category] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

CREATE CLUSTERED INDEX [IX_Adv_date_id] ON dbo.[Adventure_works](
[biz_date] asc,
[id] asc
)

在执行上述步骤之前,我还要删除所有其他非聚集索引(NCI),因为这样可以避免在删除/创建CI时重建NCI。 但是,仍然需要1.5个小时才能完成操作。

是否可以更快地实现这一目标?

0 个答案:

没有答案