【びーつりー】
B木 とは?
💡 データベースの高速検索を支える「幅広い」木
📌 このページのポイント
- 1ノードに複数のキーを持つ多分木で、木の高さが低い
- ディスクI/O回数を最小化する設計(1ノード=1ディスクブロック)
- B+木(リーフノードだけにデータを持つ変種)がRDBMSの標準
- MySQL(InnoDB)、PostgreSQLのインデックスはB+木
二分木と何が違うの?
なんでディスクI/Oが重要なの?
メモリアクセスは数十ナノ秒、ディスクアクセス(SSDでも)は数百マイクロ秒。約1万倍の差がある。B木は1回のディスクI/Oで多くのキーをまとめて読み込むから、ディスクアクセス回数を最小化できる。1ノードのサイズをディスクブロックサイズ(通常4KB〜16KB)に合わせるのが効率的なんだよ
B+木とB木の違いは?
B木は全ノードにデータを持つ。B+木はリーフノード(最下段)だけにデータを持ち、内部ノードはキーのみ。B+木のメリットは①内部ノードにキーを詰め込めるから木がさらに低くなる、②リーフノードがリンクリストで繋がっているから範囲検索(WHERE age BETWEEN 20 AND 30)が高速。RDBMSのインデックスはほぼB+木だよ
インデックスの仕組みがわかった!
📖 おまけ:英語の意味
「B-Tree」 = B木
💬 BはBalanced(平衡)、Broad(幅広い)、Bayerの頭文字など諸説ある。発明者のBayerは「Bの由来は言わない」と語っているよ