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

実行速度の遅いPostgresクエリ

    速度低下の原因は、PostgreSQLがネストされたループ結合を選択する原因となる行数の見積もりが悪いことです。ほとんどすべての時間は、hfj_res_linkのインデックススキャンに費やされます。 、1113回繰り返されます。

    私の最初の試みは、ANALYZE hfj_spidx_dateです。 それが役立つかどうかを確認してください。はいの場合は、自動分析がそのテーブルをより頻繁に処理するようにしてください。

    次の試みは

    SET default_statistics_target = 1000;
    

    次にANALYZE 上記のように。それが役立つ場合は、ALTER TABLEを使用してください STATISTICSを増やす hash_identityで およびsp_value_high 列。

    それでも問題が解決せず、PostgreSQLの最新バージョンを使用している場合は、拡張統計を試すことができます。 :

    CREATE STATISTICS myparamsda2_stats (dependencies)
       ON hash_identity, sp_value_high FROM hfj_spidx_date;
    

    次に、ANALYZE テーブルをもう一度見て、それが役立つかどうかを確認してください。

    それでも問題が解決せず、見積もりを正しく取得できない場合は、別の角度から試してみる必要があります。

    CREATE INDEX ON hfj_res_link (target_resource_id, src_resource_id);
    

    これにより、インデックススキャンが大幅に高速化され、良好な応答時間が得られます。

    最後に、上記のいずれにも影響がない場合は、このクエリでネストされたループ結合を禁止するという基本的な方法を使用できます。

    BEGIN;
    SET LOCAL enable_nestloop = off;
    SELECT /* your query goes here */;
    COMMIT;
    



    1. SalesforceSOQLでSQLServerを使用するためのヒント

    2. SQLDeveloper4.1.3がリリースされました

    3. テキストを含むSQLServerIDENTITY列

    4. 別のユーザーとしてのFabricとSudo