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

Jak zmusić Postgres do korzystania z określonego indeksu?

Zakładając, że pytasz o powszechną funkcję „podpowiedzi do indeksu”, którą można znaleźć w wielu bazach danych, PostgreSQL nie zapewnia takiej funkcji. To była świadoma decyzja zespołu PostgreSQL. Dobry przegląd tego, dlaczego i co możesz zrobić, znajdziesz tutaj. Powodem jest w zasadzie to, że jest to włamanie do wydajności, które później powoduje więcej problemów, gdy zmieniają się dane, podczas gdy optymalizator PostgreSQL może ponownie ocenić plan na podstawie statystyk. Innymi słowy, to, co dzisiaj może być dobrym planem zapytań, prawdopodobnie nie będzie dobrym planem zapytań na zawsze, a wskazówki dotyczące indeksu wymuszają określony plan zapytań na zawsze.

Jako bardzo tępy młotek, przydatny do testowania, możesz użyć enable_seqscan i enable_indexscan parametry. Zobacz:

  • Badanie wykorzystania indeksu
  • enable_ parametry

Te nie nadają się do ciągłego użytku produkcyjnego . Jeśli masz problemy z wyborem planu zapytań, zapoznaj się z dokumentacją dotyczącą śledzenia problemów z wydajnością zapytań. Nie ustawiaj tylko enable_ parametry i odejdź.

O ile nie masz bardzo dobrego powodu do korzystania z indeksu, Postgres może dokonać właściwego wyboru. Dlaczego?

  • W przypadku małych tabel szybsze jest wykonywanie skanów sekwencyjnych.
  • Postgres nie używa indeksów, gdy typy danych nie pasują do siebie prawidłowo, może być konieczne uwzględnienie odpowiednich rzutowań.
  • Ustawienia terminarza mogą powodować problemy.

Zobacz także ten stary post na grupie dyskusyjnej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klauzula Go i IN w Postgres

  2. Jak zautomatyzować wdrażanie bazy danych PostgreSQL

  3. Jak odpytywać tablice jsonb za pomocą operatora IN

  4. psql:FATAL:baza danych <użytkownik> nie istnieje

  5. Wdrażanie Django + Python 3 + PostgreSQL do AWS Elastic Beanstalk