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

26

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 SELECTrequête SQL plus rapide mais aussi une requête UPDATEou INSERTplus 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.

Uwe Keim
la source
1
Connexe: dba.stackexchange.com/questions/56/…
Nick Chammas
Merci, @Nick. J'ai soigneusement recherché Google et dba.se.com avant de poster ma question. À mon avis, cela est plutôt indépendant. Je ne veux pas savoir si un index est requis mais plutôt comment déterminer quand trop d'index sont créés UPDATEet les INSERTinstructions trop lentes.
Uwe Keim
3
Avez-vous lu les réponses là-bas? La réponse acceptée, par exemple, renvoie à certains scripts d'analyse qui peuvent vous aider à identifier les index inutilisés à supprimer. Vous pouvez trouver cela utile pour répondre à votre question de savoir quand vous avez "trop" d'index.
Nick Chammas

Réponses:

24

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 satisfassent 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 de type OLAP, indexez avec parcimonie car vous allez quand même analyser les tables cibles.

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

  • Lorsque vous pouvez voir que certains d'entre eux ne sont utilisés par aucune requête.

  • Une fréquence SUPPRIMER, montre UPDATE ou INSERT un plan de requête qui implique plusieurs changements d'indice coûteux (soit un indice nonclustered d'insertion , mise à 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.

Nick Chammas
la source
8

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

mrdenny
la source
Puis-je suggérer de remplacer les deux occurrences de " par " par " aussi ", car je ne peux pas les modifier car ma modification devrait changer au moins 6 caractères?
Uwe Keim