Perencana tidak memutuskan untuk menggunakan strategi bergabung tertentu berdasarkan penalaran yang mendalam, itu hanya membangun semua kemungkinan strategi bergabung, memperkirakan biaya dan memilih yang termurah.
Konon, gabungan loop bersarang biasanya merupakan pilihan terbaik jika tabel luarnya kecil, sehingga loop dalam tidak harus sering dieksekusi. Juga, indeks pada kondisi join dari tabel bagian dalam dapat sangat mengurangi biaya nested loop join dan menjadikannya strategi yang menarik.
Dalam kasus Anda, pilihan yang buruk adalah karena perkiraan yang salah:
Foreign Scan on wind_forecast_recent w (cost=... rows=1 ...) (actual ... rows=7 ...)
Itu menyebabkan loop dalam dieksekusi 7 kali, bukan sekali, sehingga waktu eksekusi adalah 70 detik, bukan 10.
Anda harus mengumpulkan statistik tabel pada wind_forecast_recent
:
ANALYZE wind_forecast_recent;
Ingat bahwa analisis otomatis tidak memperlakukan meja asing; Anda harus mengurusnya sendiri.
Jika tidak berhasil, Anda dapat mencoba menyetel use_remote_estimate
pilihan pada tabel asing dan pastikan bahwa statistik tabel akurat pada database jarak jauh.