PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Optymalizacja zapytań Postgres (wymuszenie skanowania indeksu)

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ń


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django + Psycopg2:InterfaceError:obsługiwany tylko protokół 3

  2. Jak skonfigurować bazę danych PostgreSQL w Django

  3. Jak przekonwertować liczbę całkowitą na ciąg jako część zapytania PostgreSQL?

  4. Jak wykonać zapytanie o wartości null w polu typu json postgresql?

  5. Jak stworzyć użytkownika dla bazy danych w postgresql?