J'ai des tables Log et LogItem; J'écris une requête pour récupérer des données des deux. Il y en a des milliers Logs
et chacun Log
peut en avoir jusqu'à 125LogItems
La requête en question est compliquée, donc je la saute (si quelqu'un pense que c'est important, je peux probablement la poster), mais lorsque j'ai exécuté le plan SSMS Estimated Query, il m'a dit qu'un nouvel index non clusterisé améliorerait les performances jusqu'à 100%. .
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
Juste pour le plaisir, j'ai créé ce nouvel index et exécuté la requête et à ma grande surprise, il faut maintenant environ 1 seconde pour que ma requête s'exécute, alors qu'elle était avant 10+ secondes.
J'ai supposé que mon index existant couvrirait cette nouvelle requête, donc ma question est pourquoi la création d'un nouvel index sur les seules colonnes utilisées dans ma nouvelle requête a-t-elle amélioré les performances? Dois-je avoir un index pour chaque combinaison unique de colonnes utilisée dans mes where
clauses?
note: Je ne pense pas que ce soit parce que SQL Server met en cache mes résultats, j'ai exécuté la requête environ 25-30 fois avant de créer l'index et cela a pris régulièrement 10-15 secondes, après l'index, il est maintenant uniformément ~ 1 ou moins.