Do testowania celów możesz wymusić użycie indeksu poprzez „wyłączenie” skanowania sekwencyjnego – najlepiej tylko w bieżącej sesji:
SET enable_seqscan = OFF;
Nie użyj tego na produktywnym serwerze. Szczegóły w instrukcji tutaj.
Cytowałem „wyłączenie”, ponieważ w rzeczywistości nie można wyłączyć sekwencyjnego skanowania tabel. Ale każda inna dostępna opcja jest teraz preferowana dla Postgres. To udowodni, że indeks wielokolumnowy w (metric_id, t)
może być używany - ale nie tak skuteczny jak indeks w wiodącej kolumnie.
Prawdopodobnie uzyskasz lepsze wyniki, zmieniając kolejność kolumn w swoim PRIMARY KEY
(i indeks użyty do zaimplementowania go za zasłoną razem z nim) do (t, metric_id)
. Lub utwórz dodatkowy indeks z odwróconymi kolumnami w ten sposób.
- Czy indeks złożony jest również odpowiedni dla zapytań w pierwszym polu?
Zwykle nie musisz wymuszać lepszych planów zapytań przez ręczną interwencję. Jeśli ustawienie enable_seqscan = OFF
prowadzi do dużo lepszy plan, prawdopodobnie coś jest nie tak w Twojej bazie danych. Rozważ powiązaną odpowiedź:
- Nie pozwól PostgreSQL-owi czasami wybierać złego planu zapytań