6
2

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を理解する〜type編〜

Posted at

背景

先日、「EXPLAINコマンドのどこを見るか、どう判断するか」といった質問に答えることができず
悔しい思いをしたので調べて記事にしてみようと思いました...

いっぱい項目あったのでまずはtype編。
と言っても全部やるかはわからないです (わからないんかい)

typeで確認できること

type 意味
const join以外でPKやユニークキーを使う場合。最速
eq_ref joinのときにPKやユニークキーを使う場合。joinのときはこの値になれば最速。constの次に速い
ref インデックスを使った検索。eq_refの次に速い
range インデックスを使った範囲検索。refの次に速い
index フルインデックススキャン。インデックスをALL検索するためこれも重い
ALL フルスキャン。一番重い

ふむふむ。
インデックスを使っていればそれでいいというわけでもないようです。

かといって全て最速にすべきなのか?となるので、
まずは最低限避けるべきポイントをおさえたいと思います。

チェックすべきポイント

以上のtypeの中であまり良くないとされているものは2つあり、
あった場合は要改善のようです。

typeのALLindex

ALLはインデックスを利用せず、テーブルのフルスキャンが実行されているため一番遅い。

indexALLと違いインデックスこそ使われているが、
該当インデックスをフルスキャンする必要があるためこれも遅い処理となる。

この2つが表示されていたら、
改善できないかSQLを見直してみましょう。

最後に

気になったのでいくつか適当に実務で使っているSQLのEXPLAINを実行してみると、
見事にindexになっていました。。改善しなきゃ。。

EXPLAINもっとちゃんと使ってパフォーマンスへの意識をしっかりつけようと思いました。

めざせ、パフォーマンスの鬼・・・!

参考

6
2
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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?