RSS订阅
PHP程序员站--WWW.PHPERZ.COM  
网站地图
高级搜索
收藏本站

 当前位置:主页 >> 数据库 >> MySQL >> 文章内容
MySQL手册版本 5.0.20-MySQL优化(二) (1)
[收藏此页[打印本页]   
来源:互联网  作者:songwl  发布时间:2007-12-24

 

7.2.1 EXPLAIN 语法(得到SELECT 的相关信息)

PHP程序员站

 

www phperz com

EXPLAIN tbl_name

phperz.com

或者: www.phperz.com

  www~phperz~.com

EXPLAIN SELECT select_options PHP程序员站--PHP程序员之家

EXPLAIN 语句可以被当作 DESCRIBE 的同义词来用,也可以用来获取一个MySQL要执行的 SELECT 语句的相关信息。

www~phperz~.com

  phperz.com

EXPLAIN tbl_name 语法和 DESCRIBE tbl_name 或 SHOW COLUMNS FROM tbl_name 一样。

PHP程序员站

  www.phperz.com

当在一个 SELECT 语句前使用关键字 EXPLAIN 时,MYSQL会解释了即将如何运行该 SELECT 语句,它显示了表如何连接、连接的顺序等信息。 PHP程序员站

  phperz.com

本章节主要讲述了第二种 EXPLAIN 用法。

PHP程序员站

 

phperz.com

在 EXPLAIN 的帮助下,您就知道什么时候该给表添加索引,以使用索引来查找记录从而让 SELECT 运行更快。 www.phperz.com

  PHP程序员站

如果由于不恰当使用索引而引起一些问题的话,可以运行 ANALYZE TABLE 来更新该表的统计信息,例如键的基数,它能帮您在优化方面做出更好的选择。详情请看"14.5.2.1 ANALYZE TABLE Syntax"。 PHP程序员站--PHP程序员之家

  phperz.com

您还可以查看优化程序是否以最佳的顺序来连接数据表。为了让优化程序按照 SELECT 语句中的表名的顺序做连接,可以在查询的开始使用 SELECT STRAIGHT_JOIN 而不只是 SELECT。 phperz.com

 

PHP程序员站

EXPLAIN 返回了一行记录,它包括了 SELECT 语句中用到的各个表的信息。这些表在结果中按照MySQL即将执行的查询中读取的顺序列出来。MySQL用一次扫描多次连接(single-sweep, multi-join) 的方法来解决连接。这意味着MySQL从第一个表中读取一条记录,然后在第二个表中查找到对应的记录,然后在第三个表中查找,依次类推。当所有的表都扫描完了,它输出选择的字段并且回溯所有的表,直到找不到为止,因为有的表中可能有多条匹配的记录下一条记录将从该表读取,再从下一个表开始继续处理。

www phperz com

 

www.phperz.com

在MySQL version 4.1中,EXPLAIN 输出的结果格式改变了,使得它更适合例如 UNION 语句、子查询以及派生表的结构。更令人注意的是,它新增了2个字段: id 和 select_type。当你使用早于MySQL 4.1的版本就看不到这些字段了。

www~phperz~.com

  PHP程序员站

EXPLAIN 结果的每行记录显示了每个表的相关信息,每行记录都包含以下几个字段:

PHP程序员站--PHP程序员之家

 

PHP程序员站

id

PHP程序员站

  www.phperz.com

本次 SELECT 的标识符。在查询中每个 SELECT 都有一个顺序的数值。

www.phperz.com

 

www phperz com

select_type www phperz com

  phperz.com

SELECT 的类型,可能会有以下几种:

PHP程序员站

  www phperz com

SIMPLE PHP程序员站

  www phperz com

简单的 SELECT (没有使用 UNION 或子查询) PHP程序员站

  www.phperz.com

PRIMARY

www phperz com

 

phperz.com

最外层的 SELECT。

PHP程序员站

 

www phperz com

UNION

phperz.com

  www phperz com

第二层,在SELECT 之后使用了 UNION 。 phperz.com

  www~phperz~.com

DEPENDENT UNION www phperz com

  PHP程序员站

UNION 语句中的第二个 SELECT,依赖于外部子查询

www phperz com

 

PHP程序员站

SUBQUERY www phperz com

 

PHP程序员站--PHP程序员之家

子查询中的第一个 SELECT www phperz com

 

www phperz com

DEPENDENT SUBQUERY

www.phperz.com

  www phperz com

子查询中的第一个 SUBQUERY 依赖于外部的子查询

PHP程序员站--PHP程序员之家

  www phperz com

DERIVED

PHP程序员站

 

www phperz com

派生表 SELECT(FROM 子句中的子查询)

phperz.com

  www.phperz.com

table phperz.com

  PHP程序员站--PHP程序员之家

记录查询引用的表。 PHP程序员站--PHP程序员之家

  www~phperz~.com

type www phperz com

 

PHP程序员站--PHP程序员之家

表连接类型。以下列出了各种不同类型的表连接,依次是从最好的到最差的: PHP程序员站--PHP程序员之家

 

phperz.com

system

PHP程序员站--PHP程序员之家

 

phperz.com

表只有一行记录(等于系统表)。这是 const 表连接类型的一个特例。

PHP程序员站--PHP程序员之家

 

phperz.com

const

PHP程序员站--PHP程序员之家


 上一篇:2008年:中小企业与自由软件相互拥抱   下一篇:经验总结:mysql 的一些基本应用
 
 相关文章
 
发表评论
全部评论(0条)
 
 站内搜索
 热门搜索 mysql  基础  php基础  url
高级搜索 网站地图 站长工具 IP查询 收藏本站
 热点文章
 随机推荐
网站首页 | 网站地图 | 高级搜索 | RSS订阅
PHP程序员站 Copyright © 2007,PHPERZ.COM All Rights Reserved 粤ICP备07503606号 联系站长