Al momento ho una tabella piuttosto grande (5-7 milioni di righe). Questa tabella viene ricostruita regolarmente da una procedura che crea i dati in una tabella di gestione temporanea, quindi passa i dati alla tabella di produzione utilizzando l' ALTER TABLE .. SWITCH TO ..
istruzione.
Esempio:
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 viene eseguita questa operazione, viene commutato anche lo stato corrente degli indici (o dei dati dell'indice, se lo desideri)? Sto chiedendo per 2 motivi:
1) Per eseguire SWITCH TO
un'istruzione, un requisito è che sia la tabella di origine che quella di destinazione debbano contenere indici identici. Questo mi porta a credere che anche i dati dell'indice potrebbero essere scambiati, ma non so come verificarlo.
2) Il vantaggio principale di costruire il tavolo in questo modo è quello di evitare di eseguire lavori eccessivi sul tavolo di produzione durante l'uso. Naturalmente, sarei molto felice se fossi in grado di ricostruire gli indici sulla tabella di gestione temporanea e se gli indici ricostruiti fossero passati agli indici di produzione insieme alla tabella.