У меня в настоящее время довольно большая таблица (5-7 миллионов строк). Эта таблица регулярно перестраивается с помощью процедуры, которая создает данные в промежуточной таблице, а затем переключает данные в рабочую таблицу с помощью ALTER TABLE .. SWITCH TO ..
оператора.
Пример:
BEGIN TRAN;
-- Rebuild indexes
ALTER INDEX IX_NC_GroupEvent_staging_GroupName on [dbo].[GroupEvent_staging]
REBUILD;
ALTER INDEX IX_NC_GroupEvent_staging_Created ON [dbo].[GroupEvent_staging]
REBUILD;
-- Empty production table
TRUNCATE TABLE [dbo].[GroupEvent];
-- Switch data from staging-table into production table
ALTER TABLE [dbo].[GroupEvent_staging] SWITCH TO [dbo].[GroupEvent]
COMMIT;
Когда эта операция выполняется, переключается ли текущее состояние индексов (или данных индекса, если хотите)? Я спрашиваю по двум причинам:
1) Для выполнения SWITCH TO
оператора необходимо, чтобы исходная и целевая таблицы содержали идентичные индексы. Это наводит меня на мысль, что индексные данные также могут быть переключены, но я не знаю, как это проверить.
2) Основным преимуществом построения стола таким образом является предотвращение чрезмерной работы на рабочем столе во время использования. Естественно, я был бы очень рад, если бы мне удалось перестроить индексы на промежуточной таблице и перевести перестроенные индексы на производственные индексы вместе с таблицей.
источник