MySQLの複合インデックスとは?順番が重要な理由を初心者向けにやさしく解説【インデックス最適化・チューニング】
生徒
「MySQLのインデックスって聞いたことはあるんですけど、複合インデックスって何ですか?」
先生
「複合インデックスは、データベースの表で『複数の列をまとめて探しやすくする仕組み』のことです。本でいうと、名前と住所の両方から探せる索引のようなものですね。」
生徒
「順番が大事って聞いたんですが、順番が変わると何が違うんですか?」
先生
「順番を間違えると、せっかく作ったインデックスが使われず、検索が遅くなることがあります。今日はそこを、パソコンを触ったことがなくても分かるように説明しますよ。」
1. MySQLとデータベースの基本を超かんたんに理解しよう
MySQLは、データベース管理システムと呼ばれるソフトです。データベースとは、大量の情報を整理して保存しておくための箱のようなものです。 例えば、学校の名簿やお店の会員リストを紙で管理すると大変ですが、MySQLを使うとパソコンの中で整然と管理できます。
データは「テーブル」という表の形で保存されます。テーブルは、縦の列と横の行でできています。 列は「名前」「年齢」などの項目、行は一人ひとりの情報だと思ってください。
2. インデックスとは何か?本の索引で考えてみよう
インデックスとは、データを素早く見つけるための仕組みです。 分厚い本の最後にある「あいうえお順の索引」を思い出してください。 索引があると、最初のページから全部読まなくても、目的のページをすぐに探せます。
MySQLのインデックスも同じです。インデックスがないと、MySQLはテーブルの最初から最後まで全部確認します。 データが少ないうちは問題ありませんが、何万件、何百万件と増えると、とても時間がかかります。
3. 複合インデックスとは?1つではなく2つ以上をまとめる仕組み
複合インデックスとは、2つ以上の列を組み合わせたインデックスです。 例えば「名前」と「年齢」を同時に使って検索することが多い場合、それを一つのインデックスとして登録します。
これは、電話帳で「名字 → 名前」の順に探すのと似ています。 いきなり名前だけで探すより、まず名字で絞り込んでから名前を見る方が早いですよね。
4. なぜ複合インデックスは順番が重要なのか
MySQLの複合インデックスでは、列の順番がとても重要です。 なぜなら、MySQLはインデックスを「左から順番に」使うというルールがあるからです。
例えば、(name, age)という順番で複合インデックスを作った場合、 「名前で探す」「名前と年齢で探す」検索には使えますが、 「年齢だけで探す」検索には使われません。
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の例
CREATE INDEX idx_users_name_age
ON users(name, age);
このSQLは、「name → age」の順番で複合インデックスを作っています。 CREATEは「作る」、INDEXは「索引」、ONは「どの表に作るか」を意味します。
7. インデックスが使われる検索と使われない検索
SELECT *
FROM users
WHERE name = '山田太郎';
SELECT *
FROM users
WHERE name = '山田太郎' AND age = 25;
SELECT *
FROM users
WHERE age = 25;
上の1つ目と2つ目の検索では、複合インデックスが使われます。 しかし3つ目のように年齢だけで探す場合、順番が合わないためインデックスは使われません。
8. 順番を間違えると起きるパフォーマンスの問題
インデックスが使われない検索では、MySQLはすべての行を1つずつ確認します。 これを「全件検索」と呼びます。 データが増えるほど、検索に時間がかかり、画面がなかなか表示されなくなります。
そのため、よく使う検索条件を考えて、複合インデックスの順番を決めることが、 MySQLのチューニングやインデックス最適化ではとても重要になります。
9. 初心者が覚えておきたい複合インデックスの考え方
初心者のうちは、「よく検索する条件を左に置く」と覚えておくだけで十分です。 住所録でも、最初に都道府県、次に市区町村という順番で探す方が楽ですよね。
MySQLの複合インデックスも同じで、使い方をイメージできれば難しいものではありません。 パソコンが苦手でも、紙の名簿を探す感覚で考えると理解しやすくなります。