ビットマップ索引(bitmap index)
値ごとに0と1の並びを持つ索引。値の種類が少ない列に向き、複数条件の組合せに強い。
もう少し詳しい説明
インデックス(索引)には、作り方がいくつかあります。試験に出るのは2つです。
| 向いている列 | 得意なこと | |
|---|---|---|
| B+木索引 | 値の種類が多い列 | 1件を探す、範囲で探す |
| ビットマップ索引 | 値の種類が少ない列 | 複数条件の組合せ |
ふつう「索引」と言えばB+木のほうです。ビットマップ索引は、使いどころが限られます。
どういう作りか
値の種類ごとに、0と1の並びを1本ずつ持ちます。
社員表の「性別」列が、上から 男・女・男・男・女 と並んでいるとします。
「男を探す」なら、男の列で1が立っている行を拾えばすみます。上の例では1行目・3行目・4行目です。
値そのものを比べていません。 0か1かを見ているだけなので、1件ずつ中身を取り出して照らし合わせる必要がありません。
強いのは「組合せ」
ここがビットマップ索引の持ち味です。
「性別が男、かつ、血液型がA型」を探したいとします。血液型の列にもビットマップを作っておき、2本の並びをANDで重ねます。
ORでも同じ形です。重ねるときの演算が変わるだけで、やることは変わりません。論理回路のANDとORが、そのまま検索の道具になっています。
B+木索引で同じことをすると、それぞれの索引で行の位置を集めてから、突き合わせることになります。条件が増えるほど手間が増えます。
向かない場面
値の種類が多い列に使うと、かえって不利になります。
社員番号のように行ごとにすべて違う値だと、1,000行なら1,000本の並びが要ります。しかも各並びには1が1個しか立っていません。ほとんどが0の表を1,000枚持つことになります。
更新が多い列も向きません。1行の値が変われば、関係する並びを書き換えます。男から女へ変われば、2本の並びを直します。
さらに、1本の並びは多くの行にまたがっています。書き換えている間、そこに含まれるほかの行の更新も待たされます。更新が集中する業務システムでは、これが詰まりの原因になります。
分析用に向く理由
ここまでをまとめると、ビットマップ索引が合う場面が見えてきます。
| 条件 | 理由 |
|---|---|
| 値の種類が少ない列 | 並びの本数が少なくてすむ |
| 更新がほとんどない | 書き換えの不利が出ない |
| 条件を組み合わせて絞り込む | ANDとORで重ねられる |
データウェアハウス(分析のために、過去のデータをためておく仕組み)が、ちょうどこの条件に当てはまります。 更新せずにためておき、性別・地域・商品分類といった種類の少ない列で、いろいろな組合せで集計する。ビットマップ索引が使われるのは、こうした場面です。
逆に、日々の業務システムには向きません。更新が多く、社員番号や伝票番号のような種類の多い列で1件を探すことが中心だからです。そこはB+木索引の領分です。
試験ではこう出る
科目A(旧・午前)では、向いている列がそのまま問われます。「値の種類が少ない列」が答えで、「一意な値をもつ列」は誤りです。
B+木索引との使い分けも出ます。1件や範囲を探すならB+木、組合せで絞るならビットマップです。
更新に弱いという点も選択肢に出ます。
応用情報では、データウェアハウスの設計の中で出ます。更新しない前提だからビットマップ索引を選べる、という流れです。
関連する用語
- インデックス
- 索引の考え方そのもの。ビットマップはその作り方のひとつ
- データウェアハウス・データマート・データマイニング
- 更新が少なく分析が中心。ビットマップ索引が効く場面
- 関係データベース
- 表の列に対して索引を張る
- 論理回路
- AND・ORの計算。ビットマップ索引の絞り込みはこれそのもの
ミニクイズ
ビットマップ索引が有効に働く列として、最も適切なものはどれか。
正解は 4番:性別や血液型のように、値の種類が少ない列
ビットマップ索引は、値の種類ごとに0と1の並びを1本ずつ用意します。値の種類が少ないほど並びの本数が少なくてすみ、容量も小さくなります。社員番号のように行ごとに異なる値だと、行数と同じ本数の並びが必要になり、かえって大きくなります。長い文章が入る列も値の種類が多いため向きません。更新が多い列も不向きで、1行の値が変わると関係する並びを書き換える必要があり、その間ほかの更新を待たせることになります。
この分野をまとめて解く → データベースのミニテスト(全35問)
最終更新:2026-10-20