1:SELECT 执行的顺序

8SELECT
9DISTINCT <select_list>
1FROM <left_table>
3JOIN <right_table>
2ON <join_condition>
4WHERE <where_condition>
5GROUP BY <group_by_list>
6WITH {CUBE|ROLLUP}
7HAVING <having_condition>
10ORDER BY <order_by_list>
11LIMIT <limit_number>

可以看到最先执行的是FROM 最后会执行LIMIT 。每一个步骤都会产生一个虚拟表,该虚拟表对用户是透明的,之后最后异步生成的虚拟表才会返回给用户。

2:分析详细的执行过程  

1:FROM :如果是一个表的话就是从该表选取数据,如果是两个表的话,会执行笛卡尔积,产生虚拟表VT1。

2:ON:对虚拟表VT1 应用ON筛选,符合条件的行插入到虚拟表VT2 中。

3:JOIN:如果指定了OUTER JOIN (LEFT OUTER JOIN、RIGHT OUTER JOIN)保留表中未匹配的行作为外部行添加到虚拟表VT2中,产生虚拟表VT3。

4:WHERE :对虚拟表VT3进行条件过滤,符合条件的插入的虚拟表VT4中。

5:GROUP BY :对虚拟表VT4进行分组操作。产生虚拟表VT5。

6:CUBE|ROLLUP对虚拟表VT5进行CUBE或者ROLLUP操作,产生虚拟表VT6.

7:HAVING:对VT6表进行过滤。符合条件的插入VT7中。

8:SELECT:第二次执行select操作选择指定的列,插入到虚拟表VT8中。

9:DISTINCT:去重。然后插入虚拟表VT9中。

10:ORDER BY :排序,产生虚拟表VT10.

11:LIMIT:取出指定的行。产生虚拟表VT11,并且返回给用户。

MySQL SELECT 执行的具体步骤的更多相关文章

  1. MySQL SELECT执行顺序

    SELECT语句的完整语法为: () SELECT () DISTINCT <select_list> () FROM <left_table> () <join_typ ...

  2. mysql 无法执行select查询

    场景:mysql无法执行select命令查询,对于已存在的数据库,除了mysql.information_schema数据库,其它诸如nova.keystone.cinder等数据库都有此现象. 日志 ...

  3. Mysql查看执行计划-explain

    最近生产环境有一些查询较慢,需要优化,于是先进行业务确认查询条件是否可以优化,不行再进行sql优化,于是学习了下Mysql查看执行计划. 语法 explain <sql语句>  例如: e ...

  4. mysql定时执行及延时执行,实现类似sql server waitfor功能

    熟悉SQL Server的人都知道,它有一个很有用的功能,waitfor time和waitfor delay,前者表示在某个时间执行,后者表示等待多长时间执行.在我们测试功能和定时执行的时候特别有用 ...

  5. 优化mysql数据库的几个步骤

    析问题: 1. 开启慢查询日志. 这个步骤就是为了记录慢查询的sql,为下个步骤做准备,此步骤相关的知识点有如下: 1. show variables like '%slow_query_log%'; ...

  6. mysql系列九、mysql语句执行过程及运行原理(分组查询和关联查询原理)

    一.背景介绍 了解一个sql语句的执行过程,了解一部分都做了什么,更有利于对sql进行优化,因为你知道它的每一个连接.where.分组.子查询是怎么运行的,都干了什么,才会知道怎么写是不合理的. 大致 ...

  7. MySQL 语句执行过程详解

    MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...

  8. MySQL性能分析, mysql explain执行计划详解

    MySQL性能分析 MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析 ...

  9. MySQL DDL执行方式-Online DDL介绍

    1 引言 大家好,今天与大家一起分享一下 mysql DDL执行方式. 一般来说MySQL分为DDL(定义)和DML(操作). DDL:Data Definition Language,即数据定义语言 ...

随机推荐

  1. DDD领域模型查询方法实现(八)

    在DDD.Domain工程文件夹Repository下创建RequestPage类: public class RequestPage { public RequestPage(int pagesiz ...

  2. Ext.js项目(一)

    这个项目整体采用代码生成器生成,具体看下图:

  3. asp.net core2.0大白话带你入门

    本系列包括: 1.新建asp.net core项目2.web项目目录解读3.配置访问地址4.环境变量详解5.配置文件6.日志7.DI容器8.服务的生命周期9.session的使用10.cookie的使 ...

  4. Codeforces 605C Freelancer's Dreams 凸包 (看题解)

    Freelancer's Dreams 我们把每个二元组看成是平面上的一个点, 那么两个点的线性组合是两点之间的连线, 即x * (a1, b1) + y * (a1, b1) && ...

  5. Python os.path.basename

    一.获取对应路径下文件的名字 >>> os.path.basename("/etc/sysconfig/selinux") 'selinux' >>& ...

  6. Trident Topology开发Demo

    1.项目结构 · 2.启动的服务 无 3.驱动程序 package com.jun.trident; import backtype.storm.Config; import backtype.sto ...

  7. 016 在大数据中,SSH无密钥登录

    一:概述 1.关于ssh ssh是一种安全协议. 会生成一对公钥和私钥. 2.问题的由来 3.解决方式 将生成的公钥发送到远程的机器上. 4.位置 主目录下的.ssh文件下. 二:在伪分布式下的操作 ...

  8. springmvc传参问题

    @RequestMapping(value = "/addHit", method = { RequestMethod.POST, RequestMethod.GET }) pub ...

  9. BeanUtils进行日期格式的拷贝转换

    自定义Converter的方法: import java.text.ParseException; import java.text.SimpleDateFormat; import org.apac ...

  10. POJ 3279 Fliptile (二进制枚举)

    <题目链接> <转载于 >>> > 题目大意: 给定一个M*N矩阵,有些是黑色(1表示)否则白色(0表示),每翻转一个(i,j),会使得它和它周围4个格变为另 ...