Badanie użycia indeksów w MSSQL
ŁF
Czasem może zajść potrzeba sprawdzenia, jak często używany jest dany indeks, bo np. przez lata zrobiło się ich dużo (w wyniku działań programistów nie-do-końca-wiedzących-co-robą), a wraz z przyrostem ilości danych optymalizator mógł zacząć korzystać z innych indeksów; teraz sprawdzić co się dzieje i usunąć indeksy zbędne. Poniższymi zapytaniami sprawdzisz m.in. jak często indeksy były przebudowywane i używane do operacji index seek/index scan.
SELECT OBJECT_NAME(A.[OBJECT_ID]) AS [OBJECT NAME],
I.[NAME] AS [INDEX NAME]
,A.leaf_insert_count
,A.leaf_update_count
,A.leaf_delete_count
,A.range_scan_count
,A.singleton_lookup_count
FROM SYS.DM_DB_INDEX_OPERATIONAL_STATS (NULL,NULL,NULL,NULL ) A
INNER JOIN SYS.INDEXES AS I
ON I.[OBJECT_ID] = A.[OBJECT_ID]
AND I.INDEX_ID = A.INDEX_ID
WHERE OBJECTPROPERTY(A.[OBJECT_ID],'IsUserTable') = 1 and OBJECT_NAME(A.[OBJECT_ID]) = 'tutaj nazwa tabeli, dla której chcesz sprawdzić wykorzystanie indeksów'
SELECT OBJECT_NAME(S.[OBJECT_ID]) AS [OBJECT NAME],
I.[NAME] AS [INDEX NAME],
USER_SEEKS,
USER_SCANS,
USER_LOOKUPS,
USER_UPDATES
FROM SYS.DM_DB_INDEX_USAGE_STATS AS S
INNER JOIN SYS.INDEXES AS I
ON I.[OBJECT_ID] = S.[OBJECT_ID]
AND I.INDEX_ID = S.INDEX_ID
WHERE OBJECTPROPERTY(S.[OBJECT_ID],'IsUserTable') = 1 and OBJECT_NAME(S.[OBJECT_ID]) = 'tutaj nazwa tabeli, dla której chcesz sprawdzić wykorzystanie indeksów'
Źródło: http://www.mssqltips.com/sqlservertip/1239/how-to-get-index-usage-information-in-sql-server/