begin process at 2010 07 29 22:20:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fonctions

 > RÉINDEXER TOUTES LES TABLES D'UNE BASE DE DONNÉES

RÉINDEXER TOUTES LES TABLES D'UNE BASE DE DONNÉES


 Information sur la source

Note :
Aucune note
Catégorie :Fonctions Classé sous :SQL SERVER, REINDEX, DBCC, TABLES Niveau :Initié Date de création :16/11/2007 Vu :8 738

Auteur : pneau

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note


 Description

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

  • -- 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
-- 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.



 Sources du même auteur

Source avec Zip DUMP LOAD D'UNE BASE DE DONNÉES
Source avec Zip REQUETES DE DÉSACTIVATION ET DE RÉACTIVATIONS DES CONTRAINTE...

 Sources de la même categorie

Source avec Zip CALCUL UNE DIFFÉRENCE DE DATE EN FONCTION DE JOURS FÉRIÉS/TR... par Sieurcoug
Source avec Zip CONVERSION DE NOMBRE EN LETTRES (SQL) par wormlore
NO HTML BALISE [MYSQL] par abdoulax
MYSQL : FONCTION POUR GÉRER DES COMPTEURS ÉQUIVALENT AUX SÉQ... par maitredede
Source avec une capture SQL SERVER - TRANSMISSION D'UN PARAMETRE A VALEURS MULTIPLES par FENETRES

 Sources en rapport avec celle ci

Source avec Zip (SQL SERVER) REQUÊTE POUR RECHERCHER UN {GUID} DANS TOUS LES... par lassaad83
CRÉATION D'UNE BASE DE DONNÉE AVEC FICHIER DE DONNÉES, JOURN... par fearmaker
Source avec Zip REQUETES DE DÉSACTIVATION ET DE RÉACTIVATIONS DES CONTRAINTE... par pneau
SQL SERVER : VÉRIFICATION DE L'ESPACE LIBRE SUR LE SERVEUR par skweeky
SQL SERVER - PROCÉDURE STOCKÉE PERMETTANT DE DEFRAGMENTER TO... par fabrice69

Commentaires et avis

Commentaire de FENETRES le 19/11/2007 15:09:05

Mettre l'instruction PRINT en commentaire !

Commentaire de pneau le 19/11/2007 15:11:30

salut "Fenetres"
euh... pourquoi ???
elle gene ?
Elle permet de visualiser les requetes lancées ....
cordialement

Commentaire de fabrice69 le 11/12/2007 16:41:17 administrateur CS

Bonjour,

Une autre variante est ici :
- http://www.sqlfr.com/codes/SQL-SERVER-PROCEDURE-STOCKEE-PERMETTANT-RECONSTRUIRE-TOUS-INDEXES_35836.aspx

Cordialement
Romelard Fabrice [MVP]

Commentaire de dymsbess le 10/06/2009 09:54:59

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

Commentaire de dakos27 le 21/12/2009 19:17:17

cool codes-sources

Commentaire de Klimero le 12/01/2010 15:45:18

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 ?

Commentaire de pneau le 12/01/2010 15:59:14

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 ?

Commentaire de Klimero le 12/01/2010 16:11:22

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.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Nom de table !? [ par jimmy69 ] Bonjour a tous,Je suis en train de realiser un p'tit projet en php avec sql serveur 2000 !J'ai une p'tite question a vous poser !je suis en train de c liste des tables [ par Mouffi ] Bonjour,Je voudrais recuperer le nom des tables d'une base SQl serveur 2000 depuis un programme vb.netmerci d'avance Afficher les tables d'une ou plusieurs bases [ par Rouk ] Bonjour,Je developpe en vb.net avec une connexion a une base Sql.Je souhaiterai afficher dans une ComboBox la liste de base Sql et suite a cela affich Selection de tables [ par Rouk ] Bonjour,je debeloppe en vb.net un datagrid alimente par une base sqlje voudrai faire une selection des tables que j'affiche dans le datagrid.SELECT comment faire une association CIM [ par raziel62 ] Salut,j'ai un probleme sur ma base de donnée qui gere des composants hardware, je n'arrive pas a relier deux tables (constructeur et type_composant).j 2 liens entre 2 tables [ par fstyle ] Bonjour/soirJe suis en train de créer un système pour gérer ma comptabilité ...et je suis devant un problème !Dans mon mld, il y a 2 tables : t_compta Sql et disparition de valeurs [ par sky_striker ] Bonjour dans mon programme j'utilise un champ particulier dans mes tables que j'ai appellé la valeur inconnue.Cette valeur porte l'id 0 dans toute mes Probléme de Requéte ( surement simple ) [ par ITALIA ] Je developpe actuellement un programme en vb6 attaquant une base Access 97...et j'ai un souci avec une requête SQL.J'ai deux tables PPM liaison de données dans SQL Server [ par titoune76 ] Comment faire dans SQL Server pour créer une vue selectionnant plusieurs champs de plusieurs tables (jusque la pas de pb), ces tables se situant faire une insertion sur plusieures tables [ par tenrod ] bijour!je voudrais savoir si il est possible d'effectuer un insert sur plusieures tables du genre:insert into latable1, latable2, latable3...values va


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales