計画担当者は、深い推論に基づいて特定の結合戦略を使用することを決定しません。考えられるすべての結合戦略を構築し、コストを見積もり、最も安いものを選択するだけです。
とは言うものの、外側のテーブルが小さい場合は通常、ネストされたループ結合が最良の選択であるため、内側のループを頻繁に実行する必要はありません。また、内部テーブルの結合条件のインデックスは、ネストされたループ結合のコストを大幅に削減し、魅力的な戦略にすることができます。
あなたの場合、悪い選択は誤った見積もりによるものです:
Foreign Scan on wind_forecast_recent w (cost=... rows=1 ...) (actual ... rows=7 ...)
これにより、内部ループが1回ではなく7回実行されるため、実行時間は10秒ではなく70秒になります。
wind_forecast_recent
でテーブル統計を収集する必要があります :
ANALYZE wind_forecast_recent;
自動分析はしないことを忘れないでください 外国のテーブルを扱う。自分でそれを処理する必要があります。
それでもうまくいかない場合は、use_remote_estimate
を設定してみてください。 外部テーブルのオプションを選択し、リモートデータベースでテーブル統計が正確であることを確認してください。