MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでSybase ASEコマンドと同等の操作を行う方法|EXPLAINキーワードの使い方を解説

MySQLには、Sybase ASEのコマンドに相当する機能として「EXPLAIN」キーワードが用意されています。EXPLAINを使用すると、SELECT文などのクエリがどのような実行計画で処理されるかを確認でき、インデックスが適切に使われているかどうかを把握できます。

この記事では、実際にテーブルを作成し、データを挿入したうえで、EXPLAINによる実行計画の確認方法を具体的な例とともに解説します。

1. サンプルテーブルの作成

まず、検証用のテーブルを作成します。あわせて、検索対象となるカラムにインデックスも設定しておきましょう。

mysql> create table DemoTable1531
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20)
-> );
Query OK, 0 rows affected (2.92 sec)

mysql> create index Name_index1 on DemoTable1531(StudentName);
Query OK, 0 rows affected (0.99 sec)
Records: 0 Duplicates: 0 Warnings: 0

ここでは、学生ID(StudentId)を主キーとして自動採番するテーブルを作成し、StudentNameカラムに対して「Name_index1」というインデックスを作成しています。

2. テーブルへのレコード挿入

次に、INSERT文を使ってテーブルにレコードを追加します。

mysql> insert into DemoTable1531(StudentName) values('Chris');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable1531(StudentName) values('Robert');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable1531(StudentName) values('David');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable1531(StudentName) values('Mike');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable1531(StudentName) values('Carol');
Query OK, 1 row affected (0.09 sec)

3. 登録データの確認

SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認します。

mysql> select * from DemoTable1531;

実行結果は以下の通りです。

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 5 | Carol |
| 1 | Chris |
| 3 | David |
| 4 | Mike |
| 2 | Robert |
+-----------+-------------+
5 rows in set (0.00 sec)

4. EXPLAINで実行計画を確認する

Sybase ASEコマンドに相当するMySQLの機能が、ここで登場するEXPLAINです。SELECT文の先頭にEXPLAINを付けるだけで、そのクエリの実行計画を確認できます。

mysql> EXPLAIN select * from DemoTable1531 where StudentName='Mike';

実行結果は以下のようになります。

+----+-------------+---------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+---------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
| 1 | SIMPLE | DemoTable1531 | NULL | ref | Name_index1 | Name_index1 | 63 | const | 1 | 100.00 | Using index |
+----+-------------+---------------+------------+------+---------------+-------------+---------+-------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

実行計画の出力内容のポイント

  • type: 「ref」と表示されているため、インデックスを使った効率的な検索が行われています。
  • possible_keys / key: 作成しておいた「Name_index1」が候補として挙がり、実際にも使用されていることがわかります。
  • rows: スキャンが必要な行数が「1」であり、非常に少ないコストで検索できることを示しています。
  • Extra: 「Using index」と表示されており、インデックスのみで処理が完結している(カバリングインデックス的な動作)ことが確認できます。

まとめ

Sybase ASEで実行計画を確認していた処理は、MySQLではEXPLAINキーワードで代替できます。EXPLAINを活用することで、クエリがインデックスを正しく利用しているか、ボトルネックがないかを事前に把握でき、パフォーマンスチューニングに役立ちます。慢性的に遅いクエリがある場合は、まずEXPLAINで実行計画を確認する習慣をつけるとよいでしょう。

  1. WindowsのPATH環境変数にMySQLを追加する方法

    環境変数は、コマンドプロンプトから設定することができます。現在のコマンドプロセッサの実行時にのみ反映される一時的な設定と、今後のセッションにも恒久的に反映される設定の2種類があります。恒久的に設定したい場合は、スタートアップファイルに記述するか、OSが提供する環境変数設定用のインターフェースを利用します。詳細については、お使いのコマンドインタープリターのドキュメントをご確認ください。環境変数に値を指定する際は、使用しているコマンドプロセッサに対応した構文を使う必要があります。コマンドプロンプトで環境変数を設定するコマンドを実行すると、変更は即座に反映されます。ただし、この方法での設定はユーザー

  2. MacでMySQLを完全にアンインストールする方法【バックアップから削除まで】

    MacからMySQLを完全にアンインストールしようと考えている方へ。実は、MySQLの削除は思っているほど単純ではありません。このチュートリアルでは、MacBook上でMySQLをきれいにアンインストールするための手順を、ステップバイステップでわかりやすく解説します。 ステップ1:データベースのバックアップを作成する MySQLを削除した後もデータベースを残しておきたい場合は、必ず事前にバックアップを作成しておきましょう。 mysqldumpコマンドを使うと、データベースの内容をテキストファイルとして書き出せます。.sql形式のバックアップファイルがあれば、後でデータベースを再構築したいとき