web-dev-qa-db-fra.com

Comment savoir quand / si j'ai trop d'index?

L'exécution de Microsoft SQL Server Profiler de temps en temps, il me suggère avec un tas de nouveaux index et statistiques à créer ("... 97% d'amélioration estimée ...").

D'après ma compréhension, chaque index ajouté peut rendre une requête SQL SELECT plus rapide mais aussi une requête UPDATE ou INSERT plus lente car les index doivent être ajustés.

Ce que je me demande, c'est quand ai-je "trop" d'index/statistiques?

Il n'y a peut-être pas de réponse claire à ce sujet, mais une règle empirique.

27
Uwe Keim

Votre profil de charge est le facteur le plus important pour répondre à cette question.

  • Si votre charge est intensive en lecture, vous souhaitez que les index répondent à vos requêtes les plus lourdes ou les plus fréquentes.

  • Si votre charge est gourmande en écriture, indexez soigneusement. Index pour satisfaire une demande de mise à jour, par exemple, ainsi que vos un ou deux SELECT les plus chers.

  • Si votre charge est un OLAP one, indexez avec parcimonie car vous allez quand même analyser les tables cibles.

Comment savez-vous que vous avez trop d'index?

  • Quand vous pouvez voir que certains d'entre eux ne sont pas utilisés par toutes les requêtes.

  • Une suppression, une mise à jour ou une insertion fréquente montre un plan de requête qui implique plusieurs modifications d'index coûteuses (c'est-à-dire un index non cluster insérer , mettre à jour ou supprimer ) . Utilisez votre jugement pour déterminer si la pénalité sur ces instructions DML vaut le gain que vous obtenez des index qui doivent être mis à jour.

24
Nick Chammas

Si vous avez des index qui sont maintenus mais ne sont jamais utilisés (ou sont rarement utilisés), alors vous avez trop d'index. Si tous vos index sont utilisés pour améliorer les performances des utilisateurs, vous n'en avez pas trop.

8
mrdenny