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

Postgresクエリの最適化(インデックススキャンの強制)

    テストの場合 目的は、シーケンシャルスキャンを「無効にする」ことでインデックスの使用を強制することができます-現在のセッションでのみ最適です:

    SET enable_seqscan = OFF;
    

    しない 生産的なサーバーでこれを使用します。詳細はこちらのマニュアルをご覧ください。

    シーケンシャルテーブルスキャンを実際に無効にすることはできないため、「無効化」を引用しました。しかし、Postgresには他の利用可能なオプションが推奨されます。これにより、(metric_id, t)の複数列のインデックスが証明されます できます 使用する-先頭の列のインデックスほど効果的ではありません。

    PRIMARY KEYの列の順序を切り替えると、おそらくより良い結果が得られます。 (およびそれをカーテンの後ろに実装するために使用されるインデックス)to (t, metric_id) 。または、追加を作成します そのような逆の列を持つインデックス。

    • 複合インデックスは、最初のフィールドのクエリにも適していますか?

    通常、手動による介入によって、より適切なクエリプランを強制する必要はありません。 enable_seqscan = OFFを設定する場合 多くのにつながります より良い計画ですが、データベースに何かが正しくない可能性があります。この関連する答えを検討してください:

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


    1. OracleDatabaseでサポートされている言語のリスト

    2. PostgreSQL:大文字と小文字を区別しない文字列の比較

    3. データベースのスケーリングのベストプラクティス:パート2

    4. SQL Serverクエリでテーブル構造を表示するにはどうすればよいですか?