Muchas veces se definen índices en las base de datos y estos no son utilizados, entonces más bien generan overhead debido a que hay que darles mantenimiento si deseas saber cuáles índices se están utilizando o cuales no, puedes utilizar la siguiente consulta(*):

 

USE AdventureWorks;
go
SELECT o.name Object_Name,
       SCHEMA_NAME(o.schema_id) Schema_name,
       i.name Index_name,
       i.Type_Desc,
       s.user_seeks,
       s.user_scans,
       s.user_lookups,
       s.user_updates 
FROM sys.objects AS o
     JOIN sys.indexes AS i
ON o.object_id = i.object_id
     JOIN
  sys.dm_db_index_usage_stats AS s   
ON i.object_id = s.object_id  
  AND i.index_id = s.index_id
WHERE  o.type = ‘u’
— Clustered and Non-Clustered indexes
  AND i.type IN (1, 2)
— Indexes that have been updated by not used
  AND(s.user_seeks >= 0 or s.user_scans >= 0 or s.user_lookups >= 0 );

Las columnas user_seeks, users_scans y user_lookups indican la cantidad de veces que dicho índice ha sido utilizado en una operación de ese tipo. Si todos los valores son cero indica que ese índice no ha sido utilizado, entonces podría tomarse la decisión de eliminarlo, pero tienes que ser precavido al respecto.

 

Saludos,

Eduardo Castro – Microsoft SQL Server – Costa Rica

http://comunidadwindows.org

 

Technorati Tags:

 

LiveJournal Tags:

 

(*) Modificación de la consulta publicada por Greg Larsen http://www.sql-server-performance.com/articles/per/Obtaining_Index_Usage_Information_p1.aspx