Atualmente, tenho uma tabela bastante grande (5-7 milhões de linhas). Esta tabela é reconstruída regularmente por um procedimento que constrói os dados em uma tabela intermediária e, em seguida, alterna os dados para a tabela de produção usando a ALTER TABLE .. SWITCH TO ..
instrução
Exemplo:
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;
Quando essa operação é executada, o estado atual dos índices (ou dados do índice, se você desejar) também é alterado? Estou perguntando por 2 razões:
1) Para executar uma SWITCH TO
instrução, um requisito é que a tabela de origem e destino deva conter índices idênticos. Isso me leva a acreditar que os dados do índice também podem ser alterados, mas não sei como verificar isso.
2) O principal benefício de criar a tabela dessa maneira é evitar a execução de trabalho excessivo na tabela de produção enquanto estiver em uso. Naturalmente, ficaria muito feliz se eu fosse capaz de reconstruir índices na tabela de preparação e fazer com que os índices reconstruídos fossem alternados para os índices de produção junto com a tabela.
fonte