+ -
当前位置:首页 → 问答吧 → sql explain语句

sql explain语句

时间:2011-12-19

来源:互联网

TEST=# select * from staff;
 ID | NAME | AGE | SEX
----+-------+-----+-----
 11 | he | 34 | nan
 12 | wang | 23 | nan
 13 | tang | 23 | nan
 23 | zhang | 12 | nv
 21 | zhang | 12 | nv
 22 | zhang | 12 | nv
(6 行)

TEST=# explain select * from staff;
  QUERY PLAN
------------------------------------------------------
 Seq Scan on STAFF (cost=0.00..1.03 rows=3 width=90)
(1 行)

explain是干嘛的,的输出结果是什么意思啊
在表中插入或删除行时这个结果怎么也不改变

作者: qixing1115   发布时间: 2011-12-19

7.2.1. EXPLAIN语法(获取SELECT相关信息)
EXPLAIN tbl_name
或:

EXPLAIN [EXTENDED] SELECT select_options
EXPLAIN语句可以用作DESCRIBE的一个同义词,或获得关于MySQL如何执行SELECT语句的信息:

· EXPLAIN tbl_name是DESCRIBE tbl_name或SHOW COLUMNS FROM tbl_name的一个同义词。

· 如果在SELECT语句前放上关键词EXPLAIN,MySQL将解释它如何处理SELECT,提供有关表如何联接和联接的次序。

该节解释EXPLAIN的第2个用法。

借助于EXPLAIN,可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录的更快的SELECT。

如果由于使用不正确的索引出现了问题,应运行ANALYZE TABLE更新表的统计(例如关键字集的势),这样会影响优化器进行的选择。参见13.5.2.1节,“ANALYZE TABLE语法”。

还可以知道优化器是否以一个最佳次序联接表。为了强制优化器让一个SELECT语句按照表命名顺序的联接次序,语句应以STRAIGHT_JOIN而不只是SELECT开头。

EXPLAIN为用于SELECT语句中的每个表返回一行信息。表以它们在处理查询过程中将被MySQL读入的顺序被列出。MySQL用一遍扫描多次联接(single-sweep multi-join)的方式解决所有联接。这意味着MySQL从第一个表中读一行,然后找到在第二个表中的一个匹配行,然后在第3个表中等等。当所有的表处理完后,它输出选中的列并且返回表清单直到找到一个有更多的匹配行的表。从该表读入下一行并继续处理下一个表。

当使用EXTENDED关键字时,EXPLAIN产生附加信息,可以用SHOW WARNINGS浏览。该信息显示优化器限定SELECT语句中的表和列名,重写并且执行优化规则后SELECT语句是什么样子,并且还可能包括优化过程的其它注解。

作者: rucypli   发布时间: 2011-12-19

EXPLAIN 是查看SQL语句执行计划用的。

作者: ACMAIN_CHM   发布时间: 2011-12-19