ビットマップ索引(bitmap index)

分類
テクノロジ系 データベース
出る試験
基本情報応用情報
重要度
★★★☆☆

値ごとに0と1の並びを持つ索引。値の種類が少ない列に向き、複数条件の組合せに強い。

もう少し詳しい説明

インデックス(索引)には、作り方がいくつかあります。試験に出るのは2つです。

向いている列得意なこと
B+木索引値の種類が多い列1件を探す、範囲で探す
ビットマップ索引値の種類が少ない列複数条件の組合せ

ふつう「索引」と言えばB+木のほうです。ビットマップ索引は、使いどころが限られます。

どういう作りか

値の種類ごとに、0と1の並びを1本ずつ持ちます。

社員表の「性別」列が、上から 男・女・男・男・女 と並んでいるとします。

性別男女行1男102女013男104男105女01
左が社員表の性別の列、右の2つがビットマップです。表の1行につき1ビットなので、縦の長さは行数と同じになります。男の行には男の側に1が立ち、女の行には女の側に1が立ちます。値の種類が2つなら並びも2本ですが、社員番号のように行ごとに違う値だと行数と同じ本数が要ります。

「男を探す」なら、男の列で1が立っている行を拾えばすみます。上の例では1行目・3行目・4行目です。

値そのものを比べていません。 0か1かを見ているだけなので、1件ずつ中身を取り出して照らし合わせる必要がありません。

強いのは「組合せ」

ここがビットマップ索引の持ち味です。

「性別が男、かつ、血液型がA型」を探したいとします。血液型の列にもビットマップを作っておき、2本の並びをANDで重ねます。

性別血液男A型AND行1男A1112女A0103男B1004男A1115女O000
「男かつA型」を探します。右の3列を横に見てください。男の列とA型の列が両方1の行だけ、ANDの列に1が立ちます。1行ずつ中身を調べる必要がなく、2本の並びを重ねるだけで答えが出ます。条件が3つ4つと増えても、重ねる回数が増えるだけです。

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