Удаление составного ПК и добавление нового индекса невероятно медленно
В настоящее время у меня есть составной PK (кластеризованный), состоящий из 3 столбцов, назовем их A, B и C, все это необходимо для обеспечения уникальности. Из-за внешних факторов мне нужно изменить эту таблицу, удалив текущий PK и добавив новый индекс для нового столбца.
Это сделано по стандарту
ALTER TABLE Table_Name DROP CONSTRAINT PK_Name
CREATE INDEX Index_Name ON Table_Name (NewColumn)
Проблема состоит в том, что таблица огромна (около 70 миллионов строк), и выполняется удаление текущего PK, а затем добавление нового индекса занимает более часа. Есть ли способ исправить ситуацию более эффективным способом?
Таблица имеет только составной PK, поэтому не нужно беспокоиться о NCI, FK и других зависимостях. Я работаю на SQL Server 2008.
1 ответ
Один из вариантов - создать новую таблицу с правильными ограничениями. Затем вы копируете все строки. В конце вы отбрасываете старый стол и sp_rename
новый. Переименование происходит быстро, что сокращает время простоя.
Возможно, вам придется подумать о строках, которые добавляются во время операции копирования. Один из способов справиться с этим - переименовать в старую таблицу, а затем скопировать все новые строки, и только после этого переименовать новую таблицу. Это по-прежнему приводит к гораздо более короткому времени простоя, чем изменение таблицы на месте.