lors d'insertions ou de suppressions multiples dans une base de données, reconstruire les index d'une table permet d'améliorer les performances.
ce bout de script permet de charger l'ensemble des tables utilisateurs de la base possédant un index et de lancer la commande DBCC REINDEX
Source / Exemple :
-- Varibale pour stocker le nom de la table
Declare @NomTable VarChar(100)
-- Variable pour stocker la requete de réindexation
Declare @Requete VarChar(5000)
-- Curseur listant toutes les tables utilisateurs de la base possédant un index
Declare LstTable Cursor For
Select Distinct SysObjects.Name
From SysindexKeys
Inner Join SysIndexes On SysindexKeys.IndID = SysIndexes.IndId
Inner Join SysColumns On SysindexKeys.ColID = SysColumns.ColID
Inner Join SysObjects On SysindexKeys.ID = SysObjects.ID
and SysObjects.xtype = 'U'
And Syscolumns.ID = SysObjects.ID And SysObjects.ID = SysIndexes.ID
Where SysIndexes.Status & 8388608 = 0
Order By SysObjects.Name
-- Ouverture du curseur
Open LstTable
Fetch Next From LstTable Into @NomTable
While @@Fetch_status = 0
Begin
Set NoCount ON
-- Parcours du curseur et exécution de la requete pour chaque table
-- Les options de DBCC DBREINDEX peuvent être ajustées suivant les besoins. CF (Syntaxe de la commande)
Set @Requete = 'DBCC DBREINDEX (' + @NomTable + ','''',0)'
Print @NomTable
Exec (@Requete)
Set NoCount OFF
Fetch Next From LstTable Into @NomTable
End
Close LstTable
Deallocate LstTable
Conclusion :
perso, j'exécute ce traitement régulièrement sur les bases de données pour éviter la dégradation des perf liées à des index morcelés.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.