mysql 查询优化 ~explain解读之select_type的解读

一 简介:今天咱们来聊聊explain的select_type

二 类型

 (1)SIMPLE

   简单的SELECT语句(不包括UNION操作或子查询操作)

 (2)PRIMARY/UNION

  PRIMARY:查询中最外层的SELECT(如两表做UNION或者存在子查询的外层的表操作为PRIMARY,内层的操作为UNION)

  UNION:UNION操作中,查询中处于内层的SELECT(内层的SELECT语句与外层的SELECT语句没有依赖关系)

 (3)DEPENDENT UNION/UNIOIN RESULT

  DEPENDENT UNION:UNION操作中,查询中处于内层的SELECT(内层的SELECT语句与外层的SELECT语句有依赖关系)

  UNION RESULT:UNION操作的结果,id值通常为NULL

  例子

  select * from people where zipcode=10000 union select * from people where zipcode=1000

 (4)SUBQUERY/DEPENDENT SUBQUERY

   SUBQUERY:子查询中首个SELECT(如果有多个子查询存在):

   DEPENDENT SUBQUERY:子查询中首个SELECT,但依赖于外层的表(如果有多个子查询存在)

   重点解释 子查询的查询方式依赖于外面的查询结果.用这个例子就是,先进行子查询外部的查询,得到一个结果集,.然后这个结果的每一行在跟select子查询的结果集进行匹配,也就是说,外部结果集的每一行都要关联内部结果集一次

 (5)DERIVED/MATERIALIZED

  DERIVED:被驱动的SELECT子查询(子查询位于FROM子句)

  例子 

  select aa from (select * from a) b;

  MATERIALIZED:被物化的子查询

 (6)UNCACHEABLE SUBQUERY/UNCACHEABLE UNION

   UNCACHEABLE SUBQUERY:对于外层的主表,子查询不可被物化,每次都需要计算(耗时操作)

   UNCACHEABLE UNION:UNION操作中,内层的不可被物化的子查询(类似于UNCACHEABLE SUBQUERY)

三 注意
   特别关注 DEPENDENT SUBQUERY 

  1 会严重消耗性能

 2  不会进行子查询,会先进行外部查询,生成结果集,再在内部进行关联查询

 3 子查询的执行效率受制于外层查询的记录数

 4 可以尝试改成join查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值