Jak ustalić koszt / korzyść z dodania indeksu?

10

Według Craiga Ringera :

Chociaż zwykle dobrym pomysłem jest utworzenie indeksu w kolumnach kluczy obcych po stronie odniesienia (lub w tym), nie jest to wymagane. Każdy indeks dodać spowalnia operacje DML lekko w dół, więc płacisz koszt wykonania na każdym INSERT, UPDATElub DELETE. Jeśli indeks jest rzadko używany, nie warto go mieć.

Jak ustalić, czy korzyść z dodania indeksu przewyższa jego koszt?

Czy profilujesz testy jednostkowe przed / po dodaniu indeksu i sprawdzasz ogólny wzrost wydajności? Czy jest jakiś lepszy sposób?

Gili
źródło
pg_stat_user_indexespomaga w tym, pokazując informacje o użyciu indeksu. Aby oszacować koszty utrzymania, możesz sprawdzić aktywność zapisu w tabeli, pg_stat_user_tablesale ze względu na HOT, nie wszystkie aktualizacje będą musiały dotknąć indeksu, więc możesz trochę przecenić.
Craig Ringer
@CraigRinger, to bardzo pomocne. Dziękuję Ci!
Gili
Polegam na pgBadger prawie wyłącznie. I moje wnętrzności.
Colin 't Hart,

Odpowiedzi:

4

Użycie indeksu zależy od struktury danych i selektywności danych. Jeśli zadajesz pytania, których nie używasz, są one drogie. Jeśli wykorzystasz je skutecznie, są świetnym narzędziem. Istnieje narzędzie do planowania zapytań i analityka planowania zapytań ( EXPLAIN) po prostu planowania lub planowania i wykonywania poleceń ( EXPLAIN ANALYZE).

I jest świetna książka online: użyj indeksu luke na temat zalecanego użycia indeksów

Mladen Uzelac
źródło
4
Zasada kciuka jest ładna, ale w tym przypadku zbyt ogólna. Szukam konkretnego narzędzia / pomiaru, które zasugeruje dodanie / usunięcie indeksów w oparciu o rzeczywiste zachowanie mojej aplikacji w czasie wykonywania.
Gili
Może to jest narzędzie szukasz: enterprisedb.com/products-services-training/products/...
Mladen Uzelac
1

Wybierz praktyczne zasady i postępuj zgodnie z nimi. Na przykład zawsze tworzę indeks po stronie odniesienia klucza obcego.

Upewnij się, że testujesz swój produkt pod kątem kryteriów wydajności opartych na potrzebach użytkowników. Na przykład system musi obsłużyć przychodzące obciążenie 100 żądań POST typu X na minutę.

Jeśli nie możesz spełnić wymagań dotyczących wydajności, udoskonal swój model, prawdopodobnie łamiąc przy tym podstawowe zasady.

Tempo
źródło