`
jaesonchen
  • 浏览: 311187 次
  • 来自: ...
社区版块
存档分类
最新评论

mysql 语句执行顺序

 
阅读更多

 

MySQL的语句执行顺序

MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结果返回。如果没有在语句中指定某一个子句,那么将会跳过相应的步骤。



 

下面我们来具体分析一下查询处理的每一个阶段

  1. FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1
  2. ON: 对虚表VT1进行ON筛选,只有那些符合<join-condition>的行才会被记录在虚表VT2中。
  3. JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, 如果 from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为止。
  4. WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。
  5. GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.
  6. CUBE | ROLLUP: 对表VT5进行cube或者rollup操作,产生表VT6.
  7. HAVING: 对虚拟表VT6应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT7中。
  8. SELECT: 执行select操作,选择指定的列,插入到虚拟表VT8中。
  9. DISTINCT: 对VT8中的记录进行去重。产生虚拟表VT9.
  10. ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10.
  11. LIMIT:取出指定行的记录,产生虚拟表VT11, 并将结果返回。

 

  • 大小: 19 KB
分享到:
评论

相关推荐

    sql和MySQL的语句执行顺序分析

    目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序: sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from ...

    MySQL语句执行顺序和编写顺序实例解析

    select语句完整语法: SELECT DISTINCT &lt;select_list&gt; FROM &lt;join&gt; JOIN ON WHERE GROUP BY HAVING ORDER BY ...执行顺序: from →join →on →where →group by→having→select→order

    简单了解mysql语句书写和执行顺序

    mysql语句的书写顺序和执行顺序有很大差异。 书写顺序,mysql的一般书写顺写为: select &lt;要返回的数据列&gt; from &lt;表名&gt; &lt;join&gt; join on where group by &lt;分组条件&gt; having &lt;分组后的筛选条件&gt; ...

    Mysql 关键字执行顺序

    MySQL 关键字执行顺序是数据库查询优化的重要概念,它直接影响着SQL语句的性能和结果。下面我们将详细探讨这些关键字的执行流程,并解答一些常见疑问。 首先,MySQL的执行顺序如下: 1. FROM:首先执行FROM子句,...

    mysql语句跟踪.txt

    这里`mysql-bin`是默认的二进制日志前缀,实际日志文件名会自动按照顺序生成,如`mysql-bin.000001`、`mysql-bin.000002`等。同时,也可以通过`SHOW VARIABLES LIKE 'log_bin%'`来查看Binary Log的状态。 ### 3. ...

    SQL语句执行深入讲解(MySQL架构总览-查询执行流程-SQL解析顺序)

    本文将深入探讨MySQL数据库系统中的SQL语句执行过程,包括MySQL的架构总览、查询执行流程以及SQL语句的解析顺序。 首先,我们来看MySQL的架构总览。MySQL架构分为两个主要层次:SQL Layer(SQL层)和Storage Engine...

    MySQL语句优化的原则

    ### MySQL语句优化的核心原则与实践 #### 一、索引的重要性及合理设计 1. **索引的作用**:索引能够显著加快数据检索的速度,这是因为它们提供了快速访问数据库表行的方法,类似于书籍的目录。 2. **非群集索引与...

    详细说一下一条 MySQL 语句执行的步骤

    Server 层按顺序执行 SQL 的步骤为: 客户端请求 -&gt; 连接器(验证用户身份,给予权限) 查询缓存(存在缓存则直接返回,不存在则执行后续操作) 分析器(对 SQL 进行词法分析和语法分析操作) 优化器(主要对执行的...

    Effective MySQL之SQL语句最优化.pdf

    可以利用EXPLAIN命令来查看SQL的执行计划,包括执行顺序、扫描行数、是否使用索引等信息。 6. 索引的使用:合理创建和使用索引可以大大加快查询速度。但是不恰当的索引会降低写操作的性能。因此,了解如何选择合适...

    50道MySQL经典练习题

    这个是网上流传的50道SQL练习题,最近拿来...这里放上MySQL语法执行的先后顺序: 7:SELECT 查询列表 1:FROM 表 2:连接类型 JOIN 表2 3:ON 连接条件 4:WHERE 筛选条件 5:GROUP BY 分组 6:HAV

    mysql 索引与执行计划

    - ID相同:执行顺序由上至下。 - ID不同:如果是子查询,ID值越大,优先级越高,越先被执行。 - ID相同又不同:可以认为是一组,从上往下顺序执行;在所有组中,ID值越大,优先级越高,越先执行。 - **select_...

    简单了解MySQL SELECT执行顺序

    SELECT语句的完整语法为: (7) SELECT (8) DISTINCT &lt;select_list&gt; (1) FROM (3) &lt;join&gt; JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9) ORDER BY (10) LIMIT 说明:语法前面的序号为SELEC

    MySql执行一条查询语句的内部执行过程?

    MySQL执行一条查询语句的内部执行过程是一个复杂且精细的过程,涉及到多个阶段和组件的协同工作。以下将详细解析这个过程: 1. **解析(Parser)**:当用户提交一个SQL查询时,MySQL的解析器首先对语句进行语法检查...

    MySQL DQL - 执行顺序.md

    通过上述介绍,我们可以看到MySQL DQL查询语句的执行顺序是: 1. `FROM`子句定义了查询的基础表。 2. `WHERE`子句用于过滤行。 3. `GROUP BY`子句将结果集按列分组。 4. `HAVING`子句对分组后的结果进行筛选。 5. `...

    Mysql利用profiles来查看SQL语句执行计划.doc

    MySQL 的 `Profiles` 功能是一个非常强大的工具,它允许数据库管理员和开发者深入了解 SQL 语句的执行过程,从而优化数据库性能。这一特性自 MySQL 5.0.37 版本引入,为用户提供了比 `EXPLAIN` 更深入的洞察,包括 ...

    SQL语句执行深入讲解(MySQL架构总览-&gt;查询执行流程-&gt;SQL解析顺序)

    实际执行顺序如下: 1. FROM + JOIN:确定数据源和连接条件。 2. WHERE:筛选满足条件的行。 3. GROUP BY:按组进行聚合操作。 4. HAVING:筛选满足GROUP BY后的条件的组。 5. SELECT:根据需要选择列, DISTINCT ...

    MySQL hint用法解析

    在MySQL中还有一种提示,叫做hint,hint是对数据库的提示,我们都知道, 在执行一条SQL语句的时候,MySQL都会生成一个执行计划,而hint就是用来告诉优化器按照我们告诉它的方式生成执行计划。Hint可以基于表连接的...

Global site tag (gtag.js) - Google Analytics