zoukankan      html  css  js  c++  java
  • 详细解释MySQL explain 中的 select_type 是什么

    simple

    查询语句中不包含UNION或者子查询的查询都算作是SIMPLE类型,无论是单表查询还是联合查询这些查询的级别都是 simple。顾名思义,这些查询都被 MySQL 认为是比较简单的查询模式。

    单表查询:

    连接查询:

    使用子查询:

    这里需要说明的一点是,其实子查询严格意义上不是 simple 级别的,但是我这里举得这个例子比较特殊,原理是因为这个 SQL 在MySQL 的查询优化器上被优化成了连接查询,所以才会出现这种情况。换句话说,这个 SQL 最终执行的内容和上面的这个 SQL 是一种类型。

    primary

    对于包含UNION、UNION ALL或者子查询的大查询来说,它是由几个小查询组成的,其中最左边的那个查询的select_type值就是PRIMARY

    比如说:

    union

    接着上面的说,包含UNION、UNION ALL或者子查询的大查询来说,它是由几个小查询组成的嘛。除了第一个是 PRIMARY,其他的都是 UNION

    UNION RESULT

    还是接着上面说,如果 MySQL 中的 UNION 需要用到临时表进行去重的话,那么这个小查询的级别就是 UNION RESULT

    SUBQUERY

    如果我们的子查询不能转换对应 semi-join的形式,而且这个查询不是相关子查询的话,并且查询优化器决定采用将该子查询物化的方案来执行该子查询时,这个时候该子查询的第一个 SELECT 的级别就是 SUBQUERY

    DEPENDENT SUBQUERY

    如果包含子查询的查询语句不能够转为对应的semi-join的形式,并且该子查询是相关子查询,则该子查询的第一个SELECT关键字代表的那个查询的select_type就是DEPENDENT SUBQUERY

    DEPENDENT UNION

    在包含UNION或者UNION ALL的大查询中,如果各个小查询都依赖于外层查询的话,那除了最左边的那个小查询之外,其余的小查询的select_type的值就是DEPENDENT UNION

    该随笔为学习笔记,内容源自《MySQL 是怎样运行的:从根儿上理解 MySQL》

  • 相关阅读:
    如何让在JAVA中定义常量池
    java常量池概念
    Efficient Counter in Java
    看到关于JS线程的两篇文章
    Java Collection
    java学习书籍介绍--csdn上一位前辈介绍
    myeclipse快捷键
    数组
    错误处理和时间函数
    函数01
  • 原文地址:https://www.cnblogs.com/joimages/p/14521966.html
Copyright © 2011-2022 走看看