Kolumny używane do filtrowania lub dołączanie (lub, w mniejszym stopniu, sortowanie ) są interesujące dla indeksowania. Kolumny, które zostały właśnie wybrane, są ledwo istotne!Dla następującego zapytania indeksy tylko na a i e może się przydać:
SELECT a,b,c,d
FROM tbl_a
WHERE a = $some_value
AND e < $other_value;
Tutaj, f i prawdopodobnie c też są kandydatami:
SELECT a,b,c,d
FROM tbl_a
JOIN tbl_b USING (f)
WHERE a = $some_value
AND e < $other_value
ORDER BY c;
Po utworzeniu indeksów przetestuj, aby sprawdzić, czy są one rzeczywiście przydatne za pomocą EXPLAIN ANALYZE
. Porównaj także czasy wykonania z indeksami i bez. Usuwanie i odtwarzanie indeksów jest szybkie i łatwe. Istnieją również parametry do eksperymentu
z EXPLAIN ANALYZE
. Różnica może być oszałamiająca lub nieistniejąca.
Ponieważ Twoje tabele są tylko do odczytu, utrzymanie indeksu jest tanie. To tylko kwestia miejsca na dysku.
Jeśli naprawdę chcesz wiedzieć, co robisz, zacznij od przeczytania dokumentacji .
Jeśli nie wiesz, jakich zapytań się spodziewać...
-
Spróbuj zarejestrować wystarczającą liczbę zapytań, aby znaleźć typowe przypadki użycia. Rejestruj zapytania z parametrem
log_statement = all
za to. Lub po prostu rejestruj powolne zapytania za pomocąlog_min_duration_statement
. -
Utwórz indeksy może to być przydatne i sprawdzić statystyki po pewnym czasie, aby zobaczyć, co faktycznie jest używane. PostgreSQL ma całą infrastrukturę do statystyki monitorowania . Jednym z wygodnych sposobów badania statystyk (i wielu innych zadań) jest pgAdmin gdzie możesz wybrać swoją tabelę / funkcję / indeks i uzyskać wszystkie dane w zakładce "statystyki" w przeglądarce obiektów (okno główne).
-
Postępuj zgodnie z powyższym opisem, aby sprawdzić, czy używane indeksy rzeczywiście przyspieszają działanie.
-
Jeśli planer zapytań powinien wybrać jeden lub więcej z Twoich indeksów, ale nie ma to żadnego negatywnego wpływu, prawdopodobnie coś jest nie tak z Twoją konfiguracją i musisz przestudiować podstawy optymalizacji wydajności:próżnia, analiza, parametry kosztów, wykorzystanie pamięci, ...