J'ai un script que j'utilise pour interroger les tables système afin de capturer tous les index non clusterisés et de désactiver puis de reconstruire à la fin. Le ci-dessous est à utiliser sur l'édition standard, si vous êtes en entreprise, j'ajouterais le ONLINE
option.
Désactiver
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)
Reconstruire
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);
J'aime cette méthode car elle est très personnalisable car vous pouvez exclure/inclure certaines tables en fonction des conditions tout en évitant un curseur. Vous pouvez également modifier le EXEC
à un PRINT
et voir le code qui va s'exécuter et l'exécuter manuellement.
Condition pour exclure une table
AND o.name NOT IN ('tblTest','tblTest1');