複合インデックス
複合インデックス(マルチカラムインデックス)とは、2つ以上のカラムを組み合わせて1つのインデックスとして構築したもので、先頭カラム側の条件から順に効く。
複合インデックスは「辞書順」で並ぶ
複合インデックス (A, B) は、まずAで並び替え、A内でBの順に並びます。 辞書の「アイウエオ」で1文字目→2文字目の順に並ぶのと同じです。 だから先頭カラムAが条件に無いとインデックスをたどれず、Bだけで絞り込むことはできません。
-- インデックス定義 CREATE INDEX idx_last_first ON people (last, first); -- 検索クエリ SELECT * FROM people WHERE last = 'Sato';
先頭カラム last で絞り込むので、辞書の「さ」行を探すのと同じ。連続した範囲だけを読む。
(last, first)※ ここでは分かりやすさのためソート済みリスト風に描いているが、 実際はB-treeで保持されるので探索は O(log N)。 詳しくは B-treeの仕組み へ。
(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つは統合できないか検討する
よくある疑問
関連トピック
もっと学びたい方へ(おすすめ書籍)
テーブル設計と正規化、パフォーマンス考慮のインデックス設計まで実務レベルで学べる定番書。第2版ではクラウド対応も強化。
SQLの本質的な使い方と、インデックスが効くクエリの書き方を学べる。ウィンドウ関数など現代SQLも網羅。
実務でやりがちなSQL・DB設計のアンチパターンとその回避策を体系的に学べる。
リレーショナルモデルの理論から、インデックス設計を含む実務で使えるSQLまで解説。
PostgreSQLの内部構造・ストレージ・インデックス機構を丁寧に解説。設計と運用計画の鉄則が学べる。
IPAデータベーススペシャリスト試験の総合対策書。インデックス関連は本サイトと合わせて学ぶと理解が深まる。
本セクションはAmazonアソシエイトのリンクを含みます。
もっと深くDBを学びたい方へ。
たいてっくが、SQL・データベース設計・パフォーマンスチューニング・ IPAデータベーススペシャリスト対策まで、1対1で学習をサポートします。まずは無料相談から。