基礎インデックスの種類

B-treeインデックス

定義

B-treeインデックスとは、値をソートした平衡木構造で保持し、ルートから葉ノードへ辿ることで対数時間で目的の値に到達できるインデックス方式である。

本記事はAmazonアソシエイトのリンクを含みます。

B-treeは「ソートされた分岐する索引」

B-treeは、キーをソート順に保持しながら1つのノードから複数の子に分岐する木構造です。 ルートから葉に向けて辿っていくだけで、目的の値に対数時間で到達できます。 以下のインタラクティブ図解で、実際に探索の動きを見てみましょう。

B-treeインデックス(探索・挿入)
30710203568121517222527403335444550
状況

「1ステップ」でノードを1つずつ辿る、または「自動再生」で連続再生。

この木は「1ノードあたり最大3キー」の設定。実際のRDBのB-treeはノードあたり数百キー入るため、数億件でも数段の辿りで済む。

探索の手順

  1. ルートノードのキーと目的の値を比較する
  2. 目的の値がキーに一致すれば発見。そうでなければ、どの子に降りるか(値の範囲)を判断する
  3. 子ノードに降りて1〜2を繰り返す
  4. 葉ノードまで来ても見つからなければ「該当なし」

ノードあたりのキー数と木の高さ

本記事の図解はデフォルトでノードあたり最大3キーに設定していますが(上のコントロールで変更可能)、実際のRDBMSではノードあたり数百〜数千キーが入ります。 そのため、10億件のデータでも木の高さはわずか3〜4段程度で済み、ディスクI/Oが極めて少ない探索が可能です。

実務で B-tree インデックスをどう設計するか(カラム順・カーディナリティ・更新コストなど)は、『達人に学ぶDB設計徹底指南書 第2版』第6章 6-3「B-treeインデックスの設計方針」に体系的にまとまっています。

挿入とノード分割

「挿入モード」に切り替えて値を追加してみてください。ノードのキー数が上限を超えると、中央値を親に押し上げて分割する動きが見られます。 こうして木の高さは最小限に保たれ、常にバランスした状態が維持されます。

葉ノードにあるのは「キー + 行ID」

B-treeの葉ノードには、検索キーそのものだけでなく、そのキーが指す実データがどのページにあるかを示す行IDが入っています。 つまり検索の流れは「B-treeを数段辿る」→「行IDを取得」→「そのページを1回読む」の3ステップ。

B-treeの葉ノードから実データへ
B-tree 葉ノードkey = 42→ 行ID (page=1, offset=0)ページ読み込みテーブル本体 Page 1(約8KB)offset 0 · id=42 · Sato · sato@example.comoffset 1 · id=15 · Tanaka · tanaka@example.comoffset 2 · id=83 · Suzuki · suzuki@example.comoffset 3 · id=27 · Ito · ito@example.comインデックスから行IDを取得そのページを読んで該当行を取り出す

なぜ「対数時間」で1件を取り出せるか、これで物理的に見えてきます。 B-treeを辿るのに数ページ、そこから行IDを得てテーブル本体を1ページ読む。 合計でも数回のページ読み取りで済むため、1000万件でも数ミリ秒で1件が引ける。

B-treeが向いていない検索

  • 先頭ワイルドカード(LIKE '%foo'
  • 関数変換を経た比較(WHERE LOWER(name) = ...
  • 暗黙の型変換を伴う比較

いずれも「ソート順が使えなくなる」ため、B-treeを辿ることができずフルスキャンに落ちます。

「効かないケースを知らずに闇雲にインデックスを追加して、逆に更新が遅くなる」失敗例は、『SQLアンチパターン 第2版』第13章「インデックスショットガン(闇雲インデックス)」で詳しく扱われています。

よくある疑問

Q.なぜB-treeはこんなに速いのですか?
A.1つのノードから複数の子ノードに分岐するので、木の高さがデータ件数の対数(O(log N))にしかならないためです。1億件でも数段の辿りで済みます。
Q.B-treeとB+treeの違いは?
A.B+treeは葉ノードにだけ実データ(へのポインタ)を持ち、葉同士がリンクリストで繋がっている点が特徴です。範囲検索が高速化されるため、実際のRDBMSの多くはB+treeを採用しています。
Q.B-treeインデックスが効かないクエリは?
A.先頭ワイルドカードのLIKE検索(例: LIKE '%abc')、関数を通した比較(WHERE UPPER(name) = ...)、暗黙の型変換を伴う比較などです。これらではソート順に沿った探索ができません。

関連トピック

もっと学びたい方へ(おすすめ書籍)

おすすめ
達人に学ぶDB設計徹底指南書 第2版
ミック

テーブル設計と正規化、パフォーマンス考慮のインデックス設計まで実務レベルで学べる定番書。第2版ではクラウド対応も強化。

Amazon で見る →
達人に学ぶSQL徹底指南書 第2版
ミック

SQLの本質的な使い方と、インデックスが効くクエリの書き方を学べる。ウィンドウ関数など現代SQLも網羅。

Amazon で見る →
SQLアンチパターン 第2版
Bill Karwin

実務でやりがちなSQL・DB設計のアンチパターンとその回避策を体系的に学べる。

Amazon で見る →
[改訂3版]内部構造から学ぶPostgreSQL
勝俣智成 ほか

PostgreSQLの内部構造・ストレージ・インデックス機構を丁寧に解説。設計と運用計画の鉄則が学べる。

Amazon で見る →
SQL実践入門 ── 高速でわかりやすいクエリの書き方
ミック

「なぜこの書き方が速いのか」を実行計画から説明する一冊。条件分岐・集約・結合・更新のそれぞれで、良い書き方と悪い書き方を対比しながら読める。

Amazon で見る →
おすすめ
楽々ERDレッスン (CodeZine BOOKS)
羽生章洋

ER 図をどう「使える設計」に落とすか、実務の判断まで踏み込んだ入門書。エンティティの切り出しから多対多の扱いまで具体例が豊富。

Amazon で見る →
おすすめ
スッキリわかるSQL入門 第4版 ドリル256問付き!
中山清喬/飯田理恵子

ドリル 256 問を実際に打ちながら進める SQL の入門書。付属のブラウザ環境で演習できるので、SELECT から結合・集約までを環境構築で止まらずに通せる。

Amazon で見る →
情報処理教科書 データベーススペシャリスト 2025年版
三好康之

IPAデータベーススペシャリスト試験の総合対策書。インデックス関連は本サイトと合わせて学ぶと理解が深まる。

Amazon で見る →
理論から学ぶデータベース実践入門
奥野幹也

リレーショナルモデルの理論から、インデックス設計を含む実務で使えるSQLまで解説。

Amazon で見る →

本セクションはAmazonアソシエイトのリンクを含みます。

オンライン個別指導

もっと深くDBを学びたい方へ。

たいてっくが、SQL・データベース設計・パフォーマンスチューニング・IPAデータベーススペシャリスト対策まで、1対1で学習をサポートします。まずは無料相談から。

無料相談を予約する →
受講者の声 (DB・SQL コース)
menta レビュー原文を見る →
  • 教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。
    H 様DB・SQL コース受講
  • 体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。
    M 様DB・SQL コース受講
  • 大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。
    K 様DB・SQL コース受講