2章: where句
11.部分インデックス
まとめ
部分インデックスとは、
テーブル全体ではなく、特定の条件(WHERE句)を満たす行だけに作成するインデックス。
目的としては、
- よく使われる 特定条件の検索を高速化
- 不要な行をインデックスに含めないことでサイズとコストを削減 するため
典型例
未処理データだけを頻繁に検索するケース(キュー処理など)
SELECT message
FROM messages
WHERE processed = 'N'
AND receiver = ?
部分インデックスの作成例:
CREATE INDEX messages_todo
ON messages (receiver)
WHERE processed = 'N';
効果
- インデックスには processed = 'N' の行だけが入る
- インデックス上では
processedが常に'N'のため
→ インデックス列から除外できる
結果
- 行数が減る(縦方向)
- 列数が減る(横方向)
- インデックスが非常に小さく高速
特徴・利点
- テーブルが巨大になっても、
未処理データが少なければインデックスサイズはほぼ増えない - 定数条件を含むWHERE句に特に有効
制限事項
- 使用できる関数は 確定的関数のみ
- DB製品によって制約が異なる
※SQL Server: 関数や OR 条件が使えない
結論
よく使う条件の列だけを対象にした、小さくて速いインデックス