基礎インデックスの種類

複合インデックス

定義

複合インデックス(マルチカラムインデックス)とは、2つ以上のカラムを組み合わせて1つのインデックスとして構築したもので、先頭カラム側の条件から順に効く。

複合インデックスは「辞書順」で並ぶ

複合インデックス (A, B) は、まずAで並び替え、A内でBの順に並びます。 辞書の「アイウエオ」で1文字目→2文字目の順に並ぶのと同じです。 だから先頭カラムAが条件に無いとインデックスをたどれず、Bだけで絞り込むことはできません。

複合インデックスとカラム順
SQL
-- インデックス定義
CREATE INDEX idx_last_first
  ON people (last, first);

-- 検索クエリ
SELECT *
FROM people
WHERE last = 'Sato';
インデックスが効く

先頭カラム last で絞り込むので、辞書の「さ」行を探すのと同じ。連続した範囲だけを読む。

インデックス (last, first)
先頭でピンポイント · 3件該当

※ ここでは分かりやすさのためソート済みリスト風に描いているが、 実際はB-treeで保持されるので探索は O(log N)。 詳しくは B-treeの仕組み へ。

last
first
→ 行ID
ItoKen(1,2)
SatoAki(2,1)
SatoKen(1,0)
SatoYuki(3,0)
SuzukiAki(2,0)
SuzukiKen(3,2)
SuzukiYuki(2,3)
TanakaAki(3,1)
TanakaKen(2,2)
TanakaYuki(1,3)
YamadaKen(1,1)
該当行DBが読んだ行
インデックス (last, first) が定義されている。先頭カラムから連続して条件が指定されるほどインデックスが効く。

先頭カラム限定原則

複合インデックス (A, B, C) が効くのは以下のパターンです:

  • WHERE A = ?
  • WHERE A = ? AND B = ?
  • WHERE A = ? AND B = ? AND C = ?

逆に、以下では基本的に効きません:

  • WHERE B = ?(Aが指定されていない)
  • WHERE C = ?
  • WHERE B = ? AND C = ?

設計指針

  • 頻度の高い検索パターンをリストアップ → 共通の先頭カラムを見つける
  • 等価比較 → 範囲比較 → ソートの順にカラムを並べると効果的
  • 不要な複合を大量に作らない。似た2つは統合できないか検討する

複合キーが自然に生まれる場面 — 多対多の連関実体

複合インデックスの典型的な出現源が、 多対多を連関実体で分解した中間テーブル だ。例えば「学生 × 科目」を分解した履修登録テーブルでは、 主キーが (学籍番号, 科目ID) の複合主キーになる。 この主キーはそのまま (学籍番号, 科目ID) の複合インデックスを兼ねる。

カラム順は「よく単独で検索するほう」を先頭に置くのが定石。 「特定学生の履修科目一覧」を頻繁に引くなら (学籍番号, 科目ID)、 「特定科目の履修者一覧」を頻繁に引くなら (科目ID, 学籍番号)。 両方の検索がバランス良く発生するなら、逆順の複合インデックスを追加で貼るのが実務での判断。

よくある疑問

Q.複合インデックスの順序はどう決めればいい?
A.「頻繁に単独で検索するカラム」「絞り込みが強い(カーディナリティが高い)カラム」を先頭に置くのが基本です。逆順にすると効かないクエリが増えます。
Q.3カラム以上の複合インデックスは効果ありますか?
A.はい。ただしカラム数が増えるほどインデックスサイズと更新コストが増えるため、実際のクエリパターンを見て必要な組み合わせだけを作るのが定石です。
Q.先頭以外のカラム条件でも効くケースはある?
A.RDBMSやオプティマイザによっては「スキップスキャン」的な最適化が働くこともありますが、期待するべきではありません。カラム順の設計を正しく行うのが原則です。

関連トピック

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

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

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

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

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

Amazon で見る →
SQLアンチパターン 第2版
Bill Karwin

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

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

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

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

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

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

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

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

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

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

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

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

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

Amazon で見る →

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

オンライン個別指導

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

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

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