MySQL, チューニング

MySQLのクエリチューニング、アーキテクチャとか メモ

 

チューニング

 

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

 

誰かに説明する場合に上記サイトを見せれば大丈夫そう。
わかりやすい(ㆁᴗㆁ✿)

 

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)