Der Planer entscheidet sich nicht für eine bestimmte Join-Strategie basierend auf tiefgehender Argumentation, er konstruiert einfach alle möglichen Join-Strategien, schätzt die Kosten und wählt die günstigste aus.
Allerdings sind Joins mit verschachtelten Schleifen normalerweise die beste Wahl, wenn die äußere Tabelle klein ist, damit die innere Schleife nicht oft ausgeführt werden muss. Außerdem kann ein Index für die Join-Bedingung der inneren Tabelle die Kosten eines Joins mit verschachtelten Schleifen erheblich reduzieren und ihn zu einer attraktiven Strategie machen.
In Ihrem Fall ist die schlechte Wahl auf eine Fehleinschätzung zurückzuführen:
Foreign Scan on wind_forecast_recent w (cost=... rows=1 ...) (actual ... rows=7 ...)
Dadurch wird die innere Schleife 7 Mal statt nur einmal ausgeführt, sodass die Ausführungszeit 70 Sekunden statt 10 Sekunden beträgt.
Sie sollten Tabellenstatistiken zu wind_forecast_recent
sammeln :
ANALYZE wind_forecast_recent;
Denken Sie daran, dass die automatische Analyse dies nicht tut ausländische Tische behandeln; darum musst du dich selbst kümmern.
Wenn das nicht hilft, können Sie versuchen, use_remote_estimate
zu setzen Option für die Fremdtabelle und stellen Sie sicher, dass die Tabellenstatistiken in der entfernten Datenbank korrekt sind.