SQL Server:使用SORT_IN_TEMPDB创建主键

时间:2018-03-21 03:31:41

标签: sql sql-server sql-server-2014

我正在开发一个项目,我需要在已经存在的各种表上创建几十个非聚簇索引,并且我在创建索引语句时使用了这个“WITH”子句:

CREATE NONCLUSTERED INDEX IX_blah_blah_blah 
ON prt.BlahBlah ([blahID])
WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = ON,
      IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON, ONLINE = ON, 
      ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90);

这些工作正常。

但是,在一个案例中,我有一个包含3M记录的表,但没有索引,也没有主键。我需要创建一个主键,所以我想运行这样的东西:

ALTER TABLE prt.AuditLog 
ADD CONSTRAINT PK_auditlog PRIMARY KEY NONCLUSTERED ([RecordID])
WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF,
      SORT_IN_TEMPDB = ON,      -- option NOT SUPPORTED for alter table
      IGNORE_DUP_KEY = OFF,
      DROP_EXISTING = ON,       -- option NOT SUPPORTED for alter table
      ONLINE = ON,              -- option NOT SUPPORTED for alter table
      ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90);

ALTER TABLE不支持“WITH”子句中的三个选项。

我可以在没有DROP_EXISTING的情况下生活,但我确实需要SORT_IN_TEMPDBONLINE选项。

我该如何完成这项工作?

我正在使用SQL Server 2014。

1 个答案:

答案 0 :(得分:1)

我找到了在这里设置Sort_IN_TempDB = ON的方法:

https://blog.sqlauthority.com/2018/02/20/sql-server-improve-index-rebuild-performance-enabling-sort-tempdb/

ALTER INDEX [IndexName] ON [SchemaName].[TableName]
REBUILD PARTITION = ALL WITH (SORT_IN_TEMPDB = ON)
GO