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

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

 

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

phperz~com

 

php程序员站

EXPLAIN tbl_name www~phperz~com

或者: php程序员站

  phperz~com

EXPLAIN SELECT select_options

www~phperz~com

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

php程序员站

  php程序员站

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

phperz~com

  phperz~com

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

www~phperz~com

 

php程序员站

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

php程序员之家

  www~phperz~com

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

php程序员站

  php程序员之家

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

  www~phperz~com

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

 

php程序员之家

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

 

phperz.com

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

php程序员站

 

phperz~com

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

  phperz~com

id

www.phperz.com

 

phperz.com

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

phperz.com

 

php程序员之家

select_type www.phperz.com

 

www.phperz.com

SELECT 的类型,可能会有以下几种: www.phperz.com

  www.phperz.com

SIMPLE

phperz.com

  phperz.com

简单的 SELECT (没有使用 UNION 或子查询)

phperz~com

  phperz.com

PRIMARY php程序员站

 

www.phperz.com

最外层的 SELECT。 www.phperz.com

  phperz~com

UNION

www~phperz~com

  php程序员站

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

  phperz.com

DEPENDENT UNION

www.phperz.com

 

php程序员站

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

www.phperz.com

 

www.phperz.com

SUBQUERY

phperz.com

  phperz.com

子查询中的第一个 SELECT php程序员站

 

phperz.com

DEPENDENT SUBQUERY

phperz~com

 

php程序员站

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

www.phperz.com

  phperz~com

DERIVED

www.phperz.com

 

www~phperz~com

派生表 SELECT(FROM 子句中的子查询) php程序员站

  phperz~com

table

www.phperz.com

 

php程序员站

记录查询引用的表。 phperz.com

 

phperz.com

type www.phperz.com

 

phperz.com

表连接类型。以下列出了各种不同类型的表连接,依次是从最好的到最差的:

php程序员之家

  phperz~com

system

php程序员之家

 

www.phperz.com

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

  www~phperz~com

const

php程序员站


 
 相关文章
 
发表评论
全部评论(0条)
 
 站内搜索
 热门搜索 基础  mysql  url  adodb
高级搜索 网站地图 站长工具 IP查询 收藏本站
 热点文章
 随机推荐
网站首页 | 网站地图 | 高级搜索 | RSS订阅
PHP程序员站 Copyright © 2007,PHPERZ.COM All Rights Reserved 粤ICP备07503606号 联系站长