Réindexer toutes les tables d'une base de données

Soyez le premier à donner votre avis sur cette source.

Snippet vu 18 589 fois - Téléchargée 18 fois

Contenu du snippet

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.

A voir également

Ajouter un commentaire

Commentaires

cs_Klimero
Messages postés
73
Date d'inscription
lundi 2 avril 2001
Statut
Membre
Dernière intervention
12 janvier 2010
-
Oui j'ai trouvé, c'est une histoire de collation : tu as mis des majuscules dans les noms des tables alors qu'il n'y en a pas. Ma base est sensible à la casse.
pneau
Messages postés
258
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
27 octobre 2010
3 -
salut,
cela fonctionne pour SQL 2000. Es tu sur de t'être positionner sur la base de donnée à réindexer ?
Ton utilisateur connecté a t il les droits nécessaires pour ce genre d'opération ?
cs_Klimero
Messages postés
73
Date d'inscription
lundi 2 avril 2001
Statut
Membre
Dernière intervention
12 janvier 2010
-
Marche pas sous SQL Serveur 2000, erreurs :

Serveur : Msg 208, Niveau 16, État 1, Ligne 7
'SysindexKeys' : nom d'objet incorrect.
Serveur : Msg 208, Niveau 16, État 1, Ligne 7
'SysIndexes' : nom d'objet incorrect.
Serveur : Msg 208, Niveau 16, État 1, Ligne 7
'SysColumns' : nom d'objet incorrect.
Serveur : Msg 208, Niveau 16, État 1, Ligne 7
'SysObjects' : nom d'objet incorrect.

Pour quelle version de SQL ce script a-t-il été écrit ?
dakos27
Messages postés
1
Date d'inscription
mardi 29 septembre 2009
Statut
Membre
Dernière intervention
21 décembre 2009
-
cool codes-sources
dymsbess
Messages postés
56
Date d'inscription
mercredi 29 septembre 2004
Statut
Membre
Dernière intervention
4 janvier 2010
1 -
Encore une vairante sous SQL Server 2005 qui réorganise ou reconstruit les index suivant un seuil défini sur le taux de défragementation : http://www.xoowiki.com/Article/SQL-Server/reorganisationreconstruction-index-sql-server-2005-148.aspx

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.