Удаление кластеризованного ПК с созданием кластерного индекса - PullRequest
0 голосов
/ 24 августа 2018

У меня есть таблица 99GB + строки 800GB (и другие таблицы сопоставимого размера). Я хочу удалить существующий кластеризованный PK (воссоздать как некластеризованный) и создать новый кластеризованный индекс. Это для настройки производительности. Ознакомившись с настройкой и индексированием производительности, я пришел к выводу, что наилучшим выбором может быть воссоздание кластерного индекса по дате, столбец Id (идентификатор). Он будет реорганизовывать таблицу логическим образом с меньшим количеством операций чтения и ввода-вывода.

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), поскольку это позволяет избежать перестройки NCI во время удаления / создания CI. Однако это все еще занимает около 1,5 часов, чтобы завершить операцию.

Есть ли быстрее достичь этого?

...