Indeksy w bazie danych stosuje się w celu zwiększenia prędkości wykonywania zapytań na tabeli. Można je porównać do spisu treści w książce – zamiast kartkować całą książkę dla znalezienia jednej interesującej nas informacji, możemy zajrzeć do spisu treści i dzięki niemu szybko odnaleźć stronę, na której znajduje się to, czego szukamy. Dzięki temu oszczędzamy czas i zasoby serwera (przede wszystkim liczbę odczytów stron danych). Indeksy powinny być na bieżąco konserwowane, gdyż złe zarządzanie nimi może zamiast skrócić czas wykonywania zapytań – wydłużyć go. Oprócz tego w tabelach często istnieją indeksy, które tworzone są na „czuja” i nie pokrywają tego czego szukamy. Te indeksy powinno się usuwać – sposób na wykrycie nieużywanych indeksów znajduje się w dalszej części wpisu.
Sposób 1:


SELECT
      ind.Index_id,
      obj.Name as TableName,
      ind.Name as IndexName, 
      ind.Type_Desc, 
      indUsage.user_seeks, 
      indUsage.user_scans, 
      indUsage.user_lookups, 
      indUsage.user_updates, 
      indUsage.last_user_seek, 
      indUsage.last_user_scan,
      'drop index [' + ind.name + '] ON [' + obj.name + ']' as DropCommand
FROM
      sys.Indexes as ind JOIN Sys.Objects as obj on ind.object_id=obj.Object_ID
      LEFT JOIN  sys.dm_db_index_usage_stats indUsage 
            ON 
                  ind.object_id = indUsage.object_id 
                  AND ind.Index_id=indUsage.Index_id
WHERE
      ind.type_desc<>'HEAP' and obj.type<>'S'
      AND objectproperty(obj.object_id,'isusertable') = 1
      AND (isnull(indUsage.user_seeks,0)=0 AND isnull(indUsage.user_scans,0)=0 and isnull(indUsage.user_lookups,0)=0)
order by obj.name,ind.Name

Sposób 2:


DECLARE @dbid INT
SELECT @dbid = DB_ID(DB_NAME())
SELECT OBJECTNAME = OBJECT_NAME(I.OBJECT_ID),
                    INDEXNAME = I.NAME,
                    I.INDEX_ID
FROM SYS.INDEXES I
JOIN SYS.OBJECTS O ON I.OBJECT_ID = O.OBJECT_ID
WHERE OBJECTPROPERTY(O.OBJECT_ID,'IsUserTable') = 1
AND   I.INDEX_ID NOT IN (

SELECT S.INDEX_ID
FROM SYS.DM_DB_INDEX_USAGE_STATS S
WHERE S.OBJECT_ID = I.OBJECT_ID
AND   I.INDEX_ID = S.INDEX_ID
AND   DATABASE_ID = @dbid)
ORDER BY OBJECTNAME,
         I.INDEX_ID,
         INDEXNAME ASC
GO

Po wykryciu indeksów można je wprosty sposób usunąć za pomocą polecenia DROP INDEX albo wybierając nazwę indeksu z listy dla danej tabeli.