在日常的MYSQL优化中我们常常看到这样一个关键词:explain,例如这种:
EXPLAIN SELECT * FROM Cloud_Order WHERE money > 10;
explain是什么呢?使用 EXPLAIN 关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。通过explain命令可以得到:
-
表的读取顺序
-
数据读取操作的操作类型
-
哪些索引可以使用
-
哪些索引被实际使用
-
表之间的引用
-
每张表有多少行被优化器查询
首先让我们来看看使用EXPLAIN输入的结果
结果显示输出了结果一堆字段和对应的值,但是这些字段是什么意思?对应的值又是什么呢?如何通过这些字段来分析到SQL的性能并做出优化呢?别急,下面我们就一起来一一分析。
EXPLANIN字段分析
explain实践
说了这么多,实践才能出真知。下面我们通过一个简单的例子来优化我们一些不堪的SQL。
首先我们还是一张数据表举例。表结构如下。
这是一张典型的订单表,其他字段我们可以省略不看,我们可以只看一个money字段,这基本是订单表都会用到的字段。由于时间关系,事先我已经为这个表准备了一堆模拟数据。
从上图可以看出,表中已经有一万条数据,下面我们来写一个根据money条件来查询订单的SQL。
只能说上图的结果不尽人意。让我们回到之前explain字段的分析,其中type字段的值是ALL,按照分析来说,这个表用了全表搜索,我们应尽量避免!!!再看rows字段,值是16242,天啊!!所有记录都去请求了,那慢是有原因的。
好了,通过上面的数据分析,我们可以去想一下,money字段是否能加上索引来提升查询速度呢?因为上述结果中好像是没用到索引的。话不多说,我们来为money字段加上索引
经过加上索引之后,相同的sql语句,得出的结果完全不一样,type字段变成了range,我们也看到key显示了money,证明了索引值被用上了。更重要的是rows字段变成了785,跟原来相比少了不知道多少,可想而知性能有了多大的提高!
好了,上面就是explain的简单实践。
总结
通过explain,我们可以对原有的sql做进行不同的分析,可以分析出有没有使用到索引,可以知道这是一条快SQL还是慢SQL,EXPLAIN的作用就是帮我们显示出SQL的性能瓶颈和各项可能的结果,这对于我们去优化MSQL的查询有着重要的意义,根绝EXPALIN字段返回不同的结果,我们就能对原有的慢SQL进行改造了。
文章来自公众号:睿江云计算