【ぶぶんインデックス】
部分インデックス とは?
最終更新:
💡 よく探す一部の行に、検索用の目印を
テーブルのうち、指定した条件を満たす行だけで作るデータベースのインデックス。未処理の注文など、一部の行をよく検索する場合に使える。検索条件からインデックスの対象条件を満たすと判断できる必要があり、速さや容量削減の効果はデータとクエリによる。
📌 このページのポイント
- WHEREで条件を指定し、対象となる行を絞る
- 検索する列と、対象を絞る列は別でもよい
- クエリが対象条件を満たすと判断できる必要がある
- 容量や性能の効果は、実際の環境で確認する
全部の行に、インデックスを作らないの?
どんなSQLで作るの?
PostgreSQLやSQLiteなら、例としてCREATE INDEX orders_active_user_idx ON orders(user_id) WHERE status = 'active';と書けるよ。検索用に登録する列はuser_idで、対象の行を絞る条件はstatus。索引の列と、条件で使う列が同じである必要はないんだ。
user_idを検索すれば、いつでも使われる?
対象が少なければ、必ず速く小さくなる?
対象の行を減らすことで容量や更新の負担を減らせる場合はあるよ。ただし行数の割合が、そのままファイル容量の削減率になるわけではないし、すべての検索が速くなるわけでもない。実行計画や処理時間、データの分布を確認して、必要な索引か判断しよう。
条件が変わる検索では、気を付けることは?
PostgreSQLは、クエリの条件から索引の条件を満たすと証明できる必要がある、と説明しているよ。似た意味でも条件の書き方や、パラメーターを使う計画によって判断できない場合がある。SQLiteにも利用条件がある。使うDBの資料と実行計画を確認し、索引を作っただけで安心しないでね。
まとめ:ざっくりこれだけ覚えればOK!
「部分インデックス」って出てきたら「条件に合う一部の行だけに作る検索用の目印」と思えばだいたいOK!
📖 おまけ:英語の意味
「Partial Index」 = 部分的なインデックス
💬 このページではWHERE条件で対象の行を絞るインデックスを扱うよ。文字列の先頭だけを索引にする話とは別なんだ。