Jeg har et script, som jeg bruger til at forespørge systemtabellerne for at fange alle ikke-klyngede indekser og deaktivere og derefter genopbygge efter færdiggørelse. Nedenstående er til brug på standardudgaven, hvis du er på virksomhed vil jeg tilføje ONLINE
mulighed.
Deaktiver
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)
Genopbyg
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);
Jeg kan godt lide denne metode, da den er meget tilpasselig, da du kan udelukke/inkludere visse tabeller baseret på betingelserne samt undgå en markør. Du kan også ændre EXEC
til en PRINT
og se koden, der vil køre og køre den manuelt.
Betingelse for at ekskludere en tabel
AND o.name NOT IN ('tblTest','tblTest1');