45

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

4

3 に答える 3

117

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

データに対する明らかな制限に加えて、複数列インデックスxは、 、 、yおよびの 3 つの個別のインデックスとはクエリのパフォーマンスに多少異なる影響を与えますz

関連する dba.SE の議論:

Postgres 9.2のインデックスオンリー スキャンの新機能に関する例、ベンチマーク、ディスカッション、および見通しを示します。

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

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

于 2012-07-05T21:03:35.563 に答える
2

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

于 2012-07-05T20:54:43.230 に答える
0

はい

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

于 2012-07-05T20:42:48.663 に答える