Voici une petite requête qui permet de lister les colonnes de tous les index d’une base de données, avec leur type et l’ordre des colonnes dans la clé de l’index :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ------------------------------- -- Nicolas SOUQUET - 08/03/2010 ------------------------------- -- SQL Server 2005 et 2008 SELECT T.name AS nom_table , I.type_desc AS type_index , I.name AS nom_index , C.name AS nom_colonne , IC.key_ordinal AS position_colonne , IC.is_included_column AS is_included FROM sys.tables AS T INNER JOIN sys.indexes AS I ON T.object_id = I.object_id INNER JOIN sys.index_columns AS IC ON I.object_id = IC.object_id AND I.index_id = IC.index_id INNER JOIN sys.columns AS C ON IC.object_id = C.object_id AND IC.column_id = C.column_id --WHERE T.name = 'maTable' ORDER BY T.name, I.name, IC.key_ordinal |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ------------------------------- -- Nicolas SOUQUET - 20/07/2010 ------------------------------- -- SQL Server 2000 SELECT T.name AS table_name , I.name AS index_name , CASE I.indid WHEN 1 THEN 'CLUSTER' ELSE 'NON-CLUSTER' END AS index_type , C.name AS column_name , IK.keyno AS index_key_col_pos FROM sysindexes AS I INNER JOIN sysobjects AS T ON I.id = T.id INNER JOIN sysindexkeys AS IK ON I.id = IK.id AND I.indid = IK.indid INNER JOIN syscolumns AS C ON IK.id = C.id AND IK.colid = C.colid WHERE T.type = 'U' AND I.name NOT LIKE '%_!WA!_Sys!_%' ESCAPE '!' AND I.indid > 0 ORDER BY T.name, I.name |
Bonne indexation !
ElSuket