Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17191
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-18 10:33
文章分类
文章存档

2015年(22)

我的朋友

分类: Mysql/postgreSQL

2015-03-01 11:35:55

    当EXPLAIN是使用EXTENDED关键字,输出包括过滤列否则不显示。此列指示的表中的行的估计百分比将由表条件进行过滤。此外,语句产生可以通过发出SHOW WARNINGS语句后面的EXPLAIN语句被看作额外的信息。在SHOW WARNINGS输出显示信息值如何优化资格表和列名在SELECT语句中,SELECT看起来重写和优化规则的申请后,和可能的其它注释有关的优化进程。下面是一个例子:
mysql> EXPLAIN EXTENDED
-> SELECT t1.a, t1.a IN (SELECT t2.a FROM t2) FROM t1\G
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: t1
type: index
possible_keys: NULL
key: PRIMARY
key_len: 4
ref: NULL
rows: 4
filtered: 100.00
Extra: Using index
*************************** 2. row ***************************
id: 2
select_type: SUBQUERY
table: t2
type: index
possible_keys: a
key: a
key_len: 5
ref: NULL
rows: 3
filtered: 100.00
Extra: Using index
2 rows in set, 1 warning (0.00 sec)
mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
Level: Note
Code: 1003
Message: /* select#1 */ select `test`.`t1`.`a` AS `a`,
(`test`.`t1`.`a`,`test`.`t1`.`a` in
( (/* select#2 */ select `test`.`t2`.`a`
from `test`.`t2` where 1 having 1 ),
(`test`.`t1`.`a` in
on
where ((`test`.`t1`.`a` = `materialized-subquery`.`a`))))) AS `t1.a
IN (SELECT t2.a FROM t2)` from `test`.`t1`
1 row in set (0.00 sec)

    在MySQL5.6.3中,EXPLAIN EXTENDED可以使用SELECT,DELETE,INSERT,REPLACE和UPDATE语句。但是,下面的SHOW WARNINGS语句仅显示SELECT语句的非空的结果。MySQL5.6.3之前,EXPLAIN EXTENDED只能与SELECT语句中使用。

    因为SHOW WARNINGS显示的语句可能包含特殊标记,以提供有关的查询重写或优化操作的信息,该语句不一定是有效的SQL,但不适合于被执行。输出还可以包括与消息的值,可提供有关所采取的优化操作的其他非SQL注释行。

    下面的列表介绍了可能出现在由SHOW WARNINGS显示扩展输出的特殊标记:


  • 自动生成的关键临时表。

  • (expr)
    表达式(如标量子查询)执行一次并结果值保存在 内存以备以后使用。对于结果包括多个值,临时表可以创建,你会看到代替。

  • (query fragment)
    子查询谓词转换为EXISTS谓词和子查询转化,使之 
    可以一起使用与EXISTS谓词。

  • (query fragment)
    这是一个没有用户意义的内部优化的对象。

  • (query fragment)
    查询片段使用索引的查找找到符合条件的行处理。

  • (condition, expr1, expr2)
    如果条件为真,评估到expr1,否则expr2。

  • (expr)
    测试以验证表达式的值不为NULL。

  • (query fragment)
    子查询物化被使用。

  • `materialized-subquery`.col_name, `materialized subselect`.col_name
 引用在内部临时表中的列COL_NAME物化持有从结果 评价一个子查询。

  • (query fragment)
    查询片段用一个主键查找,找到符合条件的行处理。

  • (expr)
    这是一个没有用户意义的内部优化的对象。

  • /* select#N*/ select_stmt
    该SELECT与行在非EXTENDED EXPLAIN输出,有一个值N.的ID相关联。

  • outer_tables semi join (inner_tables)
    半联接操作。 inner_tables示出了未拉出表。详见,Section 8.13.16.1, “Optimizing Subqueries with Semi-Join Transformations”


  • 这代表创建缓存中间结果的内部临时表。


阅读(181) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~