Jag har skript som jag använder för att fråga systemtabellerna för att fånga alla icke-klustrade index och inaktivera och sedan bygga om det när det är klart. Nedanstående är för användning på standardutgåvan, om du är på företag skulle jag lägga till ONLINE
alternativ.
Inaktivera
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)
Bygg om
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);
Jag gillar den här metoden eftersom den är väldigt anpassningsbar eftersom du kan utesluta/inkludera vissa tabeller baserat på villkoren samt undvika en markör. Du kan också ändra EXEC
till en PRINT
och se koden som kommer att köras och köras manuellt.
Villkor för att utesluta en tabell
AND o.name NOT IN ('tblTest','tblTest1');