Postgresql では、必要に応じて、次のように 1 つの列ではなく列のグループを使用して主キーを定義できます。
PRIMARY KEY(a_id, b_id)
しかし、この定義における列の順序は重要ですか? 上記と下記の間に実際的な違いはありますか?
PRIMARY KEY(b_id, a_id)
ドキュメントではこの点について直接言及されていません。順序は重要ではないと示唆されており、information_catalog テーブルをクエリしても、パラメータの順序の違いを示すものは何も表示されません。
しかし、\d
代替定義を使用する 2 つのテーブルでコマンドを使用すると、出力で説明されている列の順序は変わります。pg_catalog
主キー定義の順序を保持するものがあるようですが、これは 2 つの定義の間に機能上の違いがあることを意味しますか?
ありがとう
答え1
しかし、この定義の列の順序は重要ですか? 上記と下記の間に実際的な違いはありますか?
内の列の順序は、PRIMARY KEY
基礎となる b-tree インデックスがその順序の属性を使用して作成されるため重要でありUNIQUE
、インデックス検索の効率に影響します。通常は、最も選択性の高い属性を最初に指定します。これはパフォーマンスにのみ影響し、クエリの意味は変わりません。
ありませんセマンティック違いは、UNIQUE (a, b)
を意味するからですUNIQUE (b,a)
。