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?


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.