MySQL SELECT 执行的具体步骤
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 执行的具体步骤的更多相关文章
- MySQL SELECT执行顺序
SELECT语句的完整语法为: () SELECT () DISTINCT <select_list> () FROM <left_table> () <join_typ ...
- mysql 无法执行select查询
场景:mysql无法执行select命令查询,对于已存在的数据库,除了mysql.information_schema数据库,其它诸如nova.keystone.cinder等数据库都有此现象. 日志 ...
- Mysql查看执行计划-explain
最近生产环境有一些查询较慢,需要优化,于是先进行业务确认查询条件是否可以优化,不行再进行sql优化,于是学习了下Mysql查看执行计划. 语法 explain <sql语句> 例如: e ...
- mysql定时执行及延时执行,实现类似sql server waitfor功能
熟悉SQL Server的人都知道,它有一个很有用的功能,waitfor time和waitfor delay,前者表示在某个时间执行,后者表示等待多长时间执行.在我们测试功能和定时执行的时候特别有用 ...
- 优化mysql数据库的几个步骤
析问题: 1. 开启慢查询日志. 这个步骤就是为了记录慢查询的sql,为下个步骤做准备,此步骤相关的知识点有如下: 1. show variables like '%slow_query_log%'; ...
- mysql系列九、mysql语句执行过程及运行原理(分组查询和关联查询原理)
一.背景介绍 了解一个sql语句的执行过程,了解一部分都做了什么,更有利于对sql进行优化,因为你知道它的每一个连接.where.分组.子查询是怎么运行的,都干了什么,才会知道怎么写是不合理的. 大致 ...
- MySQL 语句执行过程详解
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...
- MySQL性能分析, mysql explain执行计划详解
MySQL性能分析 MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析 ...
- MySQL DDL执行方式-Online DDL介绍
1 引言 大家好,今天与大家一起分享一下 mysql DDL执行方式. 一般来说MySQL分为DDL(定义)和DML(操作). DDL:Data Definition Language,即数据定义语言 ...
随机推荐
- HDU 3032 (SG打表找规律)
题意: 有n堆石子,alice先取,每次可以选择拿走一堆石子中的1~x(该堆石子总数) ,也可以选择将这堆石子分成任意的两堆.alice与bob轮流取,取走最后一个石子的人胜利. 思路: 因为数的范围 ...
- hdu 5256 最少修改多少个数 能使原数列严格递增 (LIS)
Problem Description我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元素都必须是整数. 请输出最少需要修改多少 ...
- POJ 1995 Raising Modulo Numbers (快速幂)
题意: 思路: 对于每个幂次方,将幂指数的二进制形式表示,从右到左移位,每次底数自乘,循环内每步取模. #include <cstdio> typedef long long LL; LL ...
- java:根据利润表计算奖金所得
代码实现: public class Hello { public static void main(String srgs[]) { Lirun(100); Lirun2(100); } publi ...
- python全栈开发day44-js、DOM、BOM
JS的三大部分 一.ECMAJavaScript基础语法: 1.javascript的引入方式 1) 行内式 <script> alert(1) </script> 2) 引入 ...
- 025 如何利用github绑定自己的域名
这个以前是看同时的文档的,最近重新配置了一次,还是感觉同时的这个文档挺好的,就不再重新书写了,只复制一个连接. https://blog.csdn.net/iliujie/article/detail ...
- scanf清除缓存区
为什么需要清除scanf缓存区呢?看一个例子: int main() { int a,b; scanf("%d",&a); scanf("%d",&am ...
- 安卓工作室 android studio 汉化后,报错。 设置界面打不开。Can't find resource for bundle java.util.PropertyResourceBundle, key emmet.bem.class.name.element.separator.label
安卓工作室 android studio 汉化后,报错. 设置界面打不开. Android studio has been sinified and reported wrong.The setup ...
- Python3练习题系列(06)——各种符号总结
Python3中的各种符号总结 1关键字 import keyword print(keyword.kwlist, end='\t') ['False', 'None', 'True', 'and', ...
- 解决boostrap中,iframe渲染下,苹果手机横向无法显示剩余内容问题
描述: 问题解决了,采用的手势拖动显示剩余内容,并不是有了横向滚动条 在head标签中加入 <head> <meta charset="utf-8"> &l ...