参考
http://blog.csdn.net/mr253727942/article/details/51201222
执行计划分析
通过再查询SQL前面添加Explain关键字,来实现查看 执行计划
EXPLAIN select * from wx_ib where id=500;
-
select_type
每个select子句的类型,主要分成下面几种:
a. SIMPLE:查询中不包含任何子查询或者union
b. PRIMARY:查询中包含了任何复杂的子部分,最外层的就会变成PRIMARY
c. SUBQUERY:在SELECT或者WHERE列表中包含了子查询
d. DERIVED:在FROM中包含了子查询
e. UNION:如果第二个SELECT出现在UNION之后,则被标记为UNION,如果UNION包含在FROM子句的子查询中,外层SELECT会被标记为:DERIVED
f. UNION RESULT从UNION表获取结果的select -
type
是指MySQL在表中找到所需行的方式,也就是访问行的”类型”,从a开始,效率逐渐上升:
a:all:全表扫描,效率最低
b:index:index会根据索引树遍历
c:range:索引范围扫描,返回匹配值域的行。
d:ref:非唯一性索引扫描,返回匹配某个单独值的所有行。一般是指多列的唯一索引中的某一列。
e:eq_ref:唯一性索引扫描,表中只有一条记录与之匹配。
f:const、system:主要针对查询中有常量的情况,如果结果只有一行会变成system
g:NULL:显而易见,既不走表,也不走索引 -
possible_keys
possible_keys列预估了mysql能够为当前查询选择的索引,这个字段是完全独立于执行计划中输出的表的顺序,意味着在实际查询中可能用不到这些索引。
如果该字段为空则意味着没有可使用的索引,这个时候你可以考虑为where后面的字段建立索引 -
key
这个字段表示了mysql真实使用的索引。如果mysql优化过程中没有加索引,可以强制加hint使用索引
性能明细查看
show profiles;(如果未开启的话,set profiling=1;)
可以查看具体的耗时信息
网友评论