MySQL Explain详解
MySQL Explain
字段名 | 描述 |
---|---|
id | 执行编号,标识select所属的行。如果在语句中没子查询或关联查询,只有唯一的select,每行都将显示1。 否则,内层的select语句一般会顺序编号,对应于其在原始语句中的位置。 |
select_type | Select的类型。 复杂的查询情况下,这个字段的值有:SUBQUERY(表示子查询)、UNION(第二个或后面的UNION语句)、DERIVED和其它一些值。 |
table | 当前行对应的表名或别名。 |
type | 表明对应表的访问(或联接)方式。最常见的Type值有, All,index, range, ref, eq_ref, const, system, 这里的顺序是从最坏到最好。 |
possible_keys | 这个字段指明了MySQL在查找表中数据行时可能会使用到的Key。由于MySQL选用执行方式的不同,这里列的索引可能跟实际不相关。 一般来说,MySQL会使用索引来关联表。当然这么说,也不意味着会使用第一个表的联接列(use an index on the first table's join column),这里MySQL会遍历所有行(除通过Where部分过滤掉的行之外)。 |
key | 这一字段表明MySQL最终决定使用的索引。这里注意下,并不意味着会使用到整个索引,也有可能使用部分内容,即通过最左优先的方式。 |
key_len | 这一列是Explain结果中最重要的一个。它表明MySQL使用Key的长度,单位是Bytes。 |
rows | 表示MySQL判断后决定执行SQL中必须要遍历的行数。这只是一个估算值。通常情况下,这个值越高, 也就意味着查询语句还有很大的优化空间。 |
filtered | 表示Where条件中未过滤掉的行数。这些行将会跟Explain中下一行的表关联。和前面提到的一样,这也是一个估算值,MySQL在这个值上可能会出错。 |
extra | 包含了SQL执行中的另外一些信息,下面列举下,我们查询中,这一部分的内容:
|