MySQLでは、複合主キーを作成するときに、列X, Y, Z
、3つの列すべてが自動的にインデックスになります。 Postgresでも同じことが起こりますか?
(x, y, z)
で複合主キーを作成する場合、PostgreSQLは(x, y, z)
で1つのUNIQUE
複数列btreeインデックスを使用してこれを実装します。さらに、3つの列はすべてNOT NULL
(暗黙的に)です。これがPRIMARY KEY
とUNIQUE INDEX
の主な違いです。
データに対する明らかな制限に加えて、 マルチカラムインデックス は、x
、y
、z
の3つの個別のインデックスとは、クエリのパフォーマンスに多少異なる影響を及ぼします。
Dba.SEに関する関連ディスカッション:
index-only scansin Postgres 9.2 の新機能の例、ベンチマーク、ディスカッション、およびOutlook。
特に、(x, y, z)
の主キーは、x
、(x,y)
、または(x,y,z)
の条件を使用してクエリを最適化します。また、y
、z
、(y,z)
または(x,z)
のクエリにも役立ちますが、程度ははるかに低くなります。
後者の組み合わせでクエリを高速化する必要がある場合は、PK制約の列の順序を変更したり、1つ以上の追加のインデックスを作成したりできます。
いいえ、3列の主キーに対して1つのインデックスを取得します。
はい :
PostgreSQLは、一意の制約または主キーがテーブルに定義されている場合、一意のインデックスを自動的に作成します。インデックスは、主キーまたは一意制約を構成する列(該当する場合は複数列のインデックス)をカバーし、制約を適用するメカニズムです。