発展インデックスの種類

部分インデックス

定義

部分インデックス(部分索引)とは、WHERE句のような条件を付けて特定行のみをインデックス化する方式で、サイズが小さく更新コストも低い。

「必要なところだけ」の小さいインデックス

部分インデックスは、WHERE句のような条件を付けて「該当する行だけ」をインデックスに含めます。 全体のごく一部にしかクエリが刺さらない場合、インデックスをフルサイズで作るのは無駄。 部分インデックスならサイズも更新コストも大幅に減らせます。

部分インデックス
SQL
-- 通常インデックス(全行を含む)
CREATE INDEX idx_users_email
  ON users (email);

-- 検索クエリ
SELECT *
FROM users
WHERE email = 'alice@example.com'
  AND deleted_at IS NULL;
効果

全 10 件を対象とするインデックス。削除済みユーザーの分もインデックスに含まれ、その分だけ肥大化する。

インデックス (email)
エントリ 10 / 10

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

email
deleted_at
→ 行ID
alice@example.comNULL(1,0)
bob@example.com2025-06-01(1,1)
carol@example.comNULL(1,2)
dave@example.comNULL(1,3)
eve@example.com2025-05-20(2,0)
frank@example.comNULL(2,1)
grace@example.com2025-04-10(2,2)
henry@example.comNULL(2,3)
ivy@example.comNULL(3,0)
jack@example.comNULL(3,1)
論理削除された行を除外して「アクティブなユーザーだけのインデックス」を作る典型例。インデックスサイズと更新コストを大きく減らせる。

典型的なユースケース

  • 論理削除された行を除外(最頻): (email) WHERE deleted_at IS NULL のように、ソフトデリートを採用したテーブルで「アクティブ行だけ」のインデックスを作る
  • 特定ステータスの行だけの検索: (order_id) WHERE status = 'pending' のように、頻繁に引く一部の状態だけをインデックス化
  • NULLでない値だけのユニーク: UNIQUE (email) WHERE email IS NOT NULL のように、NULLは許容しつつ入力された値だけ一意にしたいとき

注意点

  • クエリの条件と部分インデックスの条件が一致する必要がある。少しでも違うと使われない
  • 統計情報の見え方も変わるので、EXPLAINで実際に使われているか確認する

よくある疑問

Q.部分インデックスは全てのRDBMSで使える?
A.多くの主要RDBMSがネイティブでサポートしますが、対応していないRDBMSもあります。その場合は生成カラムなど別の仕組みで擬似的に実現するのが一般的です。使いたい場合はまず対象RDBMSの仕様を確認してください。
Q.どんなときに部分インデックスが有効?
A.「特定の状態の行だけをよく引く」「NULLでない値だけをユニークにしたい」「大量の履歴データの中でアクティブな一部だけをよく検索する」など、対象が全体の一部に偏っているケース。

関連トピック

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Amazon で見る →

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

オンライン個別指導

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

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

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