(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つ以上の追加のインデックスを作成したりすることができます。参照:
- 複合インデックスは、最初のフィールドのクエリにも適していますか?