Ho tabelle Log e LogItem; Sto scrivendo una query per ottenere alcuni dati da entrambi. Ce ne sono migliaia Logs
e ognuna Log
può avere fino a 125LogItems
La query in questione è complicata, quindi la sto saltando (se qualcuno pensa che sia importante probabilmente la posso pubblicare), ma quando ho eseguito il piano Query stimata SSMS, mi ha detto che un nuovo indice non cluster migliorerebbe le prestazioni fino al 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 per divertimento, ho creato questo nuovo indice ed eseguito la query e con mia grande sorpresa, ora ci vogliono ~ 1 secondo per l'esecuzione della mia query, quando prima erano più di 10 secondi.
Ho ipotizzato che il mio indice esistente avrebbe coperto questa nuova query, quindi la mia domanda è: perché la creazione di un nuovo indice sulle sole colonne utilizzate nella mia nuova query ha migliorato le prestazioni? Dovrei avere un indice per ogni combinazione unica di colonne utilizzate nelle mie where
clausole?
nota: non penso che ciò sia dovuto al fatto che SQL Server memorizza i miei risultati nella cache, ho eseguito la query circa 25-30 volte prima di creare l'indice e ci sono voluti costantemente 10-15 secondi, dopo che l'indice è ora costantemente ~ 1 o meno.