利用explain命令查看SQL语句的执行计划:
概要描述:
1
id
select的识别符,这是select的查询序列号。
2
select_type:
select的类型。SELECT类型,可以为以下任何一种:
SIMPLE(simple):简单SELECT(不使用UNION或子查询)。
PRIMARY(primary):子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY。
UNION(union):UNION中的第二个或后面的SELECT语句。
DEPENDENT UNION(dependent union):UNION中的第二个或后面的SELECT语句,取决于外面的查询。
UNION RESULT(union result):UNION的结果,union语句中第二个select开始后面所有select。
SUBQUERY(subquery):子查询中的第一个SELECT,结果不依赖于外部查询。
DEPENDENT SUBQUERY(dependentsubquery):子查询中的第一个SELECT,依赖于外部查询。
DERIVED(derived):派生表的SELECT (FROM子句的子查询)。
UNCACHEABLE SUBQUERY(uncacheablesubquery):(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)
3
table
输出结果集的表格。
4
partitions
匹配的分区。
5
type
对表访问方式。表示MySQL在表中找到所需行的方式,又称“访问类型”。
”访问类型“,按照从 '' 最佳类型--最坏类型 '' 进行排序:
NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。
system:表仅有一行(=系统表)。这是const联接类型的一个特例。当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型( system/const )访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量。当查询的表只有一行的情况下,使用system。
const:表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!
eq_ref:类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件。这可能是最好的联接类型,除了const类型。
ref:表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。
ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行。
index_merge:该联接类型