zoukankan      html  css  js  c++  java
  • 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查询

  • 相关阅读:
    Tarjan在图论中的应用(三)——用Tarjan来求解2-SAT
    【CodeForces】CodeForcesRound594 Div1 解题报告
    JS面向对象组件(三)--面向对象中的常用属性和方法
    JS面向对象组件(二)--Javascript原型链
    JS面向对象组件(一) ---包装对象与原型链
    JS面向对象组件(六) -- 拖拽功能以及组件的延展
    面试题目
    webstorm安装破解版
    面试题整理
    Javascript模块化编程(三):require.js的用法 (转)
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/8475458.html
Copyright © 2011-2022 走看看