テストの場合 目的は、シーケンシャルスキャンを「無効にする」ことでインデックスの使用を強制することができます-現在のセッションでのみ最適です:
SET enable_seqscan = OFF;
しない 生産的なサーバーでこれを使用します。詳細はこちらのマニュアルをご覧ください。
シーケンシャルテーブルスキャンを実際に無効にすることはできないため、「無効化」を引用しました。しかし、Postgresには他の利用可能なオプションが推奨されます。これにより、(metric_id, t)
の複数列のインデックスが証明されます できます 使用する-先頭の列のインデックスほど効果的ではありません。
PRIMARY KEY
の列の順序を切り替えると、おそらくより良い結果が得られます。 (およびそれをカーテンの後ろに実装するために使用されるインデックス)to (t, metric_id)
。または、追加を作成します そのような逆の列を持つインデックス。
- 複合インデックスは、最初のフィールドのクエリにも適していますか?
通常、手動による介入によって、より適切なクエリプランを強制する必要はありません。 enable_seqscan = OFF
を設定する場合 多くのにつながります より良い計画ですが、データベースに何かが正しくない可能性があります。この関連する答えを検討してください:
- PostgreSQLが時々悪いクエリプランを選択しないようにします