(x, y, z)で複合主キーを作成する場合 、PostgreSQLは1つのUNIQUEの助けを借りてこれを実装します (x, y, z)の複数列のbtreeインデックス 。さらに、3つの列はすべてNOT NULLです。 (暗黙的に)、これがPRIMARY KEYの主な違いです およびUNIQUE INDEX 。
データに対する明らかな制限に加えて、複数列のインデックスは、xの3つの個別のインデックスとは、クエリのパフォーマンスに多少異なる影響を及ぼします。 、y およびz 。
dba.SEに関する関連ディスカッション:
- PostgreSQLでのインデックスの動作
インデックスのみのスキャンの新機能に関する例、ベンチマーク、ディスカッション、および見通し Postgres9.2で。
特に、(x, y, z)の主キー xの条件でクエリを高速化します 、(x,y) または(x, y, z) 最適に。 yでのクエリにも役立ちます 、z 、(y,z) または(x,z) しかし、それほどではありません。
後者の組み合わせでクエリを高速化する必要がある場合は、PK制約の列の順序を変更したり、1つ以上の追加のインデックスを作成したりすることができます。参照:
- 複合インデックスは、最初のフィールドのクエリにも適していますか?