もくじ
チューニング
MySQLでのSQLチューニングについて(EXPLAINの見方)
@see http://labs.opentone.co.jp/?p=1985
partitions:
partition構成のテーブルの場合に、その処理がアクセスしているpartitionを表す。
テーブルをパーティショニングしている場合に見る。
type:
結合型を表す。以下、それぞれの結合型の表す内容。
- system:
テーブルが1レコードのみで構成される場合、systemとなる。
systemはconstの特殊なパターンと見なせる。
- const:
指定した条件でテーブルから取得するレコードが1レコードのみとなる場合、
このレコードの値はオプティマイザによって定数と見なされ、
1回しか読み取られないため、高速。
- eq_ref:
Oracleで言う、nested loop joinに相当すると思われる。
外側のクエリで取得したレコード1レコードずつに対して、1レコードずつアクセスする。
- ref:
こちらは、nested loopでも、内側のクエリとの結合キーがuniqueではない場合に使用する結合形式。
当然、内側のクエリではキーに該当するレコードが全て取得される。
- ref_or_null:
refに加えて、結合キーの値がnullの場合の検索も実行される。
- index_merge:
複数のrenge scan結果を結合する場合に使われるらしい。
- unique_subquery:
サブクエリの返却する値が1レコードの場合に使用される。
- index_subquery:
サブクエリの返却する値が複数の場合に使用される。
- range:
インデックス範囲検索の場合に使用。
- index:
インデックスツリーに対する全件検索。Oracleで言う、index full scanに相当すると思われる。
-
ALL:全表検索。Oracleで言う、full scan。
オンライン処理のように、ある特定のレコードを取得してそのレコードを更新するような処理系であれば、
まずは”ALL”をなくすようにインデックスを利用するのが通常のチューニングになりますね。
○補足
const・・・PKやUNIQUEインデックスの等価検索
ref・・・UNIQUEでないインデックス使用検索時。セカンダリインデックスを禁止していたら問題大あり
range・・・INDEXを用いた範囲検索時
index・・・INDEX内のフルスキャン
ALL・・・全表走査。インデックスが効いていない状態。
@see http://qiita.com/Tsuji_Taku50/items/43eb2a41915d03173773
EXPLAINを利用した解析とチューニング。
type項目のALL(全件検索)をなくしていくように、indexを利用しクエリチューニングを行う。
○アーキテクチャ
MySQLのアーキテクチャ概要
@see http://d.hatena.ne.jp/graySpace/20140913/1410583400
誰かに説明する場合に上記サイトを見せれば大丈夫そう。
わかりやすい(ㆁᴗㆁ✿)