EXPLAIN语法详解

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

EXPLAIN的每个输出行提供一个表的相关信息,并且每个行包括下面的列:
这里写图片描述

1、id:

SELECT识别符。这是SELECT的查询序列号。

2、select_type:可以为以下任何一种

SIMPLE:简单SELECT(不使用UNION或子查询)
PRIMARY:最外面的SELECT
UNION:UNION中的第二个或后面的SELECT语句
DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询
UNION RESULT:UNION的结果。
SUBQUERY:子查询中的第一个SELECT
DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询
DERIVED:导出表的SELECT(FROM子句的子查询)

3、table

输出的行所引用的表。

4、type

联接类型。下面给出各种联接类型,按照从最佳类型到最坏类型进行排序:


  1. system:表仅有一行(=系统表)。这是const联接类型的一个特例。
  2. const

表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!
const用于用常数值比较PRIMARY KEY或UNIQUE索引的所有部分时。在下面的查询中,tbl_name可以用于const表:

SELECT * from tbl_name WHERE primary_key=1SELECT * from tbl_name WHERE primary_key_part1=1和 primary_key_part2=2
3.eq_ref
对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。
它用在一个索引的所有部分被联接使用并且索引是UNIQUE或PRIMARY KEY。
eq_ref可以用于使用= 操作符比较的带索引的列。比较值可以为常量或一个使用在该表前面所读取的表的列的表达式。

猜你喜欢

转载自blog.csdn.net/eddy23513/article/details/81070354
今日推荐