Jak się dowiedzieć, kiedy / czy mam zbyt wiele indeksów?

26

Od czasu do czasu uruchamiając program Microsoft SQL Server Profiler, sugeruje mi kilka nowych indeksów i statystyk do stworzenia („... 97% szacowana poprawa ...”).

Z mojego zrozumienia każdą dodaną indeks może dokonać SQL SELECTkwerendy szybciej, ale również UPDATElub INSERTzapytania wolniejsze od indeksy muszą być skorygowane.

Zastanawiam się, kiedy mam „zbyt wiele” indeksów / statystyk?

Być może nie ma na to jednoznacznej odpowiedzi, ale jakaś praktyczna zasada.

Uwe Keim
źródło
1
Powiązane: dba.stackexchange.com/questions/56/…
Nick Chammas
Dziękuję, @Nick. Przed opublikowaniem pytania dokładnie przeszukałem Google i dba.se.com. Moim zdaniem jest to raczej niezwiązane. Nie chcę wiedzieć, czy indeks jest wymagany, ale jak ustalić, kiedy tworzy się zbyt wiele indeksów, UPDATEa INSERTinstrukcje są zbyt wolne.
Uwe Keim,
3
Czy czytałeś tam odpowiedzi? Akceptowana odpowiedź, na przykład, prowadzi do niektórych skryptów analitycznych, które mogą pomóc w identyfikacji nieużywanych indeksów, które należy usunąć. Pomocne może okazać się udzielenie odpowiedzi na pytanie, kiedy masz „zbyt wiele” indeksów.
Nick Chammas,
2
Zobacz także dba.stackexchange.com/q/3831/630
gbn

Odpowiedzi:

24

Twój profil obciążenia jest najważniejszym czynnikiem w odpowiedzi na to pytanie.

  • Jeśli obciążenie wymaga intensywnego odczytu, indeksy powinny spełniać najcięższe lub najczęstsze zapytania.

  • Jeśli obciążenie wymaga intensywnego zapisu, ostrożnie indeksuj. Indeksuj, aby zaspokoić poszukiwania, których potrzebuje UPDATE, a także jeden lub dwa najdroższe SELECT.

  • Jeśli twój ładunek to OLAP, indeksuj oszczędnie, ponieważ i tak będziesz skanował tabele docelowe.

Skąd wiesz, że masz zbyt wiele indeksów?

  • Gdy widać, że niektóre z nich nie są używane przez żadne zapytania.

  • Częste USUWANIE, AKTUALIZACJA lub WSTAWIANIE pokazuje plan zapytań, który obejmuje kilka kosztownych zmian indeksu (tj. Wstawianie , aktualizowanie lub usuwanie indeksu klastrowanego ). Skorzystaj z własnego osądu, aby ustalić, czy kara na tych instrukcjach DML jest warta korzyści, którą otrzymujesz z indeksów, które muszą być aktualizowane.

Nick Chammas
źródło
8

Jeśli masz indeksy, które są utrzymywane, ale nigdy nie są używane (lub rzadko są używane), musisz mieć wiele indeksów. Jeśli wszystkie twoje indeksy są używane do poprawy wydajności użytkownika, to nie musisz ich zbyt wiele.

mrdenny
źródło
Czy mogę zasugerować zmianę dwóch wystąpień „ na ” na „ zbyt ”, ponieważ nie mogę ich edytować, ponieważ moja edycja musiałaby zmienić minimum 6 znaków?
Uwe Keim