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

PostgreSQLが時々悪いクエリプランを選択しないようにする

    クエリプランナーが悪い決定を下した場合、それは主に2つのことのいずれかです。

    1。 統計 不正確です。

    ANALYZEを実行しますか 足りる? VACUUM ANALYZEを組み合わせた形でも人気 。自動バキュームがオンになっている場合(これは現代のPostgresのデフォルトです)、ANALYZE 自動的に実行されます。ただし、次のことを考慮してください:

    • 通常のVACUUMANALYZEは9.1でも推奨されていますか?

    テーブルが大きい場合 データの配布は不規則です 、default_statistics_targetを上げる 役立つかもしれません。むしろ、関連する列(WHEREの列)の統計ターゲットを設定するだけです。 またはJOIN クエリの句、基本的に):

    ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400;  -- calibrate number
    

    ターゲットは0から10000の範囲で設定できます;

    ANALYZEを実行します その後も(関連するテーブルで)。

    2。 コスト設定 プランナーの見積もりはオフです。

    マニュアルの「プランナーコスト定数」の章をお読みください。

    default_statistics_targetの章をご覧ください およびrandom_page_cost この一般的に役立つPostgreSQLWikiページで。

    他にも多くの理由が考えられますが、これらが最も一般的な理由です。



    1. テーブルの行数を取得する最も効率的な方法

    2. パフォーマンスを向上させるためのクエリの書き換え

    3. SQLServerでONDELETECASCADEを使用して外部キー制約を作成する方法-SQLServer/TSQLチュートリアルパート80

    4. SQL ServerでのSIGN()の例