Ich habe Log- und LogItem-Tabellen. Ich schreibe eine Abfrage, um einige Daten von beiden zu erfassen. Es gibt Tausende von Logsund jeder Logkann bis zu 125 habenLogItems
Die fragliche Abfrage ist kompliziert, daher überspringe ich sie (wenn jemand der Meinung ist, dass es wichtig ist, dass ich sie veröffentlichen kann). Als ich den Plan für geschätzte SSMS-Abfragen ausführte, wurde mir jedoch mitgeteilt, dass ein neuer nicht geclusterter Index die Leistung um bis zu 100% verbessern würde. .
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
Aus Spaß habe ich diesen neuen Index erstellt und die Abfrage ausgeführt. Zu meiner großen Überraschung dauert es jetzt ca. 1 Sekunde, bis meine Abfrage ausgeführt wird. Früher waren es mehr als 10 Sekunden.
Ich bin davon ausgegangen, dass mein vorhandener Index diese neue Abfrage abdecken würde. Meine Frage ist also, warum das Erstellen eines neuen Index für die einzigen in meiner neuen Abfrage verwendeten Spalten die Leistung verbessert hat. Sollte ich für jede in meinen whereKlauseln verwendete eindeutige Spaltenkombination einen Index haben ?
Hinweis: Ich glaube nicht, dass dies daran liegt, dass der SQL Server meine Ergebnisse zwischenspeichert. Ich habe die Abfrage ungefähr 25 bis 30 Mal ausgeführt, bevor ich den Index erstellt habe, und es dauerte durchgehend 10 bis 15 Sekunden, nachdem der Index nun durchgehend ~ 1 ist oder weniger.