インデックスとは(全体像)
インデックスは、目的のデータを早く見つけるための「索引」。インデックスが無いと、表を上から1行ずつ全部見ていくことになって遅い。索引があれば、目的の場所へ一気にたどり着けるよー。
身近にたとえると、分厚い本の巻末にある索引。索引で「この言葉は何ページ」と分かれば、最初から全ページめくらなくて済むよね。
押さえるのは、インデックスにはいくつか種類があって、得意なことが違うこと。中心になるのは標準のB-Treeだよー。
詳しく:B-Treeとハッシュの違い・複合の左端一致だけ覚えれば戦える
ここが記事の心臓部。まず主な種類を見ていこーね。
インデックスの主な種類
| 種類 | 得意なこと |
|---|---|
| B-Tree | 標準。範囲検索(〜以上など)も等価検索(=)も得意 |
| ハッシュ | 「ピッタリ一致(=)」だけ速い・範囲はダメ |
| ベクトル | AI時代の「似たもの探し」(似た画像・文章など) |
ここで一番のひっかけが「ハッシュのほうがB-Treeより万能で速い」という誤解。ハッシュは「ピッタリ一致」しか得意でなく、範囲検索(〜以上・〜未満)はできない。範囲も等価も使える汎用なのはB-Treeで、だから標準として広く使われるのー。
もう1つの要点が、複数の列をまとめた「複合インデックス」。
複合インデックスの左端一致ルール
| 状況 | 効くか |
|---|---|
| 左端の列から順に条件を指定 | 効く |
| 左端をとばして途中の列だけ指定 | 効きにくい |
ここで2つめのひっかけが「複合インデックスは列の順番に関係なく効く」という誤解。複合インデックスは「左端の列」から順に使う(左端一致ルール)。左端をとばすと、うまく効かないことがあるよー。
わかりやすく言い換えると
要するに、本の索引でイメージするとラクだよー。
①インデックス … 本の巻末の索引。全ページめくらず目的の場所へ早く行ける
②B-Treeとハッシュ … B-Treeは範囲も一致もOKの万能/ハッシュは「ピッタリ一致」だけ速い
③複合の左端一致 … 「姓→名」の順の索引は、まず姓から引く(名だけでは引きにくい)
つまり、「標準はB-Tree(汎用)」「複合は左端から使う」、この2点が試験の急所なのー。
試験のツボ
🔴 一番出る:B-Treeとハッシュの違い
①B-Treeは標準で、範囲検索も等価検索も得意(汎用)
②ハッシュは「ピッタリ一致」だけ速く、範囲検索はできない
🔴 次に出る:複合インデックスの左端一致
①複数の列をまとめた複合インデックスは、左端の列から順に使う
②左端をとばして途中の列だけ指定すると、効きにくいことがある
🟡 押さえると安定:インデックスの目的とベクトル
①インデックスは検索を速くする索引(無いと全行を上から見ることに)
②ベクトルインデックスはAI時代の「似たもの探し」に使う
よくある間違い
①「ハッシュインデックスはB-Treeより万能で速い」→ ✗ ハッシュは「ピッタリ一致」だけ。範囲検索ができるのはB-Tree(汎用)。
②「複合インデックスは列の順番に関係なく効く」→ ✗ 左端の列から順に使う(左端一致ルール)。左端をとばすと効きにくい。
③「インデックスはデータを表示する飾りで、検索の速さとは無関係」→ ✗ インデックスは検索を速くする索引。無いと全行を上から探すことになる。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(インデックスとは)
インデックスに関する次の記述のうち、正しいものはどれか。
- インデックスは画面の表示を派手にする飾りのことで、検索の速さとは無関係だとされている
- インデックスはデータを必ず暗号化して隠すためだけのしくみだとされているものである
- インデックスは目的のデータを早く見つけるための索引で、検索を速くするしくみなのである
- インデックスはデータを必ず削除する命令のことで、検索とは関係がないものだとされている
解答は 3 だよー。
インデックスは、目的のデータを早く見つけるための索引で、検索を速くするしくみなのー。本の巻末の索引と同じで、全ページめくらず目的の場所へ行ける感じだよー。
選択肢1の「派手にする飾り」、選択肢2の「暗号化して隠す」、選択肢4の「削除する命令」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 飾りではない |
| 2 | ✗ | 暗号化のしくみではない |
| 3 | ✓ | 検索を速くする索引 |
| 4 | ✗ | 削除する命令ではない |
オリジナル問題2(B-Treeとハッシュ)
B-Treeとハッシュインデックスに関する次の記述のうち、正しいものはどれか。
- ハッシュは範囲検索も等価検索もすべて得意で、B-Treeより万能だとされているものである
- B-Treeもハッシュもまったく同じ性質で、得意なことに違いはないものだとされているものだ
- B-Treeは画面表示用、ハッシュは音声用のインデックスのことだとされているものである
- B-Treeは範囲検索も等価検索も得意な標準で、ハッシュは「ピッタリ一致」だけが速いのだ
解答は 4 だよー。
B-Treeは範囲検索も等価検索も得意な標準のインデックス、ハッシュは「ピッタリ一致(=)」だけが速くて範囲検索はできないのー。万能なのはB-Treeのほうだよー。
選択肢1の「ハッシュが万能」、選択肢2の「同じ性質」、選択肢3の「画面用・音声用」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | ハッシュは等価のみ |
| 2 | ✗ | 得意なことが違う |
| 3 | ✗ | 画面用・音声用ではない |
| 4 | ✓ | B-Treeは汎用・ハッシュは等価のみ |
オリジナル問題3(複合インデックスの左端一致)
複合インデックスに関する次の記述のうち、正しいものはどれか。
- 複合インデックスは列の順番に関係なく、どの列からでも必ず同じように効くものだとされる
- 複合インデックスは左端の列から順に使うのが基本で、左端をとばすと効きにくいことがある
- 複合インデックスは1つの列しかまとめられず、複数列はまとめられないものだとされている
- 複合インデックスは画面を複数に分割して表示する機能のことだとされているものである
解答は 2 だよー。
複合インデックスは、左端の列から順に使うのが基本(左端一致ルール)なのー。「姓→名」の順の索引は姓から引くイメージで、左端をとばすと効きにくいことがあるよー。
選択肢1の「順番に関係なく効く」、選択肢3の「1列しかまとめられない」、選択肢4の「画面を分割」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 左端から順に使う |
| 2 | ✓ | 左端一致ルール |
| 3 | ✗ | 複数列をまとめられる |
| 4 | ✗ | 画面分割の機能ではない |
まとめ
押さえどころ
- 🔴 B-Treeとハッシュの違い = B-Treeは標準で範囲も等価も得意(汎用)。ハッシュは「ピッタリ一致」だけ速い。
- 🔴 複合インデックスの左端一致 = 複数の列をまとめたら、左端の列から順に使う。左端をとばすと効きにくい。
- 🟡 インデックスの目的とベクトル = 検索を速くする索引。ベクトルはAI時代の「似たもの探し」に使う。
次に学ぶ
執筆: SikakuQuest編集部