MYSQL EXPLAIN语句的extended 选项

以下的文章主要讲述的是MySQL EXPLAIN语句中的extended 选项的实际应用与具体的操作步骤,我们大家都了解MySQL数据库中有一个explain 命令,其主要功能是用来分析select 语句的运行效果,例如explain可以获得select语句。

    MySQL数据库中有一个explain 命令,其主要功能是用来分析select 语句的运行效果,例如explain可以获得select语句使用的索引情况、排序的情况等等。除此以外,explain 的extended 扩展能够在原本explain的基础上额外的提供一些查询优化的信息,这些信息可以通过MySQL的show warnings命令得到。下面是一个最简单的例子。

使用的索引情况、排序的情况等等。除此以外,explain 的extended 扩展能够在原本explain的基础

首先执行对想要分析的语句进行explain,并带上extended选项

上额外的提供一些查询优化的信息,这些信息可以通过MySQL的show warnings命令得到。下面是一个最简单的例子。

mysql> explain extended select * from accountG;

首先执行对想要分析的语句进行MySQL explain,并带上extended选项

*************************** 1. row ***************************

MySQL> explain extended select * from accountG;

id: 1

  1. row

    id: 1  select_type: SIMPLE  table: account  type: ALL  possible_keys: NULL  key: NULL  key_len: NULL  ref: NULL  rows: 1  filtered: 100.00  Extra:  1 row in set, 1 warning (0.00 sec) 

select_type: SIMPLE

接下来再执行Show Warnings

table: account

MySQL> show warningsG;

type: ALL

  1. row Level: Note

    Code: 1003  Message: select dbunit.account.id AS id,dbunit.account.name AS name from dbunit.account  1 row in set (0.00 sec) 

possible_keys: NULL

从 show warnings的输出结果中我们可以看到原本的select * 被MySQL优化成了

key: NULL

select `dbunit`.`account`.`id` AS `id`,`dbunit`.`account`.`name` AS `name`。

key_len: NULL

explain extended 除了能够告诉我们MySQL的查询优化能做什么,同时也能告诉我们MySQL的

ref: NULL

查询优化做不了什么。MySQL performance的Extended EXPLAIN这篇文中中作者就利用explain

rows: 1

extended show warnings 找到了MySQL查询优化器中不能查询优化的地方。

filtered: 100.00

从 EXPLAIN extended SELECT * FROM sbtest WHERE id>5 AND id>6 AND c=”a” AND pad=c

Extra:

语句的输出我们得知MySQL的查询优化器不能将id>5 和 id>6 这两个查询条件优化合并成一个 id>6。

1 row in set, 1 warning (0.00 sec)

在MySQL performance的explain extended文章中第三个例子和静室的MySQL explain的extended选项文章中,

接下来再执行Show Warnings

两位作者也对explain extended做了进一步的实验,从这个两篇文中中我们可以得出结论是从

mysql> show warningsG;

explain extend的输出中,我们可以看到sql的执行方式,对于分析sql还是很有帮助的。

*************************** 1. row ***************************

下面特别摘抄了静室的explain的extended选项这篇文章中的内容

Level: Note

以下代码和分析摘抄至静室的explain的extended选项

Code: 1003

MySQL>explain extended select * from t where a in (select b from i);   —- ——————– ——- ——   | id | select_type | table | type |   —- ——————– ——- ——   | 1 | PRIMARY | t | ALL |  | 2 | DEPENDENT SUBQUERY | i | ALL |   —- ——————– ——- ——   2 rows in set, 1 warning (0.01 sec) 

Message: select `dbunit`.`account`.`id` AS `id`,`dbunit`.`account`.`name` AS `name` from `dbunit`.`account`

子查询看起来和外部的查询没有任何关系,为什么MySQL显示的是DEPENDENT SUBQUERY,

1 row in set (0.00 sec)

和外部相关的查询呢?从explain extended的结果我们就可以看出原因了。

从 show warnings的输出结果中我们可以看到原本的select * 被mysql优化成了

MySQL>show warningsG

select `dbunit`.`account`.`id` AS `id`,`dbunit`.`account`.`name` AS `name`。

  1. row

    Level: Note  Code: 1003  Message: select test.t.a AS a,test.t.b AS b,test.t.c AS c  from test.t where  (test.t.a,  (select 1 AS Not_used from test.i  where ((test.t.a) = test.i.b)))  1 row in set (0.00 sec) 

explain extended 除了能够告诉我们mysql的查询优化能做什么,同时也能告诉我们mysql的

在这里MySQL改写了SQL,做了in的优化。

查询优化做不了什么。Mysql performance的Extended EXPLAIN这篇文中中作者就利用explain

以上代码和分析摘抄至静室的explain的extended选项

extended show warnings 找到了mysql查询优化器中不能查询优化的地方。

不过需要注意的一点是从EXPLAIN extended show warnings得到“优化以后”的查询语句

从 EXPLAIN extended SELECT * FROM sbtest WHERE id>5 AND id>6 AND c="a" AND pad=c

可能还不是最终优化执行的sql,或者说MySQL explain extended看到的信息还不足以说明MySQL最

语句的输出我们得知mysql的查询优化器不能将id>5 和 id>6 这两个查询条件优化合并成一个 id>6。

终对查询语句优化的结果。同样还是MySQL formance的explain Extended这篇文章的第二个

在mysql performance的explain extended文章中第三个例子和静室的explain的extended选项文章中,

例子就说明了这种情况

两位作者也对explain extended做了进一步的实验,从这个两篇文中中我们可以得出结论是从

MySQL> EXPLAIN extended SELECT t1.id,t2.pad FROM sbtest t1, sbtest t2 WHERE t1.id=5 AND t2.k=t1.k;   —- ————- ——- ——- ————— ——— ——— ——- ——- ——-   | id | select_type | TABLE | type | possible_keys | KEY | key_len | ref | rows | Extra |   —- ————- ——- ——- ————— ——— ——— ——- ——- ——-   | 1 | SIMPLE | t1 | const | PRIMARY,k | PRIMARY | 4 | const | 1 | |  | 1 | SIMPLE | t2 | ref | k | k | 4 | const | 55561 | |   —- ————- ——- ——- ————— ——— ——— ——- ——- ——-   2 rows IN SET, 1 warning (0.00 sec)  MySQL> SHOW warnings G  

explain extend的输出中,我们可以看到sql的执行方式,对于分析sql还是很有帮助的。

  1. row Level: Note

    Code: 1003  Message: SELECT test.t1.id AS id,test.t2.pad AS pad FROM test.sbtest t1  JOIN test.sbtest t2 WHERE ((test.t2.k = test.t1.k) AND (test.t1.id = 5))  1 row IN SET (0.00 sec) 

下面特别摘抄了静室的explain的extended选项这篇文章中的内容

从Explain的结果中我们可以得到t1表的查询使用的是”const”类型,也就是说MySQL查询的时候

/******************************以下代码和分析摘抄至静室的explain的extended选项**************/

会先由t1.id=5 找到t1.k 再利用t1.k的值去t2表中查询数据,很显然这样的查询优化结果没有在

mysql>explain extended select * from t where a in (select b from i);

接下来的Show Warings输出中找到。

---- -------------------- ------- ------

总结

| id | select_type        | table | type |

还是引用静室 在explain的 extended选项这篇文章中的几句话”从MySQL explain extend的输出中,我们可以

---- -------------------- ------- ------

看到sql的执行方式,对于分析sql还是很有帮助的”。

| 1 | PRIMARY            | t     | ALL |

EXPLAIN语句中的extended 选项的实际应用与具体的操作步骤,我们大家都了解MySQL数据库中有一个explain 命令,其...

| 2 | DEPENDENT SUBQUERY | i     | ALL |

---- -------------------- ------- ------

2 rows in set, 1 warning (0.01 sec)

本文由太阳集团所有网址16877发布于太阳集团城网址送彩金,转载请注明出处:MYSQL EXPLAIN语句的extended 选项

您可能还会对下面的文章感兴趣: