听说你对explain 很懂?(一)

发布于 2022-6-10 15:56
浏览
0收藏

 

explain所有人都应该很熟悉,通过它我们可以知道SQL是如何执行的,虽然不是100%管用,但是至少大多数场景通过explain的输出结果我们能直观的看到执行计划的相关信息。

早一些的版本explain还只能查看select语句,现在已经能支持delete,update,insert,replace了。

刚开始我想写这个的时候只是因为这个东西经常性不用就忘记,写了发现其实这个东西真的挺麻烦的,要把每个场景都整出来麻烦的很。

id

查询编号,如果没有子查询或者联合查询的话,就只有一条,如果是联合查询的话,那么会出现一条id为null的记录,并且标志查询结果,因为union结果会放到临时表中,所以我们看到这里的表名是<union1,2>这种格式。

 听说你对explain 很懂?(一)-开源基础软件社区
select_type

关联类型,决定访问表的方式。

 听说你对explain 很懂?(一)-开源基础软件社区
SIMPLE

简单查询,代表没有子查询或者union。

PRIMARY

如果不是简单查询,那么最外层查询就会被标记成PRIMARY。

UNION&UNION RESULT

从上图可以看出来了,包含联合查询,第一个被标记成了PRIMARY,union之后的查询被标记成UNION,以及最后产生的UNION RESULT

DERIVED

用来标记出现在from里的子查询,这个结果会放入临时表中,也叫做派生表。

 听说你对explain 很懂?(一)-开源基础软件社区
这个对于低版本的Mysql可能显示是这样的,高一点可能你看到的还是PRIMARY,因为被Mysql优化了。我换一个版本的Mysql和SQL执行可以验证到这个结果。

 听说你对explain 很懂?(一)-开源基础软件社区
SUBQUERY

不在from里的子查询。

 听说你对explain 很懂?(一)-开源基础软件社区
DEPENDENT

代表关联子查询(子查询使用了外部查询包含的列),和UNION,SUBQUERY组合产生不同的结果。

 听说你对explain 很懂?(一)-开源基础软件社区
UNCACHEABLE

代表不能缓存的子查询,也可以和UNION,SUBQUERY组合产生不同的结果。

 听说你对explain 很懂?(一)-开源基础软件社区

文章转自公众号:艾小仙

分类
标签
已于2022-6-10 15:56:18修改
收藏
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐