`select` 执行的先后顺序

203 阅读1分钟

select 执行的先后顺序:

  1. FROM 阶段: 数据首先从表中获取,这是查询开始的地方。
  2. ON 阶段(连接条件): 在连接的表中,根据连接条件(ON 子句)筛选匹配的行。这是连接操作的一部分。(如果有连接)
  3. WHERE 阶段:WHERE 子句中对数据进行筛选,只选择满足条件的行。
  4. GROUP BY 阶段: 如果查询包含 GROUP BY 子句,则按照指定的列对数据进行分组。
  5. HAVING 阶段:HAVING 子句中对分组进行筛选,只选择满足条件的分组。
  6. SELECT 阶段:SELECT 子句中选择要返回的列,可以包含聚合函数。
  7. ORDER BY 阶段: 如果查询包含 ORDER BY 子句,则按照指定的列对结果进行排序。
  8. LIMIT 阶段: 通过 LIMIT 子句限制返回的行数。

需要注意的是,虽然这是一个一般情况下的执行顺序,但优化器可能会对查询进行重写以提高性能。例如,有时候会使用索引来加速 WHERE 子句的执行,或者使用聚合索引来加速 GROUP BY 操作。

此外,HAVING 子句是在 GROUP BY 之后执行的,因为它涉及到对分组进行条件过滤。而 ORDER BYLIMIT 是在 SELECT 阶段之后执行的。