Ho uno script che utilizzo per interrogare le tabelle di sistema per acquisire tutti gli indici non cluster e disabilitare quindi ricostruire al termine. Quanto segue è per l'uso sull'edizione standard, se sei in azienda aggiungerei il ONLINE
opzione.
Disattiva
DECLARE @sql AS VARCHAR(MAX);
SET @sql = '';
SELECT
@sql = @sql + 'ALTER INDEX [' + i.name + '] ON [' + o.name + '] DISABLE; '
FROM sys.indexes AS i
JOIN sys.objects AS o ON i.object_id = o.object_id
WHERE i.type_desc = 'NONCLUSTERED'
AND o.type_desc = 'USER_TABLE'
EXEC (@sql)
Ricostruisci
DECLARE @sql AS VARCHAR(MAX);
SET @sql = '';
SELECT
@sql = @sql + 'ALTER INDEX [' + i.name + '] ON [' + o.name + '] REBUILD WITH (FILLFACTOR = 80); '
FROM sys.indexes AS i
JOIN sys.objects AS o ON i.object_id = o.object_id
WHERE i.type_desc = 'NONCLUSTERED'
AND o.type_desc = 'USER_TABLE'
EXEC (@sql);
Mi piace questo metodo in quanto è molto personalizzabile in quanto puoi escludere/includere determinate tabelle in base alle condizioni ed evitare un cursore. Inoltre puoi cambiare il EXEC
a un PRINT
e vedere il codice che verrà eseguito ed eseguirlo manualmente.
Condizione per escludere una tabella
AND o.name NOT IN ('tblTest','tblTest1');