RDBMSでテーブルにPRIMARY KEYを定義したとき、インデックスについて正しい説明はどれか?
解説
正解は「インデックスは自動的に作成される」です。PRIMARY KEY(主キー)には「値が重複しないこと(一意性)」と「NULLでないこと」という2つの制約があります。DBMSがこの一意性を高速に検証するためにはインデックスが不可欠であり、そのためPRIMARY KEYを定義すると自動的に一意インデックス(UNIQUE INDEX)が作成されます。これはMySQL・PostgreSQL・SQL Server・Oracleなど主要なRDBMSに共通する動作です。各DBMSでの具体的な挙動MySQL(InnoDB)では、PRIMARY KEYは「クラスタードインデックス」になります。これはテーブルのデータ自体がPKの順序で物理的に格納される仕組みです。PKを定義しない場合、InnoDBは内部的に隠し主キーを自動生成しますが、パフォーマンスや管理の観点から明示的にPKを定義するのが望ましいです。PostgreSQLでもPKを定義するとbtree方式の一意インデックスが自動作成されます。\d テーブル名コマンドで確認できます。UNIQUE制約との違いUNIQUE制約もPKと同様に自動でインデックスが作成されますが、大きな違いが1つあります。UNIQUE制約はNULLを許容するのに対し、PRIMARY KEYはNULLを許容しません。また、PRIMARY KEYはテーブルに1つしか定義できませんが、UNIQUE制約は複数定義できます。まとめると、PRIMARY KEYを定義すれば自動でインデックスが付くため、同じカラムに対して重ねてCREATE INDEXを実行する必要はありません。初心者がやりがちなミスとして「PKのカラムに別途インデックスを追加してしまう」というものがありますが、これは無駄なインデックスを増やすだけなので避けましょう。