执行计划就是检查sql执行过程的工具,我们可以通过执行计划知道Mysql是怎么样执行sql的,这一点在优化sql时非常有用。
语法
explain + sql语句 -- 查看sql语句的执行计划
举例
建表,添加数据
执行计划
执行计划参数说明
id:sql语句的执行顺序。id不同时,id大的先执行;id相同,上面的先执行。此处不演示。
select_type:用于区别查询类型,eg:普通查询、联合查询、子查询等。
1)、SIMPLE:不使用子查询或者union的简单查询。
2)、PRIMARY:sql语句存在多层时,最外层一般是PRIMARY;
3)、SUBQUERY:存在子查询时,子查询部分为SUBQUERY;
4)、DERIVED:from子句的子查询中存在union,则外层select为DERIVED;
5)、UNION:当使用union拼接查询结果时,union之后的sql语句被标记为UNION;
6)、UNION RESULT:从union表获取结果的select 。
举个例子帮忙理解下:
table:显示当前执行计划的语句是关于哪张表的。
partitions:匹配的分区。
type:访问类型。
常见值如下,其他略:
1)、system(特殊的const)、const:通常情况下,将一个主键放在where后面作为条件查询,mysql优化器就能把这次查询优化转化为一个常量;
2)、eq_ref:唯一性索引扫描,出现在主键或者唯一索引上;
3)、ref:非唯一性索引扫描,出现在非唯一性索引上;
4)、range:索引范围查询;
5)、index:遍历所有索引;
6)、ALL:全表扫描。
possible_keys :可能使用到的索引。
key:实际使用到的索引。
key_len:索引中使用的字节数。
ref:索引的哪一列被使用情况。
rows:mysql根据表信息及索引使用信息,估算返回结果需要查询的数据行数,可参考但不保证准确。
filtered:返回结果的行占需要读到的行(rows列的值)的百分比。
Extra:其他重要的额外信息。
1)、Using filesort:不使用索引排序,需要文件排序;
2)、Using temporary:对查询结果排序使用了临时表,eg:group by、order by;
3)、Using index:使用了索引;
4)、Using where:使用了where条件;
...
如果有写的不对的地方,请大家多多批评指正,非常感谢!