sql >> データベース >  >> RDS >> PostgreSQL

PostgresSQLのネストされたループ-プランナーは、内部結合を実行するときにネストされたループを使用することをいつ決定しますか?

    計画担当者は、深い推論に基づいて特定の結合戦略を使用することを決定しません。考えられるすべての結合戦略を構築し、コストを見積もり、最も安いものを選択するだけです。

    とは言うものの、外側のテーブルが小さい場合は通常、ネストされたループ結合が最良の選択であるため、内側のループを頻繁に実行する必要はありません。また、内部テーブルの結合条件のインデックスは、ネストされたループ結合のコストを大幅に削減し、魅力的な戦略にすることができます。

    あなたの場合、悪い選択は誤った見積もりによるものです:

    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を設定してみてください。 外部テーブルのオプションを選択し、リモートデータベースでテーブル統計が正確であることを確認してください。




    1. 特定のMySQLテーブルから列名を取得するにはどうすればよいですか?

    2. JPA SequenceGeneratorおよびGeneratedValue:クラスごとにのみ一意の名前/ジェネレータプロパティ?

    3. 複数の値にまたがる開始タイムスタンプと終了タイムスタンプを持つ部分的/完全に重複するイベントを削除する

    4. PHPでMySQLテーブル構造を取得するにはどうすればよいですか?さらに、すべてのテーブルのリスト?