こんにちは。この記事では、MySQLのパフォーマンスチューニングの前に実施するパフォーマンス測定のうち、実行計画の確認で利用するEXPLAINコマンドについて紹介します。
MySQLの実行計画は、SQLクエリの実行方法を詳細に示す重要なツールです。
以下に実行計画の概要と主要なポイントをまとめます。
パフォーマンスチューニングの概要、スロークエリの特定方法は以下の記事で紹介しておりますので、ご参考ください。
実行計画とは
実行計画は、MySQLがSQLクエリをどのように処理するかを示す「実行手順書」のようなものです。
これにより、以下のような情報を得ることができます。
- インデックスの使用状況
- テーブルのスキャン方法
- 結合の順序と方法
- データアクセスの効率性
EXPLAINコマンドの利用
実行計画の取得はEXPLAINコマンドを利用します。
EXPLAINコマンドは、MySQLのクエリ実行計画を分析するための強力なツールです。
スロークエリを確認し、疑わしいクエリに対してEXPLAINコマンドを実行することでインデックスが利用されていないなどの問題の特定に役立ちます。
以下にEXPLAINコマンドの主な特徴と使用方法を説明します。
基本的なコマンド文法
クエリの前に「EXPLAIN」をつけて実行します。
EXPLAIN クエリ文;
コマンドの出力結果例と見方
EXPLAINコマンドの実行結果の例とその見方を紹介します。
実行環境は以下の通りです。
OS | CentOS Stream release 9 |
MySQL | 8.4.2 MySQL Community Server |
データベース名 | my_database |
テーブル名 | users |
テーブルusersのカラム情報は以下の通りで、20件のデータを格納しています。
mysql> desc users;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| user_id | int | NO | PRI | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int | YES | MUL | NULL | |
| birthplace | varchar(50) | YES | | NULL | |
+------------+-------------+------+-----+---------+-------+
4 rows in set (0.07 sec)
mysql>
テーブルusersに対して、全データのうち、出身地(birthplace)がtokyoのユーザをSELECTする文のEXPLAINコマンドを実行してみます。
実行結果は以下の通りです。
mysql> EXPLAIN select * from users where birthplace='tokyo';
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | users | NULL | ALL | NULL | NULL | NULL | NULL | 20 | 10.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
mysql>
各列の情報は以下の通りです。
まとめ
今回はMySQLのパフォーマンスチューニングを紹介しました。
実行計画の分析は、SQLクエリのパフォーマンス改善に不可欠なスキルです。
定期的に実行計画を確認し、必要に応じてクエリやインデックスを最適化することで、データベースの効率を大幅に向上させることができます。
ご参考になれば、幸いです。
以上になります。ありがとうございました。
参考
https://zenn.dev/yuulab/articles/f415920220acf9
https://qiita.com/fumiya_sasaki_9933/items/f13789a3849f890eda04
コメント