O planejador não decide usar uma determinada estratégia de junção com base em raciocínio profundo, ele simplesmente constrói todas as estratégias de junção possíveis, estima o custo e escolhe a mais barata.
Dito isso, as junções de loop aninhado geralmente são a melhor escolha se a tabela externa for pequena, para que o loop interno não precise ser executado com frequência. Além disso, um índice na condição de junção da tabela interna pode reduzir bastante o custo de uma junção de loop aninhado e torná-la uma estratégia atraente.
No seu caso, a má escolha se deve a uma estimativa incorreta:
Foreign Scan on wind_forecast_recent w (cost=... rows=1 ...) (actual ... rows=7 ...)
Isso faz com que o loop interno seja executado 7 vezes em vez de uma vez, de modo que o tempo de execução seja de 70 segundos em vez de 10.
Você deve coletar estatísticas de tabela em
wind_forecast_recent
:ANALYZE wind_forecast_recent;
Lembre-se de que a análise automática não tratar mesas estrangeiras; você tem que cuidar disso sozinho.
Se isso não funcionar, você pode tentar configurar o
use_remote_estimate
opção na tabela externa e certifique-se de que as estatísticas da tabela sejam precisas no banco de dados remoto.