Menu

Listar índices sin utilizar

Agosto 11, 2013 - SQL Server

Como he mencionado en varias ocasiones, me gusta mucho el mundo de bases de datos, no la administración sino la optimización de recursos y el desarrollo.

En cierta ocasión estaba buscando como listar los índices no utilizados en la base de datos, esto con motivo de que muchas veces se construyen índices creyendo que ésta es la única solución a una consulta que se demora o que consume procesador o memoria por montones, la verdad es que si bien la creación de un índice puede ayudar en el rendimiento, la optimización de la consulta como tal, a veces puede llegar a ser suficiente para mejorar el rendimiento.

Requerimientos

Manos a la obra!

El script que presento a continuacion lo encontre en el blog de Vipul Shah’s, y los créditos son totalmente suyos:

— From Vipul Shah’s blog at http://blogs.technet.com/b/vipulshah/archive/2007/12/04/finding-missing-indexes-and-unused-indexes-using-dmvs.aspx
SELECT
OBJECT_NAME(i.object_id) AS ObjectName,
i.name AS [Unused Index]
FROM sys.indexes i
LEFT JOIN sys.dm_db_index_usage_stats s
ON s.object_id = i.object_id AND i.index_id = s.index_id AND s.database_id = DB_ID()
WHERE OBJECTPROPERTY(i.object_id, ‘IsIndexable’) = 1
AND
OBJECTPROPERTY(i.object_id, ‘IsIndexed’) = 1
AND
s.index_id IS NULL — and dm_db_index_usage_stats has no reference to this index
OR
(s.user_updates > 0
AND
s.user_seeks = 0
AND
s.user_scans = 0
AND
s.user_lookups = 0) — index is being updated, but not used by seeks/scans/lookups
ORDER BY OBJECT_NAME(i.object_id) ASC

Este es el resultado que produce en mi base de datos de AdventureWorks:

image

Se puede ver como se listan los índices que no se utilizan y la tabla a la cual pertenece, esto nos puede ayudar para eliminar índices y así ganar espacio en el disco.

Happy coding!! Sonrisa

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *