最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQLEXPLAIN语句中的extended选项介绍

来源:懂视网 责编:小采 时间:2020-11-09 14:05:26
文档

MySQLEXPLAIN语句中的extended选项介绍

MySQLEXPLAIN语句中的extended选项介绍:以下的文章主要讲述的是MySQL EXPLAIN语句中的extended 选项的实际应用与具体的操作步骤,我们大家都了解MySQL数据库中有一个explain 命令,其主要功能是用来分析select 语句的运行效果,例如explain可以获得select语句。 使用的索引情况、排序的情况
推荐度:
导读MySQLEXPLAIN语句中的extended选项介绍:以下的文章主要讲述的是MySQL EXPLAIN语句中的extended 选项的实际应用与具体的操作步骤,我们大家都了解MySQL数据库中有一个explain 命令,其主要功能是用来分析select 语句的运行效果,例如explain可以获得select语句。 使用的索引情况、排序的情况

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

以下的文章主要讲述的是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

  1. id: 1
  2. select_type: SIMPLE
  3. table: account
  4. type: ALL
  5. possible_keys: NULL
  6. key: NULL
  7. key_len: NULL
  8. ref: NULL
  9. rows: 1
  10. filtered: 100.00
  11. Extra:
  12. 1 row in set, 1 warning (0.00 sec)

接下来再执行Show Warnings

MySQL> show warnings\G;

1. row Level: Note

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

从 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选项

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

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

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

MySQL>show warnings\G

1. row

  1. Level: Note
  2. Code: 1003
  3. Message: select `test`.`t`.`a` AS `a`,`test`.`t`.`b` AS `b`,`test`.`t`.`c` AS `c`
  4. from `test`.`t` where
  5. (`test`.`t`.`a`,
  6. (select 1 AS `Not_used` from `test`.`i`
  7. where ((`test`.`t`.`a`) = `test`.`i`.`b`)))
  8. 1 row in set (0.00 sec)

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

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

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

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

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

例子就说明了这种情况

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

1. row Level: Note

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

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

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

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

总结

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

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

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

MySQLEXPLAIN语句中的extended选项介绍

MySQLEXPLAIN语句中的extended选项介绍:以下的文章主要讲述的是MySQL EXPLAIN语句中的extended 选项的实际应用与具体的操作步骤,我们大家都了解MySQL数据库中有一个explain 命令,其主要功能是用来分析select 语句的运行效果,例如explain可以获得select语句。 使用的索引情况、排序的情况
推荐度:
标签: 中的 语句 mysql
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top