Sql server 2005 - lister les indexes avec le nombre de ligne de chacun

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 925 fois - Téléchargée 24 fois

Contenu du snippet

Sur la base des précédentes sources :
- http://www.sqlfr.com/code.aspx?ID=39938
- http://www.sqlfr.com/codes/SQL-SERVER-2005-RECUPERER-LISTE-INDEXES-EXISTANT-SUR_40066.aspx

Voila un exemple permettant de générer les requêtes de pour chaque index.

Source / Exemple :


----------------------------------------------------------------- 
USE [Strip3Prod] 
  
----------------------------------------------------------------- 
-- Spécification du champ qui doit être indexé 
----------------------------------------------------------------- 
DECLARE @NOM_CHAMP AS VARCHAR(50) 
SET @NOM_CHAMP = 'MonNomDeChamp' 
  
----------------------------------------------------------------- 
DECLARE @SQLRequest AS VARCHAR(MAX) 
DECLARE @SQL AS VARCHAR(MAX) 
  
----------------------------------------------------------------- 
-- Déclaration du Curseur de sélection 
----------------------------------------------------------------- 
DECLARE TESTCURSEUR CURSOR 
   FOR		SELECT 
	'SELECT '''+ IDX.name +''' AS INDEX_NAME, '''+ OBJ.name +''' AS OBJECT_NAME, '''+ COL.name +''' AS COLUMN_NAME, COUNT(DISTINCT ['+ COL.name +']) NB_ROWS FROM ['+ SCH.name +'].['+ OBJ.name +'] '

FROM sys.index_columns IDXC 
INNER JOIN sys.objects OBJ 
        ON IDXC.object_id = OBJ.object_id 
			--AND OBJ.name = 'Document')
INNER JOIN sys.schemas SCH 
        ON SCH.schema_id = OBJ.schema_id 
INNER JOIN sys.indexes IDX 
        ON (IDXC.object_id = IDX.object_id AND IDXC.index_id = IDX.index_id)
INNER JOIN sys.columns COL 
        ON (IDXC.column_id = COL.column_id AND OBJ.object_id = COL.object_id) 
WHERE 
    (OBJ.type = 'U' OR OBJ.type = 'V')
ORDER BY OBJ.name
  
----------------------------------------------------------------- 
-- Déclaration du Curseur sur la liste des Bases de données 
OPEN TESTCURSEUR 
FETCH NEXT FROM TESTCURSEUR INTO @SQLRequest
    
WHILE (@@FETCH_STATUS >= 0) 
    BEGIN 
         
        SET @SQL = @SQLRequest
		PRINT @SQL

--        EXECUTE (@SQL) 
  
        FETCH NEXT FROM TESTCURSEUR 
        INTO @SQLRequest 
    END 
  
----------------------------------------------------------------- 
-- Fermeture du Curseur 
CLOSE TESTCURSEUR 
   
-- Libération de la mémoire prise par le Curseur 
DEALLOCATE TESTCURSEUR 
  
-----------------------------------------------------------------

Conclusion :


Bon coding

Romelard Fabrice [MVP]

A voir également

Ajouter un commentaire

Commentaire

nivsql
Messages postés
159
Date d'inscription
lundi 22 juin 2009
Statut
Membre
Dernière intervention
14 décembre 2010
1 -
J'avous avoir du mal avec la pertinence de ce code, certe il fonctionne, mais le resultat obtenu me semble pauvre.

Ce code nous fait générer une requete par colonne se trouvant dans un index (n requete pour la meme colonne si elle se trouve dans n index) et nous donne le nombre de valeur distinct pour chaque colonne.

J'ai du mal a voir en quoi ces données sont utiles :
1) elles n'offre que peu de possibilité de calcul en ce qui concerne les statistiques de l'index
2) La maniere d'optenir celles-ci est fort complexe alors que les vues de gestion dynamique offrent beaucoup plus d'informations, plus utiles, incluant celles que l'ont peut déduir de celles que nous donne ce code, le tout à l'aide une requete sql unique (a l'aide d'une CTE dans les cas les plus difficiles).

Pourrais tu a l'occasion expliqué plus en détail les buts et interets de ce code ?

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.