+------+-------------+-------+------+---------------+------+---------+------+-------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +------+-------------+-------+------+---------------+------+---------+------+-------+-------------+ | 1 | SIMPLE | users | ALL | NULL | NULL | NULL | NULL | 10000 | Using where | +------+-------------+-------+------+---------------+------+---------+------+-------+-------------+
上述执行计划中包含几个关键字段,分别为:
id:该列为查询中SELECT语句执行的顺序标识。从1开始,id值越大,执行优先级越高。如果查询中包含子查询,则子查询的id值比外部查询大。
select_type:描述查询的类型。常用的查询类型有:
- SIMPLE:简单的SELECT查询,不包含子查询或UNION操作。
- PRIMARY:查询中若包含任何子查询,最外层查询则被标记为PRIMARY。
- SUBQUERY:子查询中的第一个SELECT操作。
- DERIVED:派生表的SELECT,包含子查询的SELECT。
table:显示这一行的数据是关于哪张表的。
type:表示MySQL在表中找到所需行的方式,又称“访问类型”。常用的访问类型有:
- ALL:Full Table Scan,表示MySQL将遍历全表以找到匹配的行。
- index:Full Index Scan,表示MySQL将遍历索引树,按索引顺序找到匹配的行,即走索引。
- range:只检索给定范围的行,使用一个索引来选择行。
- ref:非唯一性索引扫描,返回匹配某个单独值的所有行。
possible_keys:显示MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上如果存在索引,则该索引将被列出,但不一定被查询使用。
key:实际使用的索引。如果为NULL,则没有使用索引。注意,不是所有的查询都能使用索引,只有查询涉及到的字段上存在索引,才能使用索引。
key_len:索引中使用的字节数,可通过该列计算查询中使用的索引的长度。在不损失精度的情况下,长度越短越好。
ref:显示索引的哪些列被使用了,如果可能的话,是一个常数。该列与查询条件有关。
rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录需要读取的行数。
Extra:包含MySQL解决查询的详细信息,这是最重要的一个列,其中的信息对优化查询有很大帮助。
以上就是通过执行计划能看到的一些信息,这些信息对于优化查询、提高查询性能具有重大意义,完整的执行计划可以通过使用EXPLAIN来查看。