関係データベースのテーブルにレコードを1件追加したところ,インデックスとして使う,図のB^+木のリーフノードCがノードC1とC2に分割された。
ノード分割後のB^+木構造はどれか。
ここで,矢印はノードへのポインタとする。
また,中間ノードAには十分な空きがあるものとする。
正答2
解説
正解は2です。
B^+木は、データベースのインデックスによく使われる多分木です。
中間ノードは子ノードへのポインタをもち、リーフノード同士はキーの順に双方向のポインタで連結されています。
図の分割前の構造では、中間ノードAがリーフB、C、Dを指し、リーフはB、C、Dの順に左右の矢印でつながっています。
リーフCがC1とC2に分割されたあとも、この二つの性質が保たれている構造を選びます。
【選択肢別解説】
1:× AからB、C1、Dへのポインタはありますが、C2へのポインタがありません。
中間ノードからC2のデータへ直接たどれないので、B^+木として不適切です。
2:○ AからB、C1、C2、Dの4つすべてへポインタがあり、リーフはB、C1、C2、Dの順に双方向で連結されています。
分割後のB^+木として正しい構造です。
3:× AからはB、C1、D、C2の4つを指していますが、リーフの連結順がB、C1、D、C2になっています。
C2のキーはDより小さいので、キー順の連結が崩れています。
4:× C2がC1の下にぶら下がっており、AからC2へのポインタがありません。
リーフはすべて同じ深さに並ぶ必要があり、この形はB^+木の構造を満たしません。
【ポイント】
B^+木のリーフ分割では、親ノードに新しいリーフへのポインタを追加し、リーフ間の連結もキー順に張り直します。
リーフがすべて同じ深さにそろうバランス木である点が特徴です。