У меня есть таблица с кластерным индексом по двум столбцам - первичный ключ для таблицы.
Он определяется следующим образом:
ALTER TABLE Table ADD CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED
(
[ColA] ASC,
[ColB] ASC
)WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
Я хочу удалить этот кластеризованный индекс PK и добавить кластеризованный индекс, как показано ниже, и добавить ограничение первичного ключа, используя некластеризованный индекс, также показанный ниже.
CREATE CLUSTERED INDEX [IX_Clustered] ON [Table]
(
[ColC] ASC,
[ColA] ASC,
[ColD] ASC,
[ColE] ASC,
[ColF] ASC,
[ColG] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, FILLFACTOR = 90, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = OFF) ON [PRIMARY]
ALTER TABLE Table ADD CONSTRAINT
PK_Table PRIMARY KEY NONCLUSTERED
(
ColA,
ColB
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Я собирался просто удалить кластеризованный индекс PK, затем добавить новый кластеризованный индекс и затем добавить некластеризованный индекс первичного ключа, но я узнал, что удаление существующего кластеризованного индекса приведет к переупорядочению данных таблицы (см. ответ здесь Что происходит, когда я отбрасываю кластеризованный первичный ключ в SQL 2005 ), что я не считаю необходимым. Стол сбивает 1 ТБ, поэтому я очень хочу избежать ненужного переупорядочения.
Мой вопрос: как лучше всего перейти от существующей структуры к желаемой структуре?
РЕДАКТИРОВАТЬ: Просто хочу уточнить. Таблица составляет 1 ТБ, и у меня, к сожалению, нет места для создания временной таблицы. Если есть способ сделать это без создания временной таблицы, пожалуйста, дайте мне знать.