怎么做性能分析
使用EXPLAIN关键字!
使用EXPLAIN关键字可以知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。
但EXPLAIN并不能直接反馈我们建的索引的好坏。
用法是这样的,我们建好了索引mysql索引,拿着业务中最常用的几句SQL语句来EXPLAIN一下mysql索引,如果反馈的效果好,那么建立的索引就是最适合这个表的,反之则需要改进。
要不改索引,要不改SQL。
EXPLAIN玩法语句
explain 要查看的sql语句(横表)或explain 要查看的sql语句G(竖表)
一个具体的例子
各个字段解释
从上图中我们可以看到,explain出来的信息有以下字段:
idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra
你仔细看看,这么长是不是有点像工资条?
其中各个字段代表的意思是这样的:
案例
最后来看一个简单的案例,我会先放题目,再放思路,最后放答案。
题目
要求是写出SQL的执行顺序。
思路首先看id列,id越大优先级越高,索引从id为4的那一行开始看,这一行的table为t2,即查询的是t2,所以最先查找的反而是最后的部分select name,id from t2。id为3的这一行,table是t1,所以查的是select id,name from t1 where other_column='';这一行后面的Extra列的Using where同样佐证了这点。id为2的这一行,table是t3,所以查的是select id from t3;另外,key列是primary说明用到了主键作为索引,Extra列的Using Index表示用到了覆盖索引(即索引用在了select后面)。id为1的这一行,table是,意思是根据【id为3的那一行的查询结果】来查询(对应的你也可以看到id为3的那一行的select_type列为Derived),所以查的是select d1.name,(select id from t3)d2 from (select id,name from t1 where other_column = '') d1id为NULL这一行,table是,意思是根据【id为1和4的那两行的查询结果】来实现union查询。答案
1.select name,id from t2
2.select id,name from t1 where other_column=''
3.select id from t3
4.select d1.name,(3.result)d2 from (2.result) d1
5.(4.result) union (1.result)
最后还是建议结合前面每个字段的解释,有自己的一个思考过程是最好的。
最后
今天说的是如何看explain的结果。
就好像咱们控制台打印信息是为了看代码运行的情况一样,看完了,如果有bug,还要动手改的。
而我们今天只是说如何看而已,下一步,就是如何改了。
限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688