基礎インデックスの種類

ユニークインデックス

定義

ユニークインデックスとは、対象カラム(複合の場合は組合わせ)の値が重複しないことを保証するインデックスであり、探索の高速化と制約の両方を実現する。

ユニークインデックスとは

ユニークインデックス (unique index) とは、 対象カラム (複合の場合はカラムの組) の値がテーブル全体で重複しないこと を保証するインデックスのこと。 通常のインデックスと同じく検索を高速化する一方で、 INSERT / UPDATE 時に「同じ値が既にあれば拒否する」制約チェックにも使われる。

メールアドレス・ユーザー名・注文番号のような「一意でなければならない値」 に貼るのが典型例。 SQL の UNIQUE 制約は内部的にユニークインデックスを作るので、両者は実質同じ仕組み。 主キーもユニークインデックスの一種 (NULL を許さない特殊版) と考えると整理しやすい。

「同じ値は入れさせない」という保証

ユニークインデックスは検索の高速化に加え、そのカラムの値が重複しないことを保証する制約として機能します。 メールアドレス、ユーザー名、注文番号のように「1つしかあってはいけない値」に付与します。

ユニークインデックスによる重複防止
SQL
-- インデックス定義
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の仕組み へ。

email
→ 行ID
a@example.com(1,1)
b@example.com(1,3)
c@example.com(1,0)
d@example.com(1,2)
テーブル users
物理配置(挿入順)
行ID
email
(1,0)c@example.com
(1,1)a@example.com
(1,2)d@example.com
(1,3)b@example.com
UNIQUEインデックスは検索の高速化と同時に、値の重複を防ぐ制約としても機能する。 INSERT時にインデックスで存在チェックが O(log N) で走る。

裏でどう動いているか

INSERT時、DBはまずインデックスを引いて「同じ値が既に存在しないか」を確認してから挿入します。 存在すればエラーを返し、無ければインデックスとテーブルの両方に書き込みます。 検索の高速化のためのインデックスが、そのまま制約チェックにも使われる、賢い仕組みです。

使い所

  • メールアドレスや外部システムのID(自然キー)
  • 複合ユニーク: (user_id, role_id) のような組み合わせで一意にしたいペア
  • 論理削除がある場合は「未削除の中で一意」にしたいことが多く、部分ユニークが検討候補

よくある疑問

Q.ユニークインデックスとUNIQUE制約は同じもの?
A.実装上はほぼ同じで、UNIQUE制約は内部的にユニークインデックスを作成します。DDLの書き方の違いくらいに考えて構いません。
Q.NULLは重複としてカウントされますか?
A.SQL標準では、NULL同士は互いに異なる値として扱われるため、複数のNULLが許容されます。ただしRDBMSによってはこの挙動が異なる場合があるため、使いたい仕様であれば事前に確認が必要です。
Q.主キーとユニークインデックスの違いは?
A.主キーはNULLを許さず、テーブルに1つだけ。ユニークインデックスはNULLを許し、複数貼れます。両方とも「重複させない」ための仕組みという点は共通です。

関連トピック

もっと学びたい方へ(おすすめ書籍)

SQLアンチパターン 第2版
Bill Karwin

実務でやりがちなSQL・DB設計のアンチパターンとその回避策を体系的に学べる。

Amazon で見る →
理論から学ぶデータベース実践入門
奥野幹也

リレーショナルモデルの理論から、インデックス設計を含む実務で使えるSQLまで解説。

Amazon で見る →
おすすめ
達人に学ぶDB設計徹底指南書 第2版
ミック

テーブル設計と正規化、パフォーマンス考慮のインデックス設計まで実務レベルで学べる定番書。第2版ではクラウド対応も強化。

Amazon で見る →
おすすめ
楽々ERDレッスン (CodeZine BOOKS)
羽生章洋

ER 図をどう「使える設計」に落とすか、実務の判断まで踏み込んだ入門書。エンティティの切り出しから多対多の扱いまで具体例が豊富。

Amazon で見る →
おすすめ
スッキリわかるSQL入門 第4版 ドリル256問付き!
中山清喬/飯田理恵子

ドリル 256 問を実際に打ちながら進める SQL の入門書。付属のブラウザ環境で演習できるので、SELECT から結合・集約までを環境構築で止まらずに通せる。

Amazon で見る →
達人に学ぶSQL徹底指南書 第2版
ミック

SQLの本質的な使い方と、インデックスが効くクエリの書き方を学べる。ウィンドウ関数など現代SQLも網羅。

Amazon で見る →
[改訂3版]内部構造から学ぶPostgreSQL
勝俣智成 ほか

PostgreSQLの内部構造・ストレージ・インデックス機構を丁寧に解説。設計と運用計画の鉄則が学べる。

Amazon で見る →
情報処理教科書 データベーススペシャリスト 2025年版
三好康之

IPAデータベーススペシャリスト試験の総合対策書。インデックス関連は本サイトと合わせて学ぶと理解が深まる。

Amazon で見る →
SQL実践入門 ── 高速でわかりやすいクエリの書き方
ミック

「なぜこの書き方が速いのか」を実行計画から説明する一冊。条件分岐・集約・結合・更新のそれぞれで、良い書き方と悪い書き方を対比しながら読める。

Amazon で見る →

本セクションはAmazonアソシエイトのリンクを含みます。

オンライン個別指導

もっと深くDBを学びたい方へ。

たいてっくが、SQL・データベース設計・パフォーマンスチューニング・IPAデータベーススペシャリスト対策まで、1対1で学習をサポートします。まずは無料相談から。

無料相談を予約する →
受講者の声 (DB・SQL コース)
menta レビュー原文を見る →
  • 教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。
    H 様DB・SQL コース受講
  • 体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。
    M 様DB・SQL コース受講
  • 大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。
    K 様DB・SQL コース受講