B-Tree・B+Tree構造とは?データを速く探すための木のような構造

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

B-Tree・B+Treeとは(全体像)

B-Treeは、たくさんのデータの中から目的のものを速く探すための、木のような構造だよー。ふつうの木と違って、1つの節にたくさんの目印(キー)を入れられるので、段数(深さ)が浅くて済むのー。

身近にたとえると、分厚い本の索引。1ページに多くの見出しが並ぶから、何百万件あっても数段たどれば目的に着く感じだよー。

押さえるのは、B-Treeは「2分木」ではない(多分木)こと、そしてB+Treeが範囲検索に強くてDBの索引の定番ということだよー。


詳しく:多分木であることとB+Treeだけ覚えれば戦える

ここが記事の心臓部。まずB-Treeの特徴を見ていこーね。

B-Treeの特徴

特徴内容
多分木1つの節にたくさんの目印(キー)を持てる(2分木ではない)
浅い100万件でも深さ3〜4段ほどで探せる
自動で平衡挿入や削除のたびにバランスを保つ

ここで一番のひっかけが「B-Treeは2分木(バイナリツリー)」という誤解。名前は似ているけれど、B-Treeは1つの節に複数の目印を持つ「多分木」だよー。だから浅く、ディスクの読み出しが少なくて速いのー。

次に、B+Tree(B-Treeの発展形)。

B+Treeの特徴

特徴内容
葉だけに実データいちばん下の節(葉)にだけ実データを置く
葉どうしをリンク葉が横につながっていて、範囲検索が速い
DBの定番RDBMSのインデックスで広く使われる

B+Treeは、葉どうしがつながっているので「〇〇以上△△以下」のような範囲検索が速い。だからデータベースの索引(インデックス)の標準として広く使われているのー。

なお、書き込みを速くすることに振ったLSM-Treeという別の構造もある(B-Treeとは別もの)よー。

わかりやすく言い換えると

要するに、分厚い本の索引でイメージするとラクだよー。

B-Tree … 1ページに多くの見出し(多分木)。だから数段で目的に着く(2分木ではない)

B+Tree … 見出しの実体は最後のページにまとめ、ページ同士をつなぐ(範囲検索が速い)

DBの定番 … B+Treeはデータベースの索引で広く使われる

つまり、「B-Treeは多分木(2分木ではない)」「B+Treeは範囲検索に強くDBの定番」、この2点が試験の急所なのー。


試験のツボ

🔴 一番出る:B-Treeの特徴

①1つの節にたくさんの目印を持つ多分木(2分木ではない)

②深さが浅く、自動でバランスを保つので速い

🔴 次に出る:B+Tree

①葉(いちばん下の節)だけに実データを置き、葉どうしをつなぐ

②範囲検索が速く、データベースの索引の定番

🟡 押さえると安定:LSM-Treeとの対比

①LSM-Treeは書き込みを速くすることに振った別の構造

②B-Tree/B+Treeとは別もの


よくある間違い

「B-Treeは2分木(バイナリツリー)である」→ ✗  B-Treeは1つの節に複数の目印を持つ多分木。2分木ではない。

「B+Treeは範囲検索が苦手である」→ ✗  B+Treeは葉どうしがつながり、範囲検索が速い。DBの索引の定番。

「LSM-TreeはB-Treeと同じものである」→ ✗  LSM-Treeは書き込みを速くすることに振った別の構造。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(B-Treeの特徴)

📝 オリジナル問題 1 B-Treeの特徴

B-Treeに関する次の記述のうち、正しいものはどれか。

  1. B-Treeは1つの節にたくさんの目印を持つ多分木で、浅い段数で速く探せる構造である
  2. B-Treeは1つの節に必ず1つの目印しか持てない2分木のことだとされているものである
  3. B-Treeは画面に木の絵を表示するための機能のことだとされているものである
  4. B-Treeはデータを必ず暗号化するための命令のことだとされているものである
データスラ
データスラ 解答・解説

解答は 1 だよー。

B-Treeは、1つの節にたくさんの目印(キー)を持つ多分木で、浅い段数で速く探せる構造なのー。分厚い本の索引が数段で引ける感じだよー。

選択肢2の「2分木」、選択肢3の「木の絵を表示」、選択肢4の「暗号化」はどれも誤りなのー。

選択肢判定理由
1多分木で浅く速い
22分木ではなく多分木
3木の絵を表示する機能ではない
4暗号化の命令ではない

オリジナル問題2(B+Tree)

📝 オリジナル問題 2 B+Tree

B+Treeに関する次の記述のうち、正しいものはどれか。

  1. B+Treeは範囲検索がとても苦手で、データベースでは使われないものだとされているものである
  2. B+Treeはデータを必ずすべて削除するための専用の命令のことだとされているものである
  3. B+Treeは葉だけに実データを置き葉をつなぐので、範囲検索が速くDBの索引の定番である
  4. B+Treeは画面の明るさを決めるための専用の設定のことだとされているものである
データスラ
データスラ 解答・解説

解答は 3 だよー。

B+Treeは、葉(いちばん下の節)だけに実データを置き、葉どうしをつなぐので、範囲検索が速く、データベースの索引の定番なのー。

選択肢1の「範囲検索が苦手」、選択肢2の「削除する命令」、選択肢4の「明るさの設定」はどれも誤りなのー。

選択肢判定理由
1範囲検索は得意
2削除する命令ではない
3葉にデータ+葉リンクで範囲に強い
4明るさの設定ではない

オリジナル問題3(LSM-Treeとの対比)

📝 オリジナル問題 3 LSM-Treeとの対比

B-TreeとLSM-Treeに関する次の記述のうち、正しいものはどれか。

  1. LSM-TreeはB-Treeとまったく同じもので、違いはないものだとされているものである
  2. LSM-Treeは書き込みを速くすることに振った、B-Treeとは別の構造である
  3. LSM-Treeは画面を必ず点滅させるための設定のことだとされているものである
  4. LSM-Treeはデータを必ず暗号化するための命令のことだとされているものである
データスラ
データスラ 解答・解説

解答は 2 だよー。

LSM-Treeは、書き込みを速くすることに振った、B-Treeとは別の構造なのー。CassandraやRocksDBなどで使われているよー。同じものではないので注意だよー。

選択肢1の「まったく同じ」、選択肢3の「点滅させる」、選択肢4の「暗号化」はどれも誤りなのー。

選択肢判定理由
1B-Treeとは別もの
2書き込み最適化の別構造
3点滅させる設定ではない
4暗号化の命令ではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る