1 explain执行计划
在日常学习与工作之中,我们有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,常用到explain这一命令来查询这些SQL语句的执行计划,查看该SQL是否用了了索引,是否做了全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。
1.1 explain执行计划包含的信息
这其中最重要的字段为:id、type、key、rows、Extra
在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)。
1.2 各字段详解
1.2.1 id
id列的编号是 select 的序列号,有几个 select 就有几个id,并且id的顺序是按 select 出现的顺序增长的。MySQL将 select 查询分为简单查询和复杂查询。复杂查询分为三类:简单子查询、派生表(from语句中的子查询)、union 查询。
id的三种情况:
① id相同:执行顺序由上至下
② id不同:如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行;
③ id相同又不同(两种情况同时存在):id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行。
1.2.2 select_type
查询的类型,主要是用于区分普通查询、联合查询、子查询等复杂的查询。
1.2.3 table
该字段表示 explain正在访问哪个表。