Estoy tratando de determinar qué índices ya no se usan en mi base de datos. He tenido una gran suerte utilizando la siguiente consulta:¿Cómo encontrar qué procedimientos almacenados usan qué índices?
SELECT OBJECT_NAME(S.[OBJECT_ID]) AS [OBJECT NAME],
I.[NAME] AS [INDEX NAME],
i.Type_Desc as [Index Type],
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 i.name is not null
AND
( OBJECT_NAME(S.[OBJECT_ID]) = 'Table1'
OR
OBJECT_NAME(S.[OBJECT_ID]) = 'Table2'
OR
OBJECT_NAME(S.[OBJECT_ID]) = 'Table3'
)
ORder by S.[OBJECT_ID], user_Seeks desc , user_scans desc
Lo que me gustaría encontrar ahora es qué procedimientos almacenados están causando la busca, exploraciones y búsquedas que dan La consulta anterior informa sobre. ¿Esta información está almacenada en las vistas/tablas del sistema?
CLARIFICACION
Como GBN ha señalado un procedimiento almacenado no utiliza directamente un índice, se utiliza una tabla que utiliza un índice. A continuación hay una explicación que espero aclarará lo que estoy tratando de preguntar aquí.
¿Es posible para mí determinar qué SQL se ejecutó que hizo que se utilizaran los índices anteriores? Por ejemplo, si uno de los índices informados tiene 10 User_Seeks, ¿sería posible determinar que exec sp_1
causó ese uso 7 veces y exec sp_2
causó ese uso 3 veces?
. Bueno, me tienes ahí gbn. ¿Te gustaría que reformulara mi pregunta o entiendes el espíritu de lo que trato de decir? –
Tendrá que volver a formular ... porque los procesos almacenados todavía no usarán índices ... – gbn
Abe, esto puede parecer pedante, pero hay buenas razones para ser claro en la comunicación sobre temas técnicos como este. Una de las razones es '¿quieres la respuesta correcta?' – DaveE