Tengo una secuencia de comandos que uso para consultar las tablas del sistema para capturar todos los índices no agrupados y deshabilitarlos y luego reconstruirlos al finalizar. Lo siguiente es para usar en la edición estándar, si está en la empresa, agregaría ONLINE
opción.
Deshabilitar
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)
Reconstruir
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);
Me gusta este método porque es muy personalizable, ya que puede excluir/incluir ciertas tablas según las condiciones, así como evitar un cursor. También puedes cambiar el EXEC
a un PRINT
y ver el código que se ejecutará y ejecutarlo manualmente.
Condición para excluir una tabla
AND o.name NOT IN ('tblTest','tblTest1');