LoginSignup
11
7

More than 5 years have passed since last update.

MySQL WorkbenchのVisual Explainでのみ出てくるaccess typeの話

Posted at

この記事は MySQL Casual Advent Calendar 2016 の20日目です。

tl;dr

  • explainはjsonで出そう
  • MySQL WorkbenchのVisual Explainだとjsonを元にいい感じにビジュアライズしてくれる
  • Visual Explainでのみ出て来るアクセスタイプがあるけど、単なる別名なだけな模様

概要

MySQL5.6からjson形式でexplain結果を出力できるようになりました。
jsonで出すことで表形式より多くの情報が得ることができます。

例えば「used_key_parts」は選択されたindexのどこまでのkeyを使ったかがわかります。
表形式だけだとkey_lengthから推測していたのが、カラム単位でわかるのでカーディナリティの低いkeyが無視されたなどもすぐわかります。

EXPLAIN FORMAT=JSON SELECT * FROM tmp_db.user_tbl WHERE hoge_column = 5 AND var_column = 10;

----略
    "key": "index_hoge_var",
    "used_key_parts": [
      "hoge_column",
      "var_column"
    ],
----

さらにMySQL WorkbenchのVisual Explainを使えばjsonを元に実行計画をいい感じにビジュアライズしてくれます

MySQL WorkbenchのVisual Explain

explain_1.png

Visual ExplainはExplainなしの通常のクエリから虫眼鏡のボタンを押すだけで実行できます。
表示されたboxに上にカーソルを合わせることで詳細なデータも見ることができます。
joinした場合などでも利用できてとても理解しやすくオススメです。

Non-Unique Key Lookupとは?

Visual Explainではボックスにアクセスタイプが表示されます。
上の画像のように「Index Range Scan」などはほぼ表形式と同じなのですが、「Non-Unique Key Lookup」など微妙に聞き慣れない文言が表示されることがあります。

explain_2.png

ドキュメントを見てみると、これはExplainから得られるアクセスタイプに対するMySQL Workbench側の別名のようです。

Visual Explain Plan

Non-Unique Key Lookup -> REF
Index Range Scan -> RANGE

それぞれの対応はドキュメントをご確認ください。
どっちか統一してくれればいいのになんて思わないこともないですが、、、
アクセスタイプそれぞれのコストの目安なども同時に表示されるので親切!

明日の MySQL Casual Advent Calendar 2016 はatsuizoさんです!

11
7
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
11
7