Determinar el uso de los índices en SQL Server
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
(*) Modificación de la consulta publicada por Greg Larsen http://www.sql-server-performance.com/articles/per/Obtaining_Index_Usage_Information_p1.aspx
Comments