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

MySQLの複合インデックスとは?順番が重要な理由を初心者向けにやさしく解説【インデックス最適化・チューニング】

MySQLの複合インデックスで順番が重要な理由
MySQLの複合インデックスで順番が重要な理由

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

生徒

「MySQLのインデックスって聞いたことはあるんですけど、複合インデックスって何ですか?」

先生

「複合インデックスは、データベースの表で『複数の列をまとめて探しやすくする仕組み』のことです。本でいうと、名前と住所の両方から探せる索引のようなものですね。」

生徒

「順番が大事って聞いたんですが、順番が変わると何が違うんですか?」

先生

「順番を間違えると、せっかく作ったインデックスが使われず、検索が遅くなることがあります。今日はそこを、パソコンを触ったことがなくても分かるように説明しますよ。」

1. MySQLとデータベースの基本を超かんたんに理解しよう

1. MySQLとデータベースの基本を超かんたんに理解しよう
1. MySQLとデータベースの基本を超かんたんに理解しよう

MySQLは、データベース管理システムと呼ばれるソフトです。データベースとは、大量の情報を整理して保存しておくための箱のようなものです。 例えば、学校の名簿やお店の会員リストを紙で管理すると大変ですが、MySQLを使うとパソコンの中で整然と管理できます。

データは「テーブル」という表の形で保存されます。テーブルは、縦の列と横の行でできています。 列は「名前」「年齢」などの項目、行は一人ひとりの情報だと思ってください。

2. インデックスとは何か?本の索引で考えてみよう

2. インデックスとは何か?本の索引で考えてみよう
2. インデックスとは何か?本の索引で考えてみよう

インデックスとは、データを素早く見つけるための仕組みです。 分厚い本の最後にある「あいうえお順の索引」を思い出してください。 索引があると、最初のページから全部読まなくても、目的のページをすぐに探せます。

MySQLのインデックスも同じです。インデックスがないと、MySQLはテーブルの最初から最後まで全部確認します。 データが少ないうちは問題ありませんが、何万件、何百万件と増えると、とても時間がかかります。

3. 複合インデックスとは?1つではなく2つ以上をまとめる仕組み

3. 複合インデックスとは?1つではなく2つ以上をまとめる仕組み
3. 複合インデックスとは?1つではなく2つ以上をまとめる仕組み

複合インデックスとは、2つ以上の列を組み合わせたインデックスです。 例えば「名前」と「年齢」を同時に使って検索することが多い場合、それを一つのインデックスとして登録します。

これは、電話帳で「名字 → 名前」の順に探すのと似ています。 いきなり名前だけで探すより、まず名字で絞り込んでから名前を見る方が早いですよね。

4. なぜ複合インデックスは順番が重要なのか

4. なぜ複合インデックスは順番が重要なのか
4. なぜ複合インデックスは順番が重要なのか

MySQLの複合インデックスでは、列の順番がとても重要です。 なぜなら、MySQLはインデックスを「左から順番に」使うというルールがあるからです。

例えば、(name, age)という順番で複合インデックスを作った場合、 「名前で探す」「名前と年齢で探す」検索には使えますが、 「年齢だけで探す」検索には使われません。

5. 実際のテーブルで見てみよう(データ確認)

5. 実際のテーブルで見てみよう(データ確認)
5. 実際のテーブルで見てみよう(データ確認)

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

このようなユーザー表があるとします。 ここで「名前と年齢で検索することが多い」と仮定します。

6. 複合インデックスを作成するSQLの例

6. 複合インデックスを作成するSQLの例
6. 複合インデックスを作成するSQLの例

CREATE INDEX idx_users_name_age
ON users(name, age);

このSQLは、「name → age」の順番で複合インデックスを作っています。 CREATEは「作る」、INDEXは「索引」、ONは「どの表に作るか」を意味します。

7. インデックスが使われる検索と使われない検索

7. インデックスが使われる検索と使われない検索
7. インデックスが使われる検索と使われない検索

SELECT *
FROM users
WHERE name = '山田太郎';

SELECT *
FROM users
WHERE name = '山田太郎' AND age = 25;

SELECT *
FROM users
WHERE age = 25;

上の1つ目と2つ目の検索では、複合インデックスが使われます。 しかし3つ目のように年齢だけで探す場合、順番が合わないためインデックスは使われません。

8. 順番を間違えると起きるパフォーマンスの問題

8. 順番を間違えると起きるパフォーマンスの問題
8. 順番を間違えると起きるパフォーマンスの問題

インデックスが使われない検索では、MySQLはすべての行を1つずつ確認します。 これを「全件検索」と呼びます。 データが増えるほど、検索に時間がかかり、画面がなかなか表示されなくなります。

そのため、よく使う検索条件を考えて、複合インデックスの順番を決めることが、 MySQLのチューニングやインデックス最適化ではとても重要になります。

9. 初心者が覚えておきたい複合インデックスの考え方

9. 初心者が覚えておきたい複合インデックスの考え方
9. 初心者が覚えておきたい複合インデックスの考え方

初心者のうちは、「よく検索する条件を左に置く」と覚えておくだけで十分です。 住所録でも、最初に都道府県、次に市区町村という順番で探す方が楽ですよね。

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のLEFT JOIN完全入門!不足データを補いながらテーブル結合する仕組みをやさしく解説
No.4
Java&Spring記事人気No4
PostgreSQL
PostgreSQLのUPDATE文の使い方(部分更新・条件更新)
No.5
Java&Spring記事人気No5
PostgreSQL
PostgreSQLとは?初心者向けに特徴をわかりやすく解説
No.6
Java&Spring記事人気No6
PostgreSQL
PostgreSQLスキーマ設計のベストプラクティス完全ガイド|初心者でもわかるデータベース整理術
No.7
Java&Spring記事人気No7
PostgreSQL
PostgreSQLスキーマ作成・削除完全ガイド!初心者でもわかるデータベース設計の基礎
No.8
Java&Spring記事人気No8
PostgreSQL
PostgreSQLの権限管理を完全解説|スキーマ単位で理解するデータベースセキュリティの基礎