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