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程序员之家
|