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

MySQLインデックス完全入門|BTREEインデックスの仕組みを初心者向けにやさしく解説

MySQLのBTREEインデックスの仕組み
MySQLのBTREEインデックスの仕組み

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

生徒

「MySQLってデータを保存するものですよね。でも、たくさんデータがあると探すのが大変じゃないですか?」

先生

「その通りです。データが増えると、目的の情報を見つけるのに時間がかかります。そこで役立つのがインデックスです。」

生徒

「インデックスって、本の後ろにある索引みたいなものですか?」

先生

「とても近い考え方です。今日は、その中でもMySQLでよく使われるBTREEインデックスの仕組みを、パソコンが苦手でもわかるように説明します。」

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

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

MySQLは、データベース管理システムと呼ばれるソフトウェアです。データベースとは、たくさんの情報を整理して保存しておくための箱のようなものです。名簿や住所録、会員情報などを表の形で保存します。この表のことをテーブルと呼びます。

テーブルは、縦の列と横の行で構成されます。列は「年齢」や「名前」のような項目、行は一人ひとりのデータです。MySQLは、この表から必要なデータを探したり、追加したり、変更したりする役割を持っています。

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

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

インデックスとは、データを速く探すための仕組みです。本に例えると、最初のページから最後のページまで全部読むのは大変ですが、索引を見れば目的のページがすぐにわかります。MySQLのインデックスも同じで、テーブル全体を確認しなくても、必要な行をすぐに見つけられます。

インデックスがない場合、MySQLは先頭の行から順番にデータを確認します。これを全件検索と呼びます。データが少なければ問題ありませんが、何万件、何百万件と増えると処理がとても遅くなります。

3. BTREEインデックスの基本構造

3. BTREEインデックスの基本構造
3. BTREEインデックスの基本構造

BTREEインデックスは、MySQLで最もよく使われるインデックスの種類です。BTREEは、バランスツリーという木の形をした構造です。木といっても植物ではなく、データを整理するための形です。

この構造では、データが常に順番に並ぶように管理されます。たとえば、数字なら小さい順、文字ならあいうえお順のように並びます。そのため、目的のデータがどの辺りにあるかをすぐに判断できます。

4. BTREEインデックスを身近な例で考える

4. BTREEインデックスを身近な例で考える
4. BTREEインデックスを身近な例で考える

電話帳を思い浮かべてください。名前が五十音順に並んでいるので、「山田」という名前を探すときは、「や」の辺りを開けばよいとすぐにわかります。これがBTREEインデックスの考え方です。

もし順番がバラバラだったら、最初から最後まで全部確認しなければなりません。BTREEインデックスは、常に順番を保つことで、探す手間を大幅に減らしています。

5. インデックスがない場合の検索例

5. インデックスがない場合の検索例
5. インデックスがない場合の検索例

次のようなユーザー情報のテーブルがあるとします。


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

年齢が20歳以上の人を探すSQLは次のようになります。


SELECT *
FROM users
WHERE age >= 20;

インデックスがない場合、MySQLは1行目から5行目まで、すべての年齢を確認します。


id | name       | age | email
---+------------+-----+-------------------
1  | 山田太郎   | 25  | taro@example.com
3  | 鈴木一郎   | 30  | ichiro@example.com
4  | 高橋次郎   | 22  | jiro@example.com
5  | 田中美咲   | 28  | misaki@example.com

6. BTREEインデックスを作成した場合

6. BTREEインデックスを作成した場合
6. BTREEインデックスを作成した場合

年齢の列にBTREEインデックスを作成すると、年齢順に整理された索引が作られます。


CREATE INDEX idx_users_age
ON users(age);

これにより、MySQLは「20以上」という条件を見た瞬間に、探すべき範囲を絞り込めます。最初から全部を見る必要がなくなります。

7. 範囲検索とBTREEインデックス

7. 範囲検索とBTREEインデックス
7. 範囲検索とBTREEインデックス

BTREEインデックスは、範囲検索がとても得意です。範囲検索とは、「以上」「以下」「〜から〜まで」といった条件で探すことです。


SELECT name, age
FROM users
WHERE age BETWEEN 20 AND 29;

年齢が20代の人だけを探す場合、BTREEインデックスがあれば、その年齢の範囲だけを効率よく確認できます。


name       | age
-----------+----
山田太郎   | 25
高橋次郎   | 22
田中美咲   | 28

8. BTREEインデックスの注意点

8. BTREEインデックスの注意点
8. BTREEインデックスの注意点

BTREEインデックスは便利ですが、万能ではありません。データを追加したり、変更したりするたびに、インデックスも更新されます。そのため、インデックスを作りすぎると、保存や更新が遅くなることがあります。

また、すべての検索で必ず使われるわけではありません。条件によっては、MySQLがインデックスを使わない判断をすることもあります。そのため、よく検索に使う列にだけインデックスを作ることが大切です。

カテゴリの一覧へ
新着記事
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とは?初心者向けに特徴をわかりやすく解説
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLのLEFT JOIN完全入門!不足データを補いながらテーブル結合する仕組みをやさしく解説
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のpublicスキーマの役割と扱い方