B+木とは?ビープラスき
B+木とは、内部ノードにはキーと分岐だけを置き、実データや行の位置は葉ノードにだけ持ち、葉どうしをキー順のポインタで連結したB木の変形。関係データベースの索引の標準構造で、どの葉へも同じ段数でたどり着ける平衡木として保たれる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
索引はメモリではなくディスク上に置かれ、読み書きはブロック単位で起きる。そこで1ノードを1ブロックに収めて分岐数を大きく取り、木を浅くすることでアクセス回数そのものを減らす設計になっている。さらに業務の問合せは「4月分の受注」のような範囲指定が主役なので、葉を順序どおり連結して横にたどれる形にした。物理データベース設計で索引を選ぶ根拠は、この構造の得手不得手から出てくる。
具体例
PostgreSQL・Oracle Database・MySQL(InnoDB)のいずれも既定の索引はB+木で、InnoDBは主キーのB+木の葉に行そのものを格納する(クラスタ索引)。受注日に索引があれば、4月1日から4月30日までの受注は開始位置の葉まで降りたあと、葉の連結を横にたどるだけで読める。
試験での引っ掛け
範囲検索・整列・前方一致に強い一方、値がぴたり一致する検索の一撃の速さではハッシュ索引に劣る。後方一致(LIKE '%品')や列に関数を掛けた条件では使えない。複合索引は先頭の列から順に条件が揃っていないと効かない。葉が分割されても両方のノードは同じ深さに保たれ、葉の連結順序はキー順のまま維持される。
関連用語
出た過去問
出典:平成30年度 春期 データベーススペシャリスト試験 午前Ⅱ 問15(IPA)
B+木インデックスとビットマップインデックスを比較した説明のうち、適切なものはどれか。
正解:少数の異なる値をもつ列への検索は、ビットマップインデックスの方が有効である。
要点:値の種類が少ない列にはビットマップインデックスが有効
ビットマップインデックスは、列がとり得る値ごとに行の該当有無をビット列で表す方式である。値の種類(カーディナリティ)が少ないほどビット列の本数が少なく済んで効率がよく、性別や区分コードのような列に向いている。
出典:令和5年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問4(IPA)
B+木インデックスが定義されている候補キーを利用して、1件のデータを検索するとき、データ総件数Xに対するB+木インデックスを格納するノードへのアクセス回数のオー…
正解:log X
要点:B+木の探索は木の高さ分、つまり対数オーダー
B+木は根から葉へ向かって多分岐でたどる平衡木で、木の高さはデータ件数の対数に比例する。検索は根から葉まで1経路をたどるだけなので、アクセス回数のオーダーは件数の対数になる。よってイが正しい。
出典:令和5年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問13(IPA)
"部品"表のメーカーコード列に対し、B+木インデックスを作成した。これによって、"部品"表の検索の性能改善が最も期待できる操作はどれか。ここで、部品及びメーカー…
正解:メーカーコードの値が4001以上、4003以下の部品を検索する。
要点:B+木索引が効くのは値の順序を活かせる範囲検索
B+木は葉ノードがキー値の順に並んでいるため、範囲の下限を索引で探し当てた後は葉をたどるだけで該当行を集められる。一方、否定条件やNULL以外といった条件は対象がほぼ全件に及ぶので、索引を経由するより表を直接走査したほうが速く、性能改善は期待できない。よってウが最も効果を見込める。
出典:令和6年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問3(IPA)
関係データベースのテーブルにレコードを1件追加したところ、インデックスとして使う、B+木のリーフノードCがノードC1とC2に分割された。ノード分割後のB+木構造…
正解:選択肢イ:AがB,C1,C2,Dの4ノードを指し、B↔C1↔C2↔Dの順で連結。
要点:リーフ分割後も2つとも親直下、リーフ列はキー順連結
B+木でリーフがあふれて分割されると、分割後の2つのリーフはどちらも親(中間ノード)から直接ポインタで参照される。親に空きがある前提なので、親へキーとポインタを1つ追加するだけで済み、それ以上は上位へ波及しない。またB+木のリーフはキー順の双方向リストでつながっているため、分割後もキーの順序どおりに前後のリーフと連結し直される。この2条件を同時に満たす構造が正解となる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。