MySQL EXPLAIN语句中的extended 选项介绍 |
本文标签:MySQL EXPLAIN语句 以下的文章主要讲述的是MySQL EXPLAIN语句中的extended 选项的实际应用与具体的操作步骤,我们大家都了解MySQL数据库中有一个explain 命令,其主要功能是用来分析select 语句的运行效果,例如explain可以获得select语句 。
使用的索引情况、排序的情况等等 。除此以外,explain 的extended 扩展能够在原本explain的基础
上额外的提供一些查询优化的信息,这些信息可以通过MySQL的show warnings命令得到 。下面是一个最简单的例子 。
首先执行对想要分析的语句进行MySQL explain,并带上extended选项
MySQL> explain extended select * from account\G;
1. row
接下来再执行Show Warnings MySQL> show warnings\G; 1. row Level: Note
从 show warnings的输出结果中我们可以看到原本的select * 被MySQL优化成了
select `dbunit`.`account`.`id` AS `id`,`dbunit`.`account`.`name` AS `name` 。
explain extended 除了能够告诉我们MySQL的查询优化能做什么,同时也能告诉我们MySQL的
查询优化做不了什么 。MySQL performance的Extended EXPLAIN这篇文中中作者就利用explain
extended +show warnings 找到了MySQL查询优化器中不能查询优化的地方 。
从 EXPLAIN extended SELECT * FROM sbtest WHERE id>5 AND id>6 AND c=”a” AND pad=c
语句的输出我们得知MySQL的查询优化器不能将id>5 和 id>6 这两个查询条件优化合并成一个 id>6 。
在MySQL performance的explain extended文章中第三个例子和静室的MySQL explain的extended选项文章中, 两位作者也对explain extended做了进一步的实验,从这个两篇文中中我们可以得出结论是从
explain extend的输出中,我们可以看到sql的执行方式,对于分析sql还是很有帮助的 。
下面特别摘抄了静室的explain的extended选项这篇文章中的内容
以下代码和分析摘抄至静室的explain的extended选项
子查询看起来和外部的查询没有任何关系,为什么MySQL显示的是DEPENDENT SUBQUERY, 和外部相关的查询呢?从explain extended的结果我们就可以看出原因了 。
MySQL>show warnings\G 1. row
在这里MySQL改写了SQL,做了in的优化 。 以上代码和分析摘抄至静室的explain的extended选项
不过需要注意的一点是从EXPLAIN extended +show warnings得到“优化以后”的查询语句 可能还不是最终优化执行的sql,或者说MySQL explain extended看到的信息还不足以说明MySQL最
终对查询语句优化的结果 。同样还是MySQL formance的explain Extended这篇文章的第二个
例子就说明了这种情况
1. row Level: Note
从Explain的结果中我们可以得到t1表的查询使用的是”const”类型,也就是说MySQL查询的时候
会先由t1.id=5 找到t1.k 再利用t1.k的值去t2表中查询数据,很显然这样的查询优化结果没有在
接下来的Show Warings输出中找到 。
总结
还是引用静室 在explain的 extended选项这篇文章中的几句话”从MySQL explain extend的输出中,我们可以
看到sql的执行方式,对于分析sql还是很有帮助的” 。 |