0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

結局、SQLの実行計画って何が嬉しいのって話 その1 ~基本とSQLパフォーマンスの初歩~

Last updated at Posted at 2025-03-31

はじめに

「SQLのパフォーマンスがよくないので実行計画を確認してください。」とは言われても……
何を確認してどうSQLをチューニングすればいいの?実行計画の何が嬉しいんだ?
そもそも実行計画ってなに?って感じなので、
本記事では、実行計画とは何か、EXPLAINを使った実行計画の見方、SQLの最適化方法についてまとめます。


そもそも実行計画ってなに?

実行計画とは、SQLクエリを実行するための「手順書」のようなものです。具体的には、データベースがどのような手法でクエリを実行し、どのリソースをどの順番で利用するかを示した計画です。言い換えれば、実行計画はデータベースが「どのようにしたら最も効率的にクエリを実行できるか」を計算して導き出した方法をまとめたものと言えます。

つまり、データベースが判断したパフォーマンスの高いSQLを具体的に確認することができて、どうしたらより短い時間でSQLを実行できるか、具体的な方法をまとめたもの?


実行計画を確認する目的

実行計画を確認する目的は、クエリが意図した通りに実行されているか、
またはどの部分でパフォーマンスの低下が生じているかを確認すること。
具体的には、以下のような情報を得ることができる。

テーブルのスキャン方法

テーブルを「フルスキャン」しているのか、それともインデックスを利用して効率よくデータを検索しているのか。

命令のコスト

命令の開始コスト(スキャン対象の行数に関わらずかかるコスト)や、命令の終了コスト(スキャン対象行数が増えると増えるコスト)。

推定行数

実行計画に基づいてデータベースが予測するスキャン対象となる行数。


EXPLAINってどうつかうのよ

普段使用するSQLの先頭にEXPALINをつけるだけでいいらしい
実行するとどのようにインデックスが利用され、どのテーブルがスキャンされるのかがわかる

// SQL
EXPLAIN SELECT * FROM users WHERE age > 10;

// 実行結果
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
|  1 | SIMPLE      | users | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+

EXPLAINの出力内容

ID:クエリの処理ステップのID。複数の処理ステップがある場合に、順番を識別します
Select_type:クエリの種類(SIMPLE, PRIMARY, SUBQUERYなど)
Table:クエリがアクセスするテーブル名
Type:テーブルへのアクセス方法(ALL, INDEX, RANGEなど)
Possible_keys:使用可能なインデックス
Key:実際に使用されるインデックス
Rows:スキャンされる行数の推定
Extra:その他の情報(例えば、Using whereやUsing indexなど)


まとめ

・SQLクエリのパフォーマンスを最適化するためには、実行計画を確認することが大切
・EXPLAINを使用することで、SQLがどのように実行されるかを把握し、インデックスの利用状況やテーブルスキャンの方法を確認できる
・クエリの最適化を行うことで、アプリケーションのパフォーマンスを大きく改善することができる

その2は具体的に実行計画を利用した、SQLパフォーマンスの改善方法
について書こうと思います
結局、SQLの実行計画って何が嬉しいのって話 その2 ~クエリの最適化とパフォーマンス改善~

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?