MYSQL5.6以下的版本的explain只支持解析select语句,5.6及以上的支持了对非select语句的解析
explain中的列
要使用explain,只需要在sql语句最前面加上explain就行,MYSQL会使语句返回执行计划中每一步,而不是执行它。它会返回一行或者多行信息,显示出执行计划中的每一部分的执行的次序。
以下是以select语句为作为学习的例子
id列
这列包含一个编号,标志语句所属的行:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL No tables used
2 UNION NULL NULL NULL NULL NULL NULL NULL No tables used
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL Using temporary
注意id为NULL这一列,UNION结果总是放在一个匿名的临时表中,
之后MYSQL将结果读取到临时表外。临时表并不在原SQL语句中出现,因此他的id列是NULL
<span style="font-weight: normal;"><span style="font-size:10px;">id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 40552
2 DERIVED t_id index NULL PRIMARY 4 NULL 18691 Using index
3 UNION t_id index NULL PRIMARY 4 NULL 18691 Using index
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL </span></span>
<span style="font-weight: normal;"><span style="font-size:10px;">id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 40552
2 DERIVED t_id index NULL PRIMARY 4 NULL 18691 Using index
3 UNION t_id index NULL PRIMARY 4 NULL 18691 Using index
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL </span></span>