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

MySQLのEXPLAIN完全解説!初心者でもわかるSQLクエリ分析と実行計画の基本

MySQLのEXPLAINの基本的な見方を理解する
MySQLのEXPLAINの基本的な見方を理解する

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

生徒

「MySQLでEXPLAINって聞いたんですけど、何をするものなんですか?」

先生

「EXPLAINは、SQLがデータベースの中でどんな順番で、どんな方法でデータを探すかを事前に教えてくれる仕組みです。」

生徒

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

先生

「大丈夫です。EXPLAINは、買い物リストや地図を見る感覚で考えると、とても分かりやすくなります。」

1. MySQLとSQL、そしてEXPLAINとは何か?

1. MySQLとSQL、そしてEXPLAINとは何か?
1. MySQLとSQL、そしてEXPLAINとは何か?

MySQLとは、データベースと呼ばれる「情報を整理して保存する大きな箱」を管理するソフトです。名前、年齢、メールアドレスなどのデータを、表の形で安全に保存できます。

SQL(エスキューエル)は、そのデータベースに対して「このデータを見せて」「この条件に合う人を探して」とお願いするための言葉です。紙の名簿に線を引いたり、付箋を貼ったりする作業を、パソコンで行うイメージです。

EXPLAINは、そのSQLのお願いを実行する前に、「どの順番で名簿をめくるか」「全部を見るのか、目印を使うのか」を教えてくれる説明書のような存在です。MySQL EXPLAINを理解すると、SQLの動きが見えるようになります。

2. なぜMySQLのEXPLAINが必要なのか?

2. なぜMySQLのEXPLAINが必要なのか?
2. なぜMySQLのEXPLAINが必要なのか?

データベースの中のデータが少ないうちは、どんな探し方でもすぐに結果が出ます。しかし、データが何万件、何百万件と増えると、探し方が悪いととても時間がかかります。

EXPLAINを使うと、MySQLが「全ての行を最初から最後まで見るのか」「索引(インデックス)という目次を使うのか」が分かります。これは、本を探すときに、最初のページから読むか、目次を使うかの違いと同じです。

初心者のうちからEXPLAINの見方を知っておくと、遅いSQLを避ける考え方が自然と身につきます。

3. サンプルテーブルでEXPLAINを使ってみよう

3. サンプルテーブルでEXPLAINを使ってみよう
3. サンプルテーブルでEXPLAINを使ってみよう

まずは、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
5  | 伊藤美咲   | 18  | misaki@example.com

次に、20歳未満の人を探すSQLを書いてみます。


SELECT *
FROM users
WHERE age < 20;

このSQLの前にEXPLAINを付けることで、MySQLの動きを確認できます。


EXPLAIN
SELECT *
FROM users
WHERE age < 20;

4. EXPLAINの実行結果の全体像を知ろう

4. EXPLAINの実行結果の全体像を知ろう
4. EXPLAINの実行結果の全体像を知ろう

EXPLAINを実行すると、表のような結果が表示されます。これは「実行計画」と呼ばれ、MySQLがどう動くかを書いたメモです。


id | select_type | table | type | rows | Extra
---+-------------+-------+------+-------+----------------
1  | SIMPLE      | users | ALL  | 5     | Using where

初心者のうちは、すべてを完璧に理解しなくても大丈夫です。まずは「どのテーブルを」「何行くらい見ているか」に注目するだけで十分です。

5. typeは探し方を表す重要な項目

5. typeは探し方を表す重要な項目
5. typeは探し方を表す重要な項目

typeは、MySQLがデータをどう探しているかを示します。ALLと表示されている場合は、「最初から最後まで全部見る」という意味です。

これは、名簿を1ページ目から最後のページまで、順番に指で追って探す状態です。データが多いと時間がかかります。

もしindexやrangeと表示されていれば、「目印を使って探している」状態なので、効率が良いと考えられます。EXPLAINのtypeを見ることで、SQLが速いか遅いかのヒントが得られます。

6. rowsはMySQLが見る予定の行数

6. rowsはMySQLが見る予定の行数
6. rowsはMySQLが見る予定の行数

rowsは、「このSQLを実行するとき、何行くらい確認する予定か」を表しています。実際の件数ではなく、MySQLの予想です。

例えばrowsが5なら、5件すべてをチェックすると考えている状態です。もしrowsが10000と出たら、それだけ多くのデータを見る必要があります。

初心者は、「rowsの数字が大きいほど重くなりやすい」と覚えておくだけで十分です。

7. Extraに書かれる補足情報の意味

7. Extraに書かれる補足情報の意味
7. Extraに書かれる補足情報の意味

Extraは、MySQLが追加で行っている処理を教えてくれます。Using whereと書かれている場合は、「条件を使って絞り込みをしている」という意味です。

これは、名簿を全部見ながら「年齢が20未満かどうか」を一人ずつ確認している状態です。難しく感じたら、「ちゃんと条件は使われているんだな」と思えば問題ありません。

8. インデックスがある場合のEXPLAINの違い

8. インデックスがある場合のEXPLAINの違い
8. インデックスがある場合のEXPLAINの違い

もしageにインデックスという「目次」が付いていると、EXPLAINの結果が変わります。


CREATE INDEX idx_age
ON users(age);

この状態で再びEXPLAINを実行すると、探し方が変わります。


id | select_type | table | type  | rows | Extra
---+-------------+-------+-------+-------+-------------
1  | SIMPLE      | users | range | 2     | Using where

rowsが減り、typeがrangeになっています。これは、目次を使って必要な部分だけを見ている状態です。EXPLAINを見ることで、インデックスの効果も確認できます。

カテゴリの一覧へ
新着記事
New1
MySQL
MySQLのWHERE句でNOT条件を指定する方法を徹底解説!初心者向けSQL条件検索ガイド
New2
PostgreSQL
PostgreSQLのLIMIT・OFFSETとパフォーマンス問題を完全解説|初心者でもわかる安全な使い方
New3
MySQL
MySQLのUPDATE文でデータを更新する基本を徹底解説|SQL初心者でもわかるデータベース更新入門
New4
PostgreSQL
PostgreSQLのOFFSET完全入門|並び替えと組み合わせてデータをスキップする方法を初心者向けに解説
人気記事
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の権限管理を完全解説|スキーマ単位で理解するデータベースセキュリティの基礎