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

MySQLインデックス完全入門|BTREE・HASHで検索が速くなる仕組みを初心者向けに解説

MySQLでインデックスを使うと何が速くなるのか
MySQLでインデックスを使うと何が速くなるのか

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

生徒

「MySQLって、データを探すのが速いって聞いたんですけど、どうして速くなるんですか?」

先生

「それはインデックスという仕組みを使っているからです。本の最後にある索引と同じ役割をしています。」

生徒

「パソコンをほとんど触ったことがなくても、理解できますか?」

先生

「大丈夫です。紙の名簿や電話帳を例にしながら、ゆっくり説明していきます。」

1. MySQLとデータベースの基本

1. MySQLとデータベースの基本
1. MySQLとデータベースの基本

MySQLは、データベースと呼ばれる仕組みを管理するためのソフトです。データベースとは、たくさんの情報を表の形で整理して保存する箱のようなものです。名前、年齢、メールアドレスなどを、紙の名簿の代わりにコンピュータで管理しているイメージです。

データが少ないうちは、上から順番に探しても問題ありません。しかし、何万人、何百万人という情報が増えると、すべてを一つずつ確認するのはとても時間がかかります。そこで登場するのがインデックスです。

2. インデックスとは何か

2. インデックスとは何か
2. インデックスとは何か

インデックスとは、データを素早く探すための目次や索引のようなものです。本の中から特定の言葉を探すとき、最初のページから全部読む人はいません。最後の索引を見て、ページ番号を確認します。MySQLのインデックスも同じ考え方です。

インデックスを使うことで、条件に合うデータの場所がすぐに分かるため、検索の速度が大きく向上します。その代わり、インデックスを作ると保存領域が増え、データ追加や更新が少し遅くなることもあります。

3. インデックスを使わない検索の例

3. インデックスを使わない検索の例
3. インデックスを使わない検索の例

まずは、インデックスがない状態での検索を見てみましょう。以下は会員情報を保存したテーブルです。


id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 25  | taro@example.com
2  | 佐藤花子   | 19  | hanako@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 高橋次郎   | 42  | jiro@example.com
5  | 伊藤美咲   | 18  | misaki@example.com

SELECT *
FROM users
WHERE age = 19;

この検索では、MySQLは一行目から最後の行まで順番に年齢を確認します。これを全件検索と呼びます。データが増えるほど、時間がかかる原因になります。

4. インデックスを使うと何が速くなるのか

4. インデックスを使うと何が速くなるのか
4. インデックスを使うと何が速くなるのか

インデックスを使うと速くなるのは、主にデータを探す処理です。特に、特定の条件で検索する処理が対象になります。年齢、名前、メールアドレスなどで探す場合に効果があります。

インデックスがあると、MySQLは表を最初から見ません。インデックスだけを確認し、該当するデータの場所に直接移動します。そのため、探す時間が大幅に短縮されます。

5. BTREEインデックスの仕組み

5. BTREEインデックスの仕組み
5. BTREEインデックスの仕組み

BTREEは、MySQLで最もよく使われるインデックスの形式です。数字や文字を順番に並べて管理します。電話帳の名前が五十音順に並んでいる状態を想像してください。

この仕組みでは、範囲検索が得意です。例えば、年齢が二十歳以上三十歳未満といった条件でも、効率よく探せます。


CREATE INDEX idx_age
ON users(age);

この命令で、年齢に対するBTREEインデックスが作成されます。

6. BTREEインデックスを使った検索例

6. BTREEインデックスを使った検索例
6. BTREEインデックスを使った検索例

先ほどのテーブルにインデックスを追加したあと、同じ検索を行います。


id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 25  | taro@example.com
2  | 佐藤花子   | 19  | hanako@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 高橋次郎   | 42  | jiro@example.com
5  | 伊藤美咲   | 18  | misaki@example.com

SELECT name, email
FROM users
WHERE age >= 18 AND age < 30;

BTREEインデックスのおかげで、条件に合う範囲だけを効率よく調べることができます。

7. HASHインデックスの特徴

7. HASHインデックスの特徴
7. HASHインデックスの特徴

HASHインデックスは、完全一致の検索に特化した仕組みです。くじ引きの番号を箱に入れて管理するようなイメージです。同じ番号なら一瞬で見つかります。

ただし、範囲検索はできません。そのため、等しい条件だけに使われます。主にメモリを使うエンジンで利用されます。

8. インデックスを使うときの注意点

8. インデックスを使うときの注意点
8. インデックスを使うときの注意点

インデックスは万能ではありません。たくさん作りすぎると、データを追加したり変更したりするときに時間がかかります。また、検索条件に使われないインデックスは意味がありません。

よく使う検索条件に絞って、必要な分だけ作ることが大切です。初心者のうちは、検索が遅いと感じたときにインデックスを検討するとよいでしょう。


DROP INDEX idx_age
ON users;

不要になったインデックスは削除することもできます。

カテゴリの一覧へ
新着記事
New1
MySQL
【MySQL入門】LIMITとは何か?SELECT文で取得件数を制限する方法を初心者向けに徹底解説
New2
PostgreSQL
PostgreSQLのMAX・MIN完全解説|集約関数とGROUP BYで最大値・最小値を抽出する方法
New3
MySQL
MySQLのORDER BYで文字列を並び替える方法と注意点を徹底解説|SQL初心者向け完全ガイド
New4
PostgreSQL
PostgreSQLのSUM・AVG完全解説|集約関数とGROUP BYの計算時の注意点を初心者向けにやさしく説明
人気記事
No.1
Java&Spring記事人気No1
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.2
Java&Spring記事人気No2
PostgreSQL
PostgreSQLでスキーマを分割するメリット
No.3
Java&Spring記事人気No3
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLの主キー・外部キーを完全解説!初心者でもわかる設定方法と考え方
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLのORDER BYの基本(昇順・降順)
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLのpublicスキーマの役割と扱い方
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLでよく使うデータ型一覧(文字列・数値・日付)