Afficher tous les index dans une base de données SQL Server
Le SQL Server ne propose pas dans une seule table les informations sur les index de tables. Pour se faire, vous devez combinés plusieurs tables pour obtenir le résultat souhaité.
Voici une requête SQL permettant d'afficher tous les index contenu dans la base de données courante :
- SELECT i.[name] as NomIndex,
- SubString(column_names, 1, len(column_names)-1) as [Colonne],
- CASE
- WHEN i.[type] = 1 THEN 'Unite d''allocation d''index'
- WHEN i.[type] = 2 THEN 'Sans unite d''allocation unique d''index'
- WHEN i.[type] = 3 THEN 'Index XML'
- WHEN i.[type] = 4 THEN 'Index Spatial'
- WHEN i.[type] = 5 THEN 'Index d''Unite d''allocation columnstore'
- WHEN i.[type] = 6 THEN 'Sans unite d''allocation columnstore index'
- WHEN i.[type] = 7 THEN 'Sans unite d''allocation d''index hache'
- END AS TypeIndex,
- CASE WHEN i.is_unique = 1 THEN 'Unique'
- ELSE 'Pas unique' END AS [Unique],
- schema_name(t.schema_id) + '.' + t.[name] AS VueDeTable,
- CASE
- WHEN t.[type] = 'U' THEN 'Table'
- WHEN t.[type] = 'V' THEN 'Vue'
- END AS [TypeObject]
- FROM sys.objects t
- INNER JOIN sys.indexes i ON t.object_id = i.object_id
- CROSS APPLY (SELECT col.[name] + ', ' FROM sys.index_columns ic
- INNER JOIN sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id
- WHERE ic.object_id = t.object_id AND ic.index_id = i.index_id
- ORDER BY key_ordinal FOR XML PATH ('') ) D (column_names)
- WHERE t.is_ms_shipped <> 1 AND index_id > 0
- ORDER BY i.[name]
on obtiendra un résultat ressemblant a ceci :
Voir également
Dernière mise à jour : Vendredi, le 9 octobre 2020