Mysql中Explain详解
当我们使用索引的时候,通常会用explain来检查我们索引使用的情况。 id列: 这一列总是包含一个编号,标示select所属的行。如果在语句当中没有子查询或联合,那么只会有的select,于是每一个在这个列中都将显示一个1.否则,内层的select语句一般会顺序编号,对应与其在原始语句中的位置。 Mysql将select查询分为简单和复杂类型,复杂类型可分成三大类:简单子查询,所谓的派生表(在from字句中的子查询),以及union查询。 1、这个是简单的子查询: 2、from子句中的子查询和联合给id列增加了更多的复杂性。下面是一个from字句中的基本子查询。 这个查询语句执行时有一个匿名临时表。MySQL内部通过别名(der)在外层查询中引用这个临时表,在更复杂的查询中可以看到ref列。 3、下面是一个UNION查询。 Explain select 1 union all select 1; 注意union结果输出中的额外行。union结果总是放在一个匿名临时表中,之后MySQL将结果读取到临时表临时表外。临时表并不在原sql中出现,因此他的id列是null,与之前的例子相比(演示子查询的那个from字句中),从这个查询产生的临时表在结果中出现在最后一行,而不是第一行。 select_type列 这一列显示对应行是简单还是复杂的select(如果是后者