それとサブクエリにもちゃんと個別でIndex効きます。
問題なのは基本1テーブルにつき、Indexが1つしか使わない仕様。
基本とかいうけど別にor検索なら今は自動で2つIndex使ってくれる。
昔は無理やり使うためにUnionAllしてたらしい。どうでもいいね。
あと複合Indexが地味に1つのIndexとして扱われえるのが分かりにくいというか、
分かりやすい情報が無くて辛い。いつか書く。需要は知らん。
possible_keys
重要度:★★★☆☆テーブルにアクセスする際に使えるINDEXを出します。覚えておいて損はないでしょう。
※keyの候補ですね。「使える」というだけで、実際に使ったのは「key」カラムに乗ります。
key
重要度:★★★☆☆テーブルにアクセスするのに使うINDEXを出します。どのINDEXを使ったのかが分かります。
※実際に使ったkeyですね。
type
重要度:★★★★★テーブルに対してどういうアクセスをしているかを示す。ぶっちゃけこれ見れば大体OK。
早いの
const「PRIMARY KEY」もしくは「UNIQUEINDEX」を使ったアクセス方法。 INDEXを使っているので早い。しかも一意性のあるINDEXなのでさらに早い。 最速。 ※結果は必ず1行か0行。
ref
「INDEX」を使ったアクセス方法。 INDEXを使っているので早い。一意性でないINDEXを使っているため「const」よりは遅いが早い。 超速い。 ※結果は0~n行。
range
「INDEX」を使ったアクセス方法。 INDEXが一意性だろうが無かろうが範囲検索すると出てくる。IN句等で必ず出てきます。 超速い。 ※結果は0~n行。
結論:refかrangeを狙おう。constは基本無理ゲー。
遅いの
indexフルインデックススキャン。 インデックス全体をスキャンする必要があるのでとても遅い。 かなり遅いんじゃないかな。 どんくらい遅いかは知らない。 →スゲー遅かった。200万行で1.3秒。
ALL
フルテーブルスキャン。インデックスがまったく利用されていないことを示す。 一番遅いんじゃないかな。 なんにせよ激遅。 レコードが1万以上あるテーブルにアクセスしてこれが出てきたら気を付けよう。 →論外。200万行で1.3秒。あれ?indexと同じじゃね?
結論:indexもALLもめっちゃ遅い。
その他
eq_refJOINの時に一意性のあるKEYを使うとでてくる。 速いかどうかは知らない。
Extra
重要度:★★★★☆何してるかを出す。 ここも見といたほうがいい。
0 件のコメント:
コメントを投稿