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

Zagnieżdżone pętle PostgresSQL - Kiedy planista decyduje się na użycie zagnieżdżonej pętli podczas wykonywania INNER JOIN?

Planista nie decyduje się na użycie określonej strategii łączenia opartej na głębokim rozumowaniu, po prostu konstruuje wszystkie możliwe strategie łączenia, szacuje koszt i wybiera najtańszą.

To powiedziawszy, zagnieżdżone sprzężenia pętli są zwykle najlepszym wyborem, jeśli zewnętrzna tabela jest mała, więc wewnętrzna pętla nie musi być często wykonywana. Ponadto indeks warunku złączenia tabeli wewnętrznej może znacznie obniżyć koszt złączenia w pętli zagnieżdżonej i uczynić go atrakcyjną strategią.

W twoim przypadku zły wybór wynika z błędnego oszacowania:

Foreign Scan on wind_forecast_recent w  (cost=... rows=1 ...) (actual ... rows=7 ...)

To powoduje, że wewnętrzna pętla jest wykonywana 7 razy, a nie raz, więc czas wykonania wynosi 70 sekund, a nie 10.

Powinieneś zbierać statystyki tabeli na wind_forecast_recent :

ANALYZE wind_forecast_recent;

Pamiętaj, że autoanaliza nie traktować obce stoły; musisz sam o to zadbać.

Jeśli to nie wystarczy, możesz spróbować ustawić use_remote_estimate na obcej tabeli i upewnij się, że statystyki tabeli są dokładne w zdalnej bazie danych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd uwierzytelnienia hasła podczas uruchamiania migracji laravel

  2. Jak sprawić, by polecenie kopiowania kontynuowało działanie z przesunięciem ku czerwieni nawet po przekroczeniu limitu czasu funkcji lambda, która ją zainicjowała?

  3. pg_dump bez komentarzy do obiektów?

  4. Dlaczego '2'> '10'?

  5. Postgres:czy należy tworzyć indeksy przed czy po wypełnieniu tabel