SQL : Index usage


Cette requête permet de trouver les index non utilisés d'une base de données.

UserScan : Le nombre de fois que l'index a été scanné, mais non utilisé
UserSeek : Le nombre de fois que l'index a été utilisé pour répondre à une requête
UserLookup : Le nombre de fois que l'index a été utilisé par un autre index.
UserUpdates : Le nombre de fois qu'un index a été mis à jour.


SELECT  OBJECT_NAME (s.object_id) AS TableName
i.name AS IndexName,
i.type_desc AS IndexType,
s.user_seeks AS UserSeeks,
s.user_scans AS UserScans,
CASE 
s.user_seeks WHEN 0 THEN 0
ELSE 
s.user_seeks * 100 / (s.user_scans + s.user_seeks) END AS SeekPercentage,
CASE 
s.user_scans WHEN 0 THEN 0
ELSE 
s.user_scans * 100 / (s.user_scans + s.user_seeks) END AS ScanPercentage,
s.user_lookups AS UserLookups,
s.user_updates AS UserUpdates

FROM sys.dm_db_index_usage_stats s
INNER JOIN 
sys.indexes i
ON 
s.[OBJECT_ID] = i.[OBJECT_ID] AND s.index_id = i.index_id

WHERE DB_NAME (s.database_id) = db_name()
AND i.type != 0
AND user_scans != 0
AND OBJECTPROPERTY (s.object_id'IsUserTable') = 1

ORDER BY ScanPercentage DESC, UserScans DESC, UserSeeks ASC, UserUpdates ASC

Previous
« Prev Post