日常记录——MySQL—执行计划

执行计划:sql语句的执行过程。
查看示例:EXPLAIN select * from user;
在这里插入图片描述

字段

1.id:sql执行顺序,id相同由上到下,id不同,大的先执行。
2.select_type

类型含义sql
SIMPLE简单的 select 查询,查询中不包含子查询或者 unionEXPLAIN select * from user;
PRIMARY查询中包含子查询或者 union ,外层为PRIMARY类型EXPLAIN select * from user where role_id=(select id from role where name=‘root’);
SUBQUERY子查询EXPLAIN select * from user where role_id=(select id from role where name=‘root’);
DEPENDENT SUBQUERY子查询中的第一个SELECT,取决于外面的查询EXPLAIN select * from user where role_id = ( select user_id from role where id=user.id );
UNION联合查询,union 中的第二个或后面的 select 语句EXPLAIN select * from user where name=‘root’ union select * from user where role_id=1;
DEPENDENT UNION子查询中union 中的第二个或后面的 select 语句 取决于外面的查询EXPLAIN select * from user a where id in ( select b.id from user b where b.id=a.id union select c.id from role c where c.id=a.role_id );
DERIVEDfrom 关键字后的子查询,临时表EXPLAIN select * from ( select * from user where name=‘root’ ) a;
UNION RESULTUNION的结果EXPLAIN select * from user where name=‘root’ union select * from user where role_id=1;

3.table:查询涉及的表、衍生表、联合查询结果。
4.partitions:查询涉及到的分区。

create table user_partitions (id int auto_increment, 
     name varchar(20),primary key(id))
	 //按照id分区,id<200 A分区,否则B分区
     partition by range(id)(
         partition A values less than(200),
         partition B values less than maxvalue
     );

EXPLAIN select * from user_partitions where id>200;//partitions值则为B
5.type:sql的访问数据方式,查询优化中一个很重要的指标,性能:system > const > eq_ref > ref > ref_or_null > index_merge > union_subquery > index_subquery > range > index > all 。

类型含义
system系统表,表仅有一行记录
const表仅有一行匹配记录,主键在where条件,并为固定值
eq_ref使用主键索引 或 唯一索引,表中只有一条记录与之匹配
ref非唯一性索引扫描,返回匹配某个单独值的所有行
ref_or_null非唯一性索引扫描或者is null,返回匹配某个单独值的所有行
index_merge合并索引,使用多个单列索引搜索
union_subquery子查询使用非唯一索引
index_subquery子查询使用非唯一索引
range对索引列进行范围查找
index索引树扫描
all全数据表扫描

*一般最少要优化到range级别。
6.possible_keys : 查询涉及到的字段上存在索引,则该索引将被列出,但不一定被查询实际使用,提示使用。
7.key:使用的索引。
8.key_length:表示索引中使用的字节数,一般等于索引列类型字节长度。
9.ref:显示该表的索引字段关联了哪张表的哪个字段。
10.rows:估算出找到所需的记录所需要读取的行数,值越小越好。
11.filtered:返回结果的行数占读取行数的百分比,值越大越好。
12.extra:十分重要的额外信息。

类型含义
Using index使用覆盖索引,避免了访问表的数据行,效率高
Using where使用了where过滤
Using temporary使用临时表保存中间结果,常见于order by 和 group by
Using filesort对数据使用非索引列进行排序,无法使用索引完成的排序,若出现该值,应优化索引
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页