Tengo tablas Log y LogItem; Estoy escribiendo una consulta para obtener algunos datos de ambos. Hay miles de Logs
y cada uno Log
puede tener hasta 125LogItems
La consulta en cuestión es complicada, así que la estoy omitiendo (si alguien piensa que es importante, probablemente pueda publicarla), pero cuando ejecuté el plan de consulta estimada de SSMS, me dijo que un nuevo índice no agrupado mejoraría el rendimiento hasta un 100% .
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
Solo por diversión, creé este nuevo índice y ejecuté la consulta y para mi sorpresa, ahora toma ~ 1 segundo para que mi consulta se ejecute, cuando antes era más de 10 segundos.
Supuse que mi índice existente cubriría esta nueva consulta, así que mi pregunta es ¿por qué la creación de un nuevo índice en las únicas columnas utilizadas en mi nueva consulta mejoró el rendimiento? ¿Debo tener un índice para cada combinación única de columnas utilizada en mis where
cláusulas?
nota: No creo que esto se deba a que el Servidor SQL está almacenando en caché mis resultados, ejecuté la consulta unas 25-30 veces antes de crear el índice y de manera constante tardó 10-15 segundos, después del índice ahora es consistente ~ 1 o menos.