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?
Odpowiedzi:
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.
źródło
CREATE STATISTICS
zamiastCREATE INDEX
.