4
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 1 year has passed since last update.

とりあえずEXPLAINしたときに確認するポイント!

Last updated at Posted at 2023-11-28

EXPLAINとは

クエリを実行する際、ボトルネックとなっているポイントがどこにあるかを確認するために使用されます。
出力される項目を理解することで高速なクエリを作ることができます。

実行方法

確認したいクエリの前にEXPLAINを付けるだけ

このtypeが出ていたら見直し!

ALL

見直し推奨!
フルテーブルスキャンが行われている。とても遅い。

index

ALLよりは早いがフルインデックススキャンされている。
数行だけだったら問題ないが、クエリが返す行数が多い場合、パフォーマンスが悪い。

Extraを見る!

Using filesort

結果をソートするために一時テーブルでのファイルソートが発生している。
クエリのORDER BYでインデックス使われてない可能性があるのでパフォーマンスが悪い。

ORDER BYでインデックスを使用する。

Using temporary

クエリの実行中に一時テーブルが作成されていることを示している。
JOINORDER BYGROUP BYDISTINCTなどを使用すると発生することがあり、
一時テーブルの作成することでパフォーマンスのボトルネックになる可能性がある。

tmp_table_sizemax_heap_table_sizeなどの設定を調整することで解決する。
また、ORDER BYGROUP BYを使用している場合は、インデックスを使うようにする。

クエリを早くするには…?

  • 否定を使わない
    <>!=NOT 〇〇を使うとインデックスが使用されず、フルテーブルスキャンが行われてしまう。

  • SELECTの*は使わない
    必要なカラムのみ指定したほうが早い

  • DISTINCTやUNIONなどの重複排除は使わない.
    重複排除を行う際、一時テーブルが作成されるので避ける。

  • 適切なインデックスを使用する
    どのインデックスが使用されているか確認するにはEXPLAINpossible_keys(使われるインデックス候補)およびkey(使われたインデックス)を見る。

参考記事

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