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
,UPDATE
lubDELETE
. 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?
pg_stat_user_indexes
pomaga w tym, pokazując informacje o użyciu indeksu. Aby oszacować koszty utrzymania, możesz sprawdzić aktywność zapisu w tabeli,pg_stat_user_tables
ale ze względu na HOT, nie wszystkie aktualizacje będą musiały dotknąć indeksu, więc możesz trochę przecenić.Odpowiedzi:
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
źródło
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.
źródło