MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是 FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明 的,但是只有最后一个虚拟的表才会被作为结果返回。如果没有在语句中指定某一个子句,那么将会跳过相应的步骤。
(8)SELECT (9)DISTINCT<select_list> (1)FROM<left_table> (3)<join_type>JOIN<right_table> (2) ON<jion_condition> (4)WHERE<where_condition> (5)GROUP BY<group_by_list> (6)WITH{CUBE|ROLLUP} (7)HAVING<having_condition> (8)ORDER BY<order_by_list> (11)LIMIT<limit_member>
下面我们来具体分析一下查询处理的每一个阶段
-
FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1
-
ON: 对虚表VT1进行ON筛选,只有那些符合<join-condition>的行才会被记录在虚表VT2中。
-
JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为 止。
-
WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。
-
GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.
-
CUBE | ROLLUP: 对表VT5进行cube或者rollup操作,产生表VT6.
-
HAVING: 对虚拟表VT6应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT7中。
-
SELECT: 执行select操作,选择指定的列,插入到虚拟表VT8中。
-
DISTINCT: 对VT8中的记录进行去重。产生虚拟表VT9.
-
ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10.
-
LIMIT:取出指定行的记录,产生虚拟表VT11, 并将结果返回。
相关推荐
目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序: sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from ...
select语句完整语法: SELECT DISTINCT <select_list> FROM <join> JOIN ON WHERE GROUP BY HAVING ORDER BY ...执行顺序: from →join →on →where →group by→having→select→order
mysql语句的书写顺序和执行顺序有很大差异。 书写顺序,mysql的一般书写顺写为: select <要返回的数据列> from <表名> <join> join on where group by <分组条件> having <分组后的筛选条件> ...
MySQL 关键字执行顺序是数据库查询优化的重要概念,它直接影响着SQL语句的性能和结果。下面我们将详细探讨这些关键字的执行流程,并解答一些常见疑问。 首先,MySQL的执行顺序如下: 1. FROM:首先执行FROM子句,...
这里`mysql-bin`是默认的二进制日志前缀,实际日志文件名会自动按照顺序生成,如`mysql-bin.000001`、`mysql-bin.000002`等。同时,也可以通过`SHOW VARIABLES LIKE 'log_bin%'`来查看Binary Log的状态。 ### 3. ...
本文将深入探讨MySQL数据库系统中的SQL语句执行过程,包括MySQL的架构总览、查询执行流程以及SQL语句的解析顺序。 首先,我们来看MySQL的架构总览。MySQL架构分为两个主要层次:SQL Layer(SQL层)和Storage Engine...
### MySQL语句优化的核心原则与实践 #### 一、索引的重要性及合理设计 1. **索引的作用**:索引能够显著加快数据检索的速度,这是因为它们提供了快速访问数据库表行的方法,类似于书籍的目录。 2. **非群集索引与...
Server 层按顺序执行 SQL 的步骤为: 客户端请求 -> 连接器(验证用户身份,给予权限) 查询缓存(存在缓存则直接返回,不存在则执行后续操作) 分析器(对 SQL 进行词法分析和语法分析操作) 优化器(主要对执行的...
可以利用EXPLAIN命令来查看SQL的执行计划,包括执行顺序、扫描行数、是否使用索引等信息。 6. 索引的使用:合理创建和使用索引可以大大加快查询速度。但是不恰当的索引会降低写操作的性能。因此,了解如何选择合适...
这个是网上流传的50道SQL练习题,最近拿来...这里放上MySQL语法执行的先后顺序: 7:SELECT 查询列表 1:FROM 表 2:连接类型 JOIN 表2 3:ON 连接条件 4:WHERE 筛选条件 5:GROUP BY 分组 6:HAV
- ID相同:执行顺序由上至下。 - ID不同:如果是子查询,ID值越大,优先级越高,越先被执行。 - ID相同又不同:可以认为是一组,从上往下顺序执行;在所有组中,ID值越大,优先级越高,越先执行。 - **select_...
SELECT语句的完整语法为: (7) SELECT (8) DISTINCT <select_list> (1) FROM (3) <join> JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9) ORDER BY (10) LIMIT 说明:语法前面的序号为SELEC
MySQL执行一条查询语句的内部执行过程是一个复杂且精细的过程,涉及到多个阶段和组件的协同工作。以下将详细解析这个过程: 1. **解析(Parser)**:当用户提交一个SQL查询时,MySQL的解析器首先对语句进行语法检查...
通过上述介绍,我们可以看到MySQL DQL查询语句的执行顺序是: 1. `FROM`子句定义了查询的基础表。 2. `WHERE`子句用于过滤行。 3. `GROUP BY`子句将结果集按列分组。 4. `HAVING`子句对分组后的结果进行筛选。 5. `...
MySQL 的 `Profiles` 功能是一个非常强大的工具,它允许数据库管理员和开发者深入了解 SQL 语句的执行过程,从而优化数据库性能。这一特性自 MySQL 5.0.37 版本引入,为用户提供了比 `EXPLAIN` 更深入的洞察,包括 ...
实际执行顺序如下: 1. FROM + JOIN:确定数据源和连接条件。 2. WHERE:筛选满足条件的行。 3. GROUP BY:按组进行聚合操作。 4. HAVING:筛选满足GROUP BY后的条件的组。 5. SELECT:根据需要选择列, DISTINCT ...
在MySQL中还有一种提示,叫做hint,hint是对数据库的提示,我们都知道, 在执行一条SQL语句的时候,MySQL都会生成一个执行计划,而hint就是用来告诉优化器按照我们告诉它的方式生成执行计划。Hint可以基于表连接的...