web-dev-qa-db-ja.com

PostgreSQL複合主キー

MySQLでは、複合主キーを作成するときに、列X, Y, Z、3つの列すべてが自動的にインデックスになります。 Postgresでも同じことが起こりますか?

36
user1467855

(x, y, z)で複合主キーを作成する場合、PostgreSQLは(x, y, z)で1つのUNIQUE複数列btreeインデックスを使用してこれを実装します。さらに、3つの列はすべてNOT NULL(暗黙的に)です。これがPRIMARY KEYUNIQUE INDEXの主な違いです。

データに対する明らかな制限に加えて、 マルチカラムインデックス は、xyzの3つの個別のインデックスとは、クエリのパフォーマンスに多少異なる影響を及ぼします。

Dba.SEに関する関連ディスカッション:

index-only scansin Postgres 9.2 の新機能の例、ベンチマーク、ディスカッション、およびOutlook。

特に、(x, y, z)の主キーは、x(x,y)、または(x,y,z)の条件を使用してクエリを最適化します。また、yz(y,z)または(x,z)のクエリにも役立ちますが、程度ははるかに低くなります。

後者の組み合わせでクエリを高速化する必要がある場合は、PK制約の列の順序を変更したり、1つ以上の追加のインデックスを作成したりできます。

85

いいえ、3列の主キーに対して1つのインデックスを取得します。

はい

PostgreSQLは、一意の制約または主キーがテーブルに定義されている場合、一意のインデックスを自動的に作成します。インデックスは、主キーまたは一意制約を構成する列(該当する場合は複数列のインデックス)をカバーし、制約を適用するメカニズムです。

1
Milen A. Radev