Postgresは、Bツリーインデックスで先頭以外の列を使用できますが、効率がはるかに低くなります。
最初の列が非常に選択的である場合(Aごとに数行のみ) )どちらのアクセス方法(縮小されたセットでの順次スキャンでも)が安価であるため、パフォーマンスの違いにほとんど気付かないでしょう。パフォーマンスへの影響は、Aあたりの行数とともに増加します 。
あなたが説明するケースでは、 (A, C, B)にインデックスを作成することをお勧めします または(C, A, B) (B 最後に来る)パフォーマンスを最適化する。このようにして、(A, B, C)でのクエリで最高のパフォーマンスを得ることができます。 および(A, C) 同様に。
インデックス内の列のシーケンスとは異なり、クエリ内の述語のシーケンスは重要ではありません。
これについては、dba.SEで詳細に説明しました:
ではないことに注意してください A, Cでリードするかどうかは関係ありません またはC, A 手元のケースの場合:
他にもいくつかの考慮事項がありますが、質問に関連するすべての詳細が含まれているわけではありません。