背景
先日、「EXPLAINコマンドのどこを見るか、どう判断するか」といった質問に答えることができず
悔しい思いをしたので調べて記事にしてみようと思いました...
いっぱい項目あったのでまずはtype編。
と言っても全部やるかはわからないです (わからないんかい)
typeで確認できること
type | 意味 |
---|---|
const | join以外でPKやユニークキーを使う場合。最速 |
eq_ref | joinのときにPKやユニークキーを使う場合。joinのときはこの値になれば最速。constの次に速い |
ref | インデックスを使った検索。eq_refの次に速い |
range | インデックスを使った範囲検索。refの次に速い |
index | フルインデックススキャン。インデックスをALL検索するためこれも重い |
ALL | フルスキャン。一番重い |
ふむふむ。
インデックスを使っていればそれでいいというわけでもないようです。
かといって全て最速にすべきなのか?となるので、
まずは最低限避けるべきポイントをおさえたいと思います。
チェックすべきポイント
以上のtypeの中であまり良くないとされているものは2つあり、
あった場合は要改善のようです。
typeのALL
とindex
ALL
はインデックスを利用せず、テーブルのフルスキャンが実行されているため一番遅い。
index
はALL
と違いインデックスこそ使われているが、
該当インデックスをフルスキャンする必要があるためこれも遅い処理となる。
この2つが表示されていたら、
改善できないかSQLを見直してみましょう。
最後に
気になったのでいくつか適当に実務で使っているSQLのEXPLAINを実行してみると、
見事にindexになっていました。。改善しなきゃ。。
EXPLAINもっとちゃんと使ってパフォーマンスへの意識をしっかりつけようと思いました。
めざせ、パフォーマンスの鬼・・・!
参考