Eu tenho tabelas Log e LogItem; Estou escrevendo uma consulta para pegar alguns dados de ambos. Existem milhares Logs
e cada um Log
pode ter até 125LogItems
A consulta em questão é complicada, por isso estou ignorando (se alguém acha importante, provavelmente posso publicá-la), mas quando executei o plano de Consulta Estimada do SSMS, ele me disse que um novo índice não clusterizado melhoraria o desempenho em até 100% .
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
Apenas por diversão, criei esse novo índice e executei a consulta e, para minha surpresa, agora leva cerca de 1 segundo para que minha consulta seja executada, antes de mais de 10 segundos.
Eu supus que meu índice existente cobriria essa nova consulta; portanto, minha pergunta é por que a criação de um novo índice nas únicas colunas usadas na minha nova consulta melhorou o desempenho? Devo ter um índice para cada combinação exclusiva de colunas usada em minhas where
cláusulas?
nota: acho que isso não ocorre porque o SQL Server está armazenando meus resultados em cache, executei a consulta cerca de 25 a 30 vezes antes de criar o índice e demorou 10 a 15 segundos, depois que o índice agora está consistentemente ~ 1 ou menos.