У меня есть таблица с кластеризованным индексом в двух столбцах - первичный ключ для таблицы. Она определяются следующим образом:Лучший способ изменения кластеризованного индекса (PK) в SQL 2005
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 кластерного индекс, а затем добавить новый кластерный индекс, а затем добавить некластеризованный индекс первичного ключа, но я узнал, что сбросив существующий кластерный индекс может вызвать данные таблицы в быть переупорядоченным (см. ответ здесь What happens when I drop a clustered primary key in SQL 2005), который я не думаю, что это необходимо. Стол сбивает 1 ТБ, поэтому я действительно хочу избежать ненужного переупорядочения.
Вопрос: какой лучший способ перейти от существующей структуры к требуемой структуре?
EDIT: Просто хочу уточнить. Таблица 1TB, и у меня, к сожалению, нет места для создания временной таблицы. Если есть способ сделать это, не создавая таблицу temp, то, пожалуйста, дайте мне знать.
Это не вариант. У меня есть таблица 1 ТБ на 1,5 Тбайт RAID. –
SQL Server потребуется пространство как для переупорядочения, так и для перемещения. Если вы находитесь вне места, вы можете использовать опцию MOVE TO в DROP INDEX, чтобы создать таблицу на временном хранилище, а затем снова создать ее на своем RAID-массиве. – Quassnoi
Вы можете перенести строки в куски, удалив их из источника, когда идете. Тем не менее, это будет очень медленный процесс. –