MySQLインデックスの基本を完全解説!初心者でもわかるBTREEとHASHインデックスの違い
生徒
「MySQLのインデックスって聞いたんですけど、何のためにあるんですか?」
先生
「インデックスは、データを早く探すための“目次”のようなものです。本が分厚くなるほど、目次がないと探すのが大変になりますよね。」
生徒
「BTREEとかHASHって種類があるみたいですが、違いが全然わかりません…」
先生
「大丈夫です。たとえ話を使いながら、パソコンを触ったことがなくても理解できるように説明します。」
1. MySQLとは何か?データベースの基本
MySQL(マイエスキューエル)は、データベース管理システムの一つです。データベースとは、大量の情報をきれいに整理して保存するための箱のようなものです。例えば、学校の名簿やお店の会員情報を、紙ではなくパソコンの中で管理する仕組みだと考えてください。
MySQLは、その名簿を「探す」「追加する」「変更する」といった操作を、SQLという言葉を使って行います。インデックスは、その中でも「探す」作業を速くするための重要な仕組みです。
2. インデックスとは?初心者向けの超基本説明
インデックスとは、データベースの中でデータを素早く見つけるための仕組みです。電話帳を想像してください。名前順に並んでいて、さらに端に「あ・か・さ…」と書かれていますよね。あれがインデックスです。
もしインデックスがなければ、最初のページから最後のページまで、1件ずつ確認する必要があります。MySQLでも同じで、インデックスがないとデータが増えるほど検索が遅くなります。
3. BTREEインデックスとは?仕組みと特徴
BTREE(ビーツリー)インデックスは、MySQLで最もよく使われるインデックスです。木の枝が分かれていくような構造をしていて、データを順番に並べながら管理します。
例えば、数字が書かれたカードを小さい順に並べて、途中途中で「この辺にありそう」と判断できる状態を作るイメージです。そのため、大小比較が得意で、「〇〇より大きい」「〇〇より小さい」といった検索に強い特徴があります。
CREATE INDEX idx_users_age
ON users(age);
4. HASHインデックスとは?仕組みと特徴
HASH(ハッシュ)インデックスは、値を特別な計算方法で変換して管理するインデックスです。この計算を「ハッシュ関数」と呼びます。難しそうですが、例えると「名前を入れると番号が一瞬で決まるロッカー」のようなものです。
完全に一致するデータを探すのがとても速い反面、「〇〇以上」「〇〇以下」といった範囲検索は苦手です。そのため、使いどころがはっきり分かれます。
CREATE INDEX idx_users_email
USING HASH
ON users(email);
5. BTREEとHASHの違いをやさしく比較
BTREEとHASHの違いを簡単にまとめると、BTREEは「順番を意識した探し方」、HASHは「ピンポイントで当てる探し方」です。
本棚で例えるなら、BTREEはジャンルごとに並んだ本棚、HASHは番号が決まっているコインロッカーです。目的がはっきりしているならHASH、いろいろな条件で探したいならBTREEが向いています。
6. 実際のテーブルでインデックスを見てみよう
次のようなusersテーブルがあるとします。
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
SELECT *
FROM users
WHERE email = 'hanako@example.com';
id | name | age | email
---+----------+-----+-------------------
2 | 佐藤花子 | 19 | hanako@example.com
7. HASHインデックスが向いているケース
HASHインデックスは、「メールアドレス」「会員番号」「社員ID」など、必ず一致検索をする項目に向いています。完全一致で探す場面では、非常に高速です。
ただし、並び順や範囲検索ができないため、万能ではありません。用途を限定して使うことが大切です。
SELECT *
FROM users
WHERE id = 3;
8. 初心者がつまずきやすい注意点
初心者がよく勘違いするのが、「インデックスを付ければ何でも速くなる」という考えです。実際には、インデックスを付けすぎると、データの追加や更新が遅くなることもあります。
まずはBTREEを基本として理解し、完全一致検索が多い場所でHASHを使う、という考え方が安心です。