手册上关于EXPLAIN语法的讲解:

12.8.2. EXPLAIN Syntax

EXPLAIN [EXTENDED] SELECT select_options

Or:

EXPLAIN tbl_name

The EXPLAIN statement can be used either as a way to obtain information about how MySQL executes a SELECT statement or as a synonym for DESCRIBE:

When you precede a SELECT statement with the keyword EXPLAIN, MySQL displays information from the optimizer about the query execution plan. That is, MySQL explains how it would process the SELECT, including information about how tables are joined and in which order. EXPLAIN EXTENDED can be used to provide additional information.

For information on how to use EXPLAIN and EXPLAIN EXTENDED to obtain query execution plan information, see Section 7.2.1, “Optimizing Queries with EXPLAIN”.

EXPLAIN tbl_name is synonymous with DESCRIBE tbl_name or SHOW COLUMNS FROM tbl_name.

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

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

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

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

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

MySQL> explain extendedselect*fromaccount\G;

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)

接下来再执行Show Warnings

MySQL> show warnings\G;

Code: 1003

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

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 extendedSELECT*FROMsbtestWHEREid>5ANDid>6ANDc=”a”ANDpad=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>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)

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

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

MySQL>show warnings\G

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)

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

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

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

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

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

例子就说明了这种情况

MySQL>EXPLAIN extended SELECT t1.id,t2.pad FROM sbtest t1, sbtest t2 WHEREt1.id=5

ANDt2.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

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的结果中我们可以得到t1表的查询使用的是”const”类型,也就是说MySQL查询的时候

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

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

总结

还是引用静室 在explain的 extended选项这篇文章中的几句话”从MySQL explain extend的输出中,我们可以看到sql的执行方式,对于分析sql还是很有帮助的”。

转载自: http://database.51cto.com/art/201005/201354.htm

mysql explain extended_MySQL EXPLAIN extended相关推荐

  1. 高性能mysql 附录D explain执行计划详解

    EXPLAIN: extended关键字:在explain后使用extended关键字,可以显示filtered列和warning信息.在较旧的MySQL版本中,扩展信息是使用EXPLAIN EXTE ...

  2. MySql优化神器 Explain工具介绍

    使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析查询语句或是结构的性能瓶颈.在select语句之前增加explaion关键字,MySQL会在查询上设置一个标记,执行查询会返回执行计划的信息, ...

  3. MySQL查询分析器EXPLAIN或DESC用法

    MySQL查询分析器EXPLAIN或DESC用法 一.简单例子: MySQL可以通过EXPLAIN或DESC来查看并分析SQL语句的执行情况 mysql> desc one_and_two_kn ...

  4. explain ref_你必须要掌握的MySQL命令:explain

    mysql中的explain命令可以用来查看sql语句是否使用了索引,用了什么索引,有没有做全表扫描.可以帮助我们优化查询语句. explain出来的信息有10列,文章主要介绍type.key.Ext ...

  5. MySQL查询优化之explain的深入解析

    在分析查询性能时,考虑EXPLAIN关键字同样很管用.EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作.以及MySQL成功返回结果集需要执行的行数.expla ...

  6. MySQL高级之explain详解

    MySQL高级之explain详解 文章目录 MySQL高级之explain详解 一.expalin命令详解 1.使用方式 2.结果显示 3.主要的字段信息 4.作用 二.id字段 三.select_ ...

  7. mysql table keys_MySQL Explain详解

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有 ...

  8. MySQL执行计划EXPLAIN详解

    说明 该文章针对InnoDB存储引擎B树索引的优化,前提要对B树索引有一定的理解. 查询SQL执行加载顺序 这是我们写SQL的流程: SELECT a.`name` FROM a LEFT JOIN ...

  9. MYSQL执行计划EXPLAIN

    实际项目开发中,由于我们不知道实际查询的时候数据库里发生了什么事情,数据库软件是怎样扫描表.怎样使用索引的,因此,我们能感知到的就只有 sql语句运行的时间,在数据规模不大时,查询是瞬间的,因此,在写 ...

最新文章

  1. iframe放大显示,如何让iFrame在点击按钮时全屏显示?
  2. 永远的beyond!(4 days left to get back touch)
  3. JavaScript 设计模式之构造函数模式
  4. C语言二叉树字符统计,C语言实现二叉树-利用二叉树统计单词数目
  5. 【数据校验杂谈】循环冗余检验 (CRC) 算法原理
  6. php 设为首页 收藏_如何在网站上添加“设为首页”“加入收藏”
  7. java常量池的理解_Java常量池的大概理解
  8. DSP之时钟与定时器之一时钟发生器
  9. JS面向对象方法(二) 面向对象方法实现橱窗式图面预览以及放大功能
  10. 今年的移动Pwn2own破解大赛:iPhone+安卓=50万美元
  11. oracle重做日志的信息,Oracle重做日志和日志挖掘
  12. 备考OCJP认证知识点总结(四)
  13. C语言编程方法技巧,C语言编程小技巧分享
  14. NERO8注册码序列号
  15. 华三数据中心SDN技术发展应用
  16. 腐蚀rust服务器命令_服务器指令_腐蚀rust服务器命令一览 腐蚀rust有哪些服务器命令_3DM单机...
  17. java里面获取map的key和value的方法
  18. 苹果操作系统 Mac OS 查看网络中电脑的端口是否开放
  19. 路由器显示找不到服务器从新设置,怎么重新设置路由器ip地址
  20. 这些成人世界的“黑话”,你能听懂多少?

热门文章

  1. 我想请问一下逆战开透视怎么加密呀?
  2. 微信开发h5图片上传(拍照、图片压缩、IOS照片旋转)
  3. 可读代码编写炸鸡三 - 审美
  4. 正则表达式的替换技巧
  5. .net mysql transactionscope_C#中的事务TransactionScope
  6. 《Shiro安全框架》专题(十)-Shiro之rememberMe
  7. 铁矿石战术方面的特点,以菜的
  8. 1207--铁矿石涨幅
  9. vue引入外部js和css
  10. bcache强制刷盘