1
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?

More than 3 years have passed since last update.

EXPLAINを使ってクエリをチューニングする

Last updated at Posted at 2020-10-03

パフォーマンス改善のために、EXPLAINを使って、インデックスの貼り方を調査する時のメモ。
Railsを使っているので、その前提で書いている。

EXPLAINの手順

まずは Rails のログを見て、発行されているクエリを確認する。

Hoge Exists (0.7ms)  SELECT  1 AS one FROM `hoges` WHERE `hoge`...

続いて、MySQLに接続する。データベースを選択したら、上記のクエリに EXPLAIN をつけて実行。

mysql> EXPLAIN SELECT  1 AS one FROM `hoges` WHERE `hoge`...;
+----+-------------+-------------+------+-----------------------------------------------------------------------------------------------+---------------------------+---------+-------+------+------------------------------------+
| id | select_type | table       | type | possible_key         | key                 | key_len | ref   | rows | Extra                              |
+----+-------------+-------------+------+-----------------------------------------------------------------------------------------------+---------------------------+---------+-------+------+------------------------------------+
|  1 | SIMPLE      | hoges       | ref  | index_hoges_on_fuga  | index_hoges_on_fuga | 1023    | const |    1 | Using index condition; Using where |
+----+-------------+-------------+------+-----------------------------------------------------------------------------------------------+---------------------------+---------+-------+------+------------------------------------+
1 row in set (0.00 sec)

このようにして、クエリの実行計画を確認していき、より良い結果になる貼り方を選ぶ。
複数の候補があれば、インデックスを貼らなかった場合、貼った場合(案1)、貼った場合(案2)と検証していけば良い。

EXPLAINの見方

特に確認しておきたいのは、key、key_len、rows、Extraあたり。

key

possible_key(候補として挙げられたkey)の中から選ばれたkey。

key_len

キーの長さ。短い方が高速になる。

rows

おおよその行数の見積もり。

Extra

Using index となっていれば、クエリがインデックスを用いて解決できたことを示しており、インデックスによる高速化を図りたい場合は目安になる。
ちなみに、上記の表では Using index condition となっているが、この場合はクエリがインデックスの値を一部利用できることを示している。

1
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
1
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?