Czy nieużywany INDEKS NIESKLUSTEROWANY może nadal zwiększać szybkość zapytań?

13

To dziwna sytuacja, ale mam nadzieję, że ktoś ma odpowiedź.

Podczas rozwiązywania problemów z wydajnością dodaliśmy do tabeli NONCLUSTERED INDEX, zgodnie z żądaniem sp_BlitzIndex. Sprawdziliśmy jego użycie następnego dnia i pokazało 0 odczytów ( 0 skanów / wyszukiwań, 0 wyszukiwań singletonów ), więc wyłączyliśmy go.

Już w następnej chwili otrzymujemy skargę na tę samą powolność aplikacji (problemy z wydajnością), którą próbowaliśmy sprawdzić i rozwiązać w pierwszej kolejności, gdy dodaliśmy INDEKS.

Wiem, teoretycznie, to brzmi czysto przypadkowo. INDEKS był w sposób możliwy do zmierzenia, NIEMOŻLIWY . Wyłączenie NIE POWINNY powodować pogorszenia wydajności zapytań. Ale to prawie ZBYT przypadek.

Pytanie

Więc moje pytanie, po prostu, brzmi:

Czy to w ogóle możliwe , że NIESKLUSTEROWANY INDEKS, którego statystyki użytkowania (z DMV / sp_BlitzIndex) NIE pokazują użycia, nadal pomagają w jakiś sposób w wydajności zapytania w tabeli, której dotyczy problem?

NateJ
źródło
PS: Oszczędź mi przysłowiowego „Idź przetestuj!” odpowiedź; Muszę poczekać do jutra, aby go przetestować, ponieważ tabela jest intensywnie używana, a indeks nie zostanie ponownie włączony (przebudowany) aż do okna nocnej konserwacji. Charakter problemów z wydajnością był sporadyczny i i tak trudny do odtworzenia; Nie mówię „Nie, nie przetestuję tego”, mówię, że wiem, że musimy to przetestować i zaplanować, ale proszę o teorię i / lub wiedzę doświadczalną.
NateJ
1
Ten post może być przydatny; brentozar.com/archive/2016/11/…
Rich Benner,

Odpowiedzi:

13

Tak, może, gdy SQL Server zdecyduje, że statystyki z tego indeksu są bardziej dokładne / użyteczne i wykorzystuje te statystyki do oszacowań i opracowania planu.

Natknąłem się na sytuacje, w których SQL Server postanowił użyć statystyk z jednego indeksu i skanować / szukać innego indeksu.

Edycja - może nie mieć zastosowania, ponieważ właśnie zdałem sobie sprawę, że wyłączyłeś indeks. Nie przetestowałem tego scenariusza.

jesijesi
źródło
Dziękujemy za jasną, zwięzłą odpowiedź! Tak, nie, nie został natychmiast wyłączony, został włączony i w pełni „na żywo”, dopóki nie wyłączyłem go na kilka sekund przed skargą / spowolnieniem wydajności użytkownika. Jesteś dobry :)
NateJ
1
@NateJ Teorię tę można przetestować CREATE STATISTICSzamiast CREATE INDEX.
Jakub Kania,