Désactiver / Réactiver les index

Désactiver les index d’une table le temps d’un traitement, pour les réactiver ensuite est souvent payant, notamment lors d’insertion massive de lignes dans les tables. Voici quelques scripts pour faire ce travail…

1 – désactiver tous les index non sémantiques d’une base :


DECLARE @CMD NVARCHAR(max);
SET @CMD = '';
 
SELECT @CMD = @CMD + 'ALTER INDEX [' + i.name  
       + '] ON [' + s.name + '].[' + o.name + '] DISABLE;'  
       + CHAR(13) + CHAR(10)
FROM   sys.indexes AS i
       INNER JOIN sys.objects AS o
             ON i.object_id = o.object_id
       INNER JOIN sys.schemas AS s
             ON o.schema_id = s.schema_id
WHERE  i.is_primary_key = 0               -- pas les primary keys
  AND  i.is_unique = 0                    -- pas les index unique
  AND  i.is_unique_constraint = 0         -- pas les contraintes unique
  AND  i.is_hypothetical = 0              -- pas les index hypothétique  
  AND  i.index_id > 0                     -- pas les tables en HEAP
  AND  o.type_desc IN ('USER_TABLE',  
                       'VIEW');           -- uniquement les tables et les vues      
 
SELECT @CMD;                              -- pour verification
 
EXEC (@CMD);                              -- exécution du lot de commande

2 – réactiver les index désactivés par reconstruction avec un facteur de remplissage de 90


DECLARE @CMD NVARCHAR(max);
SET @CMD = '';
 
SELECT @CMD = @CMD + 'ALTER INDEX [' + i.name  
       + '] ON [' + s.name + '].[' + o.name  
       + '] REBUILD WITH (FILLFACTOR = 90);'  
       + CHAR(13) + CHAR(10)
FROM   sys.indexes AS i
       INNER JOIN sys.objects AS o
             ON i.object_id = o.object_id
       INNER JOIN sys.schemas AS s
             ON o.schema_id = s.schema_id
WHERE  i.is_disabled = 1;              
 
SELECT @CMD;                              -- pour verification
 
EXEC (@CMD);                              -- exécution du lot de commande

--------
Frédéric Brouard, SQLpro - ARCHITECTE DE DONNÉES, http://sqlpro.developpez.com/
Expert bases de données relationnelles et langage SQL. MVP Microsoft SQL Server
www.sqlspot.com : modélisation, conseil, audit, optimisation, tuning, formation
* * * * *  Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence  * * * * *

MVP Microsoft SQL Server

Laisser un commentaire