カテゴリ: MySQL 更新日: 2026/02/08

MySQLインデックスの基本を完全解説!初心者でもわかるBTREEとHASHインデックスの違い

MySQLのHASHインデックスとは?BTREEとの違い
MySQLのHASHインデックスとは?BTREEとの違い

先生と生徒の会話形式で理解しよう

生徒

「MySQLのインデックスって聞いたんですけど、何のためにあるんですか?」

先生

「インデックスは、データを早く探すための“目次”のようなものです。本が分厚くなるほど、目次がないと探すのが大変になりますよね。」

生徒

「BTREEとかHASHって種類があるみたいですが、違いが全然わかりません…」

先生

「大丈夫です。たとえ話を使いながら、パソコンを触ったことがなくても理解できるように説明します。」

1. MySQLとは何か?データベースの基本

1. MySQLとは何か?データベースの基本
1. MySQLとは何か?データベースの基本

MySQL(マイエスキューエル)は、データベース管理システムの一つです。データベースとは、大量の情報をきれいに整理して保存するための箱のようなものです。例えば、学校の名簿やお店の会員情報を、紙ではなくパソコンの中で管理する仕組みだと考えてください。

MySQLは、その名簿を「探す」「追加する」「変更する」といった操作を、SQLという言葉を使って行います。インデックスは、その中でも「探す」作業を速くするための重要な仕組みです。

2. インデックスとは?初心者向けの超基本説明

2. インデックスとは?初心者向けの超基本説明
2. インデックスとは?初心者向けの超基本説明

インデックスとは、データベースの中でデータを素早く見つけるための仕組みです。電話帳を想像してください。名前順に並んでいて、さらに端に「あ・か・さ…」と書かれていますよね。あれがインデックスです。

もしインデックスがなければ、最初のページから最後のページまで、1件ずつ確認する必要があります。MySQLでも同じで、インデックスがないとデータが増えるほど検索が遅くなります。

3. BTREEインデックスとは?仕組みと特徴

3. BTREEインデックスとは?仕組みと特徴
3. BTREEインデックスとは?仕組みと特徴

BTREE(ビーツリー)インデックスは、MySQLで最もよく使われるインデックスです。木の枝が分かれていくような構造をしていて、データを順番に並べながら管理します。

例えば、数字が書かれたカードを小さい順に並べて、途中途中で「この辺にありそう」と判断できる状態を作るイメージです。そのため、大小比較が得意で、「〇〇より大きい」「〇〇より小さい」といった検索に強い特徴があります。


CREATE INDEX idx_users_age
ON users(age);

4. HASHインデックスとは?仕組みと特徴

4. HASHインデックスとは?仕組みと特徴
4. HASHインデックスとは?仕組みと特徴

HASH(ハッシュ)インデックスは、値を特別な計算方法で変換して管理するインデックスです。この計算を「ハッシュ関数」と呼びます。難しそうですが、例えると「名前を入れると番号が一瞬で決まるロッカー」のようなものです。

完全に一致するデータを探すのがとても速い反面、「〇〇以上」「〇〇以下」といった範囲検索は苦手です。そのため、使いどころがはっきり分かれます。


CREATE INDEX idx_users_email
USING HASH
ON users(email);

5. BTREEとHASHの違いをやさしく比較

5. BTREEとHASHの違いをやさしく比較
5. BTREEとHASHの違いをやさしく比較

BTREEとHASHの違いを簡単にまとめると、BTREEは「順番を意識した探し方」、HASHは「ピンポイントで当てる探し方」です。

本棚で例えるなら、BTREEはジャンルごとに並んだ本棚、HASHは番号が決まっているコインロッカーです。目的がはっきりしているならHASH、いろいろな条件で探したいならBTREEが向いています。

6. 実際のテーブルでインデックスを見てみよう

6. 実際のテーブルでインデックスを見てみよう
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インデックスが向いているケース

7. HASHインデックスが向いているケース
7. HASHインデックスが向いているケース

HASHインデックスは、「メールアドレス」「会員番号」「社員ID」など、必ず一致検索をする項目に向いています。完全一致で探す場面では、非常に高速です。

ただし、並び順や範囲検索ができないため、万能ではありません。用途を限定して使うことが大切です。


SELECT *
FROM users
WHERE id = 3;

8. 初心者がつまずきやすい注意点

8. 初心者がつまずきやすい注意点
8. 初心者がつまずきやすい注意点

初心者がよく勘違いするのが、「インデックスを付ければ何でも速くなる」という考えです。実際には、インデックスを付けすぎると、データの追加や更新が遅くなることもあります。

まずはBTREEを基本として理解し、完全一致検索が多い場所でHASHを使う、という考え方が安心です。

カテゴリの一覧へ
新着記事
New1
PostgreSQL
PostgreSQLのLIMIT・OFFSETとパフォーマンス問題を完全解説|初心者でもわかる安全な使い方
New2
MySQL
MySQLのUPDATE文でデータを更新する基本を徹底解説|SQL初心者でもわかるデータベース更新入門
New3
PostgreSQL
PostgreSQLのOFFSET完全入門|並び替えと組み合わせてデータをスキップする方法を初心者向けに解説
New4
MySQL
MySQLで複数行INSERTを行う方法と注意点を徹底解説|SQL基礎から学ぶデータベース入門
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのDISTINCT完全ガイド|SQLで重複データを除外する方法を初心者向けに解説
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLのLEFT JOIN完全入門!不足データを補いながらテーブル結合する仕組みをやさしく解説
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLスキーマ設計のベストプラクティス完全ガイド|初心者でもわかるデータベース整理術
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLの権限管理を完全解説|スキーマ単位で理解するデータベースセキュリティの基礎
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLのWHERE句を完全解説|初心者でもわかる条件指定の基本と使い方