MySQLのEXPLAINとは?初心者でもわかるクエリ分析の基本を徹底解説
生徒
「MySQLでEXPLAINっていう言葉を見たんですが、これは何をするものなんですか?」
先生
「EXPLAINは、SQLがデータベースの中でどんな順番や方法で動くのかを、事前にのぞき見るための仕組みです。料理でいうと、完成品ではなくレシピを見る感じですね。」
生徒
「まだSQLもよく分からないんですが、それでも大丈夫ですか?」
先生
「問題ありません。パソコンを触ったことがなくても、紙の名簿を使うイメージで説明します。」
1. MySQLとデータベースの超基本
MySQL(マイエスキューエル)は、データベース管理システムと呼ばれるソフトです。データベースとは、たくさんの情報を整理して保存しておく大きな箱のようなものです。学校の名簿や住所録を思い浮かべてください。名前、年齢、メールアドレスなどが、きれいに表で並んでいます。
この表のことを「テーブル」と呼びます。縦の列は「カラム(項目)」、横の行は「レコード(1人分のデータ)」です。MySQLでは、このテーブルに対してSQLという命令文を使って操作します。
2. SQLとは何か?EXPLAINとの関係
SQLは、データベースにお願いをするための言葉です。「この人を探して」「この条件に合う人を全部見せて」といった指示を出します。SQLを書いて実行すると、MySQLが中のデータを探して結果を返してくれます。
EXPLAINは、そのSQLを実行する前に「どうやって探す予定なのか」を説明してもらうための命令です。結果を出すのではなく、探し方の説明書を表示します。そのため、初心者がSQLの動きを理解するのにとても役立ちます。
3. EXPLAINとは?何が分かるのか
MySQLのEXPLAINは、SQLの前にEXPLAINと書くだけで使えます。これにより、MySQLがテーブルをどの順番で見ているのか、全部を見るのか、一部だけを見るのかが分かります。
たとえば、本棚から本を探すときに、最初から最後まで全部見る方法と、あいうえお順の目次を使って探す方法があります。EXPLAINは「今回はどの探し方を使います」と教えてくれる機能です。
4. 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 | 田中美咲 | 28 | misaki@example.com
この表から、年齢が20歳未満の人を探すSQLを考えてみます。
5. 基本的なEXPLAINの使い方
通常のSQLは次のように書きます。
SELECT *
FROM users
WHERE age < 20;
このSQLの前にEXPLAINを付けます。
EXPLAIN
SELECT *
FROM users
WHERE age < 20;
これを実行すると、データは表示されず、代わりに「どのようにusersテーブルを調べるか」という情報が表示されます。たとえば、全部の行を順番に見ているのか、条件に合うところだけ見ているのかが分かります。
SQL実行後のテーブル自体は変わりません。
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
6. EXPLAINでよく見る項目をやさしく解説
EXPLAINの結果には、いくつかの英単語が並びます。最初は難しく見えますが、意味は単純です。
「type」は、どんな探し方をしているかを表します。全部を見る場合や、条件に合うものだけを見る場合があります。「rows」は、何行くらい見る予定かという目安です。数字が小さいほど、楽な探し方だと考えてください。
これらは成績表のようなもので、「今回はこのくらい大変な作業ですよ」と教えてくれています。
7. インデックスとEXPLAINの関係
インデックスとは、本の巻末にある索引のようなものです。年齢のインデックスがあると、「20歳未満」を探すときに全部を見なくてすみます。
年齢にインデックスがある場合のSQL例です。
EXPLAIN
SELECT name, age
FROM users
WHERE age = 25;
この場合、EXPLAINの結果を見ると、少ない行だけを調べていることが分かります。これにより、SQLが速く動きます。
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
8. ORDER BYやLIMITとEXPLAIN
並び替えや件数制限があるSQLでも、EXPLAINは役立ちます。たとえば、年齢順に並べて3人だけ表示するSQLです。
EXPLAIN
SELECT *
FROM users
ORDER BY age
LIMIT 3;
EXPLAINを見ることで、並び替えのためにどれくらいの行を使っているかが分かります。大量のデータがあるとき、この違いはとても大きくなります。
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
9. 初心者がEXPLAINを見るときの考え方
最初は、EXPLAINのすべてを理解する必要はありません。「たくさんの行を見ているか」「少しだけ見ているか」に注目してください。rowsの数字が極端に大きい場合は、「全部探しているんだな」と考えれば十分です。
EXPLAINは、SQLのテスト勉強のようなものです。本番で実行する前に中身を確認できるので、失敗を減らせます。MySQLとSQL、データベースの仕組みを理解する第一歩として、とても大切な機能です。