この記事は 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
Visual ExplainはExplainなしの通常のクエリから虫眼鏡のボタンを押すだけで実行できます。
表示されたboxに上にカーソルを合わせることで詳細なデータも見ることができます。
joinした場合などでも利用できてとても理解しやすくオススメです。
Non-Unique Key Lookupとは?
Visual Explainではボックスにアクセスタイプが表示されます。
上の画像のように「Index Range Scan」などはほぼ表形式と同じなのですが、「Non-Unique Key Lookup」など微妙に聞き慣れない文言が表示されることがあります。
ドキュメントを見てみると、これはExplainから得られるアクセスタイプに対するMySQL Workbench側の別名のようです。
Non-Unique Key Lookup -> REF
Index Range Scan -> RANGE
それぞれの対応はドキュメントをご確認ください。
どっちか統一してくれればいいのになんて思わないこともないですが、、、
アクセスタイプそれぞれのコストの目安なども同時に表示されるので親切!
明日の MySQL Casual Advent Calendar 2016 はatsuizoさんです!