explainの使い方

from:

https://nysql.g.hatena.ne.jp/py4s-tnk/20090502/1241278619

ポイント

・クエリの実行計画はツリーで表現されるが、explainは表で表現しているので、explainを見るためにはツリー構造をイメージできないといけないらしい
・重要なのは、select_typeとかtypeらしい。
・実際のデータを利用してexplainする。データ件数によってexplainの結果が変わってくるから。
・select以外の解析はできない。updateをselectに書き換えるなどしてexplainを使うとよい

mysql> explain select * from hoge;
+----+-------------+-------+------+---------------+------+---------+------+--------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows   | Extra |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------+
|  1 | SIMPLE      | hoge  | ALL  | NULL          | NULL | NULL    | NULL | 100000 |       |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------+
1 row in set (0.00 sec)



■id

・joinの場合、番号が同じ
・サブクエリの場合、外部クエリとサブクエリで別々のidがつけられる。

■select_type

・sqlがサブクエリやUNIONを使わない場合、SIMPLEとなる。
・sqlがjoinで構成される場合、select_typeは常にSIMPLEとなる。どんなに複雑なjoinでも。
・sqlにサブクエリを含む場合、PRIMARY、SUBQUERY、DEPENDENT SUBQUERY、UNCACHEABLE SUBQUERY、DERIVEDのどれかになる
・sqlにUNIONを含む場合、PRIMARY、UNION、UNION RESULT、DEPENDENT UNION、UNCACHEABLE UNIONのどれかとなる
・select_type=PRIMARYの意味は、サブクエリの場合、外部クエリを示す。UNIONの場合、最初にFETCHされるテーブルを示すらしい
・相関関係のないサブクエリは、SUBQUERY。相関関係のあるサブクエリはDEPENDENT SUBQUERYとなる。
・from句におけるサブクエリの場合は、DERIVEDとなる。
・実行毎に結果が変わる可能性があるサブクエリは、UNCACHEABLE SUBQUERYとなる。
・通常は外部クエリが実行されてからサブクエリが実行されるが、select_typeがDERIVEDとなっている場合は、サブクエリが最初に実行されるらしい。
・select_typeがSUBQUERYの場合は、サブクエリは一回だけ実行され、二回目以降はキャッシュされたデータが利用されるらしい。
・select_typeが、DEPENDENT SUBQUERYかUNCACHEABLE SUBQUERYの場合は、SUBQUERYみたいにキャッシュされず、毎回サブクエリが実行されるらしい。

■type

・ここがindexとかALLになっていると、SQLチューニングが必要になるらしい。

・constが最速。PRIMARY KEYとかUNIQUEインデックスが使われているとこれになるらしい。
・eq_refはjoinにおけるtypeで、constと同じと考えてよい(たぶん)
・refは、非ユニーク(つまりPRIMARYでもUNIQUEでもない)なインデックスを使って=検索をした場合のもの
・rangeはインデックスによる範囲検索
・indexはインデックス全部をスキャンしてることを示す。
・ALLは、いわゆる全表検索

■possible_keys

インデックスを使用した場合に、インデックス名が表示される

・オプティマイザがあげた、インデックス候補となるキーの一覧

key

インデックスを使用した場合に、インデックス名が表示される

・オプティマイザが選択したキー

■key_len

・選択されたkeyの長さ。これが短いほうが有利らしい

■ref

・where句で定数と比較している場合はconstとなる。joinの場合は、joinする相手側テーブルのカラムがここに表示される。

■rows

・フェッチされる予測行数(基本的に見積もりなのだが、select_typeがDERIVEDの場合は例外で正しい行数が表示される。理由はDERIVEの場合はexplainの場合でも実際にSQLが実行されるかららしい)

・ここで表示される行数はあくまでフェッチされる行数なので、where句で絞込みをしてる場合は返される行数はさらに少なくなる。

■extra

・オプティマイザのひとりごとが表示されるらしい。

・ここが理解できると、オプティマイザの挙動が理解できるらしい

・Using temporary(一時表の作成)とUsing filesortは避けるようにしたほうがいいらしい。

・参考:Mysqlpracticewiki.com


参考:漢(オトコ)のコンピュータ道: MySQLのEXPLAINを徹底解説!!

参考:MySQLのオプティマイザが少し変わったらしい


Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值