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

Powolne działanie zapytania Postgres

Przyczyną spowolnienia są złe oszacowania liczby wierszy, które powodują, że PostgreSQL wybiera zagnieżdżone sprzężenie w pętli. Prawie cały czas spędzasz na skanowaniu indeksu na hfj_res_link , który jest powtarzany 1113 razy.

Moją pierwszą próbą byłoby ANALYZE hfj_spidx_date i zobacz, czy to pomaga. Jeśli tak, upewnij się, że autoanaliza traktuje tę tabelę częściej.

Następna próba to

SET default_statistics_target = 1000;

a następnie ANALYZE jak powyżej. Jeśli to pomoże, użyj ALTER TABLE aby zwiększyć STATISTICS na hash_identity i sp_value_high kolumny.

Jeśli to też nie pomoże, a masz najnowszą wersję PostgreSQL, możesz wypróbować rozszerzone statystyki :

CREATE STATISTICS myparamsda2_stats (dependencies)
   ON hash_identity, sp_value_high FROM hfj_spidx_date;

Następnie ANALYZE ponownie stół i zobacz, czy to pomoże.

Jeśli to wszystko nie pomoże i nie możesz uzyskać prawidłowych szacunków, musisz spróbować pod innym kątem:

CREATE INDEX ON hfj_res_link (target_resource_id, src_resource_id);

Powinno to znacznie przyspieszyć skanowanie indeksu i zapewnić dobre czasy odpowiedzi.

Na koniec, jeśli żadne z powyższych nie ma żadnego efektu, możesz użyć miary cruse, która nie zezwala na łączenie zagnieżdżonych pętli dla tego zapytania:

BEGIN;
SET LOCAL enable_nestloop = off;
SELECT /* your query goes here */;
COMMIT;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zautomatyzowane testowanie kopii zapasowych PostgreSQL

  2. wyeliminować zduplikowane wartości tablicy w postgresie

  3. Zapytanie o dane w polu danych tablicy JSON

  4. Odpowiednik unpivot() w PostgreSQL

  5. Przechowuj interwał czasowy w PostgreSQL od Rails