Un INDEX NON CLUSTERED non utilisé peut-il encore améliorer la vitesse de requête?


13

C'est une situation étrange, mais j'espère que quelqu'un aura une réponse.

Au cours de certains problèmes de performances, nous avons ajouté un INDEX NON CLUSTERED à une table, comme demandé par sp_BlitzIndex. Nous avons vérifié son utilisation le lendemain, et il a montré 0 lectures ( 0 analyses / recherches, 0 recherches singleton ), nous l'avons donc désactivé.

La minute suivante, nous recevons une plainte de la même lenteur d'application (problème de performance) que nous essayions de vérifier et de résoudre en premier lieu lorsque nous avons ajouté l'INDEX.

Maintenant, je sais qu'en théorie, cela semble purement fortuit. L'INDEX était prouvablement, mesurablement, NON UTILISÉ . La désactiver NE DEVRAIT PAS avoir entraîné une dégradation des performances des requêtes. Mais c'est presque TROP coïncidence.

Question

Donc, ma question, tout simplement, est la suivante:

Est-il possible , qu'un INDEX NON CLUSTERED, dont les statistiques d'utilisation (à partir des DMV / sp_BlitzIndex) n'indiquent AUCUNE utilisation, ait encore aidé les performances de requête d'une manière ou d'une autre sur la table affectée?


PS: Veuillez m'épargner le proverbial "Allez le tester!" réponse; Je dois attendre jusqu'à demain pour le tester car la table est très utilisée et l'index ne sera pas réactivé (reconstruit) jusqu'à la fenêtre de maintenance nocturne. Et la nature des problèmes de performances a été sporadique et difficile à reproduire de toute façon; Je ne dis pas "Non, je ne le testerai pas", je dis que je sais que nous devons le tester et le planifier, mais je demande des connaissances théoriques et / ou expérientielles.
NateJ

1
Vous pourriez trouver cet article de blog utile; brentozar.com/archive/2016/11/…
Rich Benner

Réponses:


13

Oui, c'est possible, lorsque SQL Server décide que les statistiques de cet index sont plus précises / utiles et utilise ces statistiques pour faire des estimations et élaborer un plan.

Je suis tombé sur des situations où SQL Server a décidé d'utiliser les statistiques d'un index et d'analyser / rechercher un autre index.

Modifier - Cela pourrait ne pas être applicable car je viens de réaliser que vous avez désactivé l'index. Je n'ai pas testé ce scénario.


Merci pour la réponse claire et concise! Ouais non, il n'a pas été désactivé immédiatement, il a été activé et entièrement "en direct" jusqu'à ce que je le désactive quelques secondes avant la plainte de l'utilisateur / le ralentissement des performances. Vous êtes bon :)
NateJ

1
@NateJ Cette théorie peut être testée par CREATE STATISTICSau lieu de CREATE INDEX.
Jakub Kania
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.