B+木インデックスとビットマップインデックスの比較【午前2 解説】
要点まとめ
- 結論:少数の異なる値を持つ列にはビットマップインデックスが有効である。
- 根拠:ビットマップインデックスは値ごとにビット列を持ち、少ない異なる値で効率的に検索できるため。
- 差がつくポイント:範囲検索や否定検索の適用範囲と、ビットマップの特性を正しく理解することが重要。
正解の理由
ビットマップインデックスは、列の値の種類(カーディナリティ)が少ない場合に特に効果的です。各値に対応するビットマップを用いて高速に論理演算が可能で、少数の異なる値を持つ列の検索に適しています。
一方、B+木インデックスは範囲検索に強いですが、ビットマップインデックスのようにビット演算で複数条件を高速に処理することはできません。
したがって、「少数の異なる値をもつ列への検索はビットマップインデックスの方が有効である」が正解です。
よくある誤解
ビットマップインデックスはすべての検索に万能と思われがちですが、カーディナリティが高い列では逆に効率が悪くなります。
また、B+木インデックスは否定検索に強いわけではなく、範囲検索に適している点を混同しやすいです。
解法ステップ
- B+木インデックスの特徴を確認する(範囲検索に強い)。
- ビットマップインデックスの特徴を確認する(少数の異なる値に強い、ビット演算で高速)。
- 各選択肢の内容をインデックスの特徴と照らし合わせる。
- 範囲検索や論理演算の適用範囲を理解し、正しい説明を選ぶ。
選択肢別の誤答解説
- ア: ANDやOR操作はビットマップインデックスの得意分野であり、B+木インデックスより有効とは言えません。
- イ: BETWEENによる範囲指定検索はB+木インデックスが得意で、ビットマップインデックスは不向きです。
- ウ: NOTを用いた否定検索はB+木インデックスが特に有利とは限らず、ビットマップインデックスでもビット反転で対応可能です。
- エ: 少数の異なる値を持つ列への検索はビットマップインデックスが効率的で正しい。
補足コラム
ビットマップインデックスは特にデータウェアハウスやOLAP環境で多用されます。カーディナリティが低い列(性別やフラグなど)に適用すると、複数条件のAND/OR検索が高速に行えます。
一方、B+木インデックスはトランザクション処理系での範囲検索や単一キー検索に適しています。
FAQ
Q: ビットマップインデックスはどんな場合に使うべきですか?
A: 少数の異なる値を持つ列で、複数条件の論理演算を多用する場合に効果的です。
Q: B+木インデックスは範囲検索に強いのはなぜですか?
A: B+木は葉ノードが連結リスト状になっており、範囲内の連続したデータを効率的に読み出せるためです。
関連キーワード: B+木インデックス、ビットマップインデックス、カーディナリティ、範囲検索、論理演算、データベースインデックス