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

摘要:
一、 今天,我们来讨论一下explain的select_Type 2类型(1)SIMPLE简单select语句(不包括UNION操作或子查询操作)(2)PRIMARY/UNIONPRIMARY
一 简介:今天咱们来聊聊explain的select_type

二 类型

 (1)SIMPLE

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

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

 (2)PRIMARY/UNION

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

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

  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

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

 (4)SUBQUERY/DEPENDENT SUBQUERY

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

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

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

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

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

 (5)DERIVED/MATERIALIZED

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

  例子 

  select aa from (select * from a) b;

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

  MATERIALIZED:被物化的子查询

 (6)UNCACHEABLE SUBQUERY/UNCACHEABLE UNION

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

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

三 注意
   特别关注 DEPENDENT SUBQUERY 

  1 会严重消耗性能

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

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

 4 可以尝试改成join查询

免责声明:文章转载自《mysql 查询优化 ~explain解读之select_type的解读》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇二十九、SAP中输出漂亮的表格linux为 rsync 添加开机启动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ORM操作mysql

创建表和添加数据import sqlalchemyfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy import Column, Integer, Stringfrom sqlalchemy.o...

DataTable数据检索的性能分析(转寒江独钓)

我们知道在.NET平台上有很多种数据存储,检索解决方案-ADO.NET Entity Framework,ASP.NET Dynamic Data,XML, NHibernate,LINQ to SQL 等等,但是由于一些原因,如平台限制,比如说必须基于.NET Framework2.0及以下平台;遗留的或者第三方数据接口采用的就是DataTable等等,...

SQL 存储过程入门(变量)

SQL 存储过程入门(变量)(二)上一篇我们讲到了SQL存储过程的基本定义,怎么创建,使用,这篇就来讲一下变量的使用。 变量分文局部变量和全局变量 局部变量是@开头,全局变量是@@开头,这里我们主要讲局部变量,全局变量我们后面再讲。 在c# 语言中,定义一个变量很简单,例如 int i=0; --定义加赋值。 在sql中,定义一个变量需要关键字DECLAR...

[转]oracle在删除表表空间用户时,如何释放磁盘空间

一、drop表 执行drop table xx 语句 drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉。这样,回收站里的表信息就可以被恢复,或彻底清除。 通过查询回收站user_recyclebin获取被删除的表信息,然后使用语句 flashback table...

layui select下拉菜单联动

做的比较简单,先从后台直接把第一级菜单输出,然后点击二级菜单的时候再动态展示 <div class="layui-inline"> <label class="layui-form-label">商品类别</label> <div cl...

mysql 基本使用教程(源于网络)

3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行...