ユニークインデックス
ユニークインデックスとは、対象カラム(複合の場合は組合わせ)の値が重複しないことを保証するインデックスであり、探索の高速化と制約の両方を実現する。
「同じ値は入れさせない」という保証
ユニークインデックスは検索の高速化に加え、そのカラムの値が重複しないことを保証する制約として機能します。 メールアドレス、ユーザー名、注文番号のように「1つしかあってはいけない値」に付与します。
-- インデックス定義
CREATE UNIQUE INDEX idx_users_email
ON users (email);
-- 挿入
INSERT INTO users(email)
VALUES ('a@example.com');INSERT時、DBはまずUNIQUEインデックスを引いて既に同じ値があるか確認する。 存在すればエラーを返し、なければテーブルとインデックスに書き込む。
(email) UNIQUE※ ここでは分かりやすさのためソート済みリスト風に描いているが、 実際はB-treeで保持されるので探索は O(log N)。 詳しくは B-treeの仕組み へ。
O(log N) で走る。裏でどう動いているか
INSERT時、DBはまずインデックスを引いて「同じ値が既に存在しないか」を確認してから挿入します。 存在すればエラーを返し、無ければインデックスとテーブルの両方に書き込みます。 検索の高速化のためのインデックスが、そのまま制約チェックにも使われる、賢い仕組みです。
使い所
- メールアドレスや外部システムのID(自然キー)
- 複合ユニーク: (user_id, role_id) のような組み合わせで一意にしたいペア
- 論理削除がある場合は「未削除の中で一意」にしたいことが多く、部分ユニークが検討候補
よくある疑問
関連トピック
もっと学びたい方へ(おすすめ書籍)
実務でやりがちなSQL・DB設計のアンチパターンとその回避策を体系的に学べる。
リレーショナルモデルの理論から、インデックス設計を含む実務で使えるSQLまで解説。
テーブル設計と正規化、パフォーマンス考慮のインデックス設計まで実務レベルで学べる定番書。第2版ではクラウド対応も強化。
SQLの本質的な使い方と、インデックスが効くクエリの書き方を学べる。ウィンドウ関数など現代SQLも網羅。
PostgreSQLの内部構造・ストレージ・インデックス機構を丁寧に解説。設計と運用計画の鉄則が学べる。
IPAデータベーススペシャリスト試験の総合対策書。インデックス関連は本サイトと合わせて学ぶと理解が深まる。
本セクションはAmazonアソシエイトのリンクを含みます。
もっと深くDBを学びたい方へ。
たいてっくが、SQL・データベース設計・パフォーマンスチューニング・ IPAデータベーススペシャリスト対策まで、1対1で学習をサポートします。まずは無料相談から。