SQL 查询如何工作?技术面试中 SQL 查询的执行顺序

2025-06-10

SQL 查询如何工作?技术面试中 SQL 查询的执行顺序

披露:本篇文章包含附属链接;如果您通过本文提供的不同链接购买产品或服务,我可能会收到报酬。

SQL查询执行顺序

大家好,技术面试中关于 SQL 的一个常见问题是SQL 查询究竟是如何工作的?虽然这个问题看起来很简单,但很多程序员,包括经验丰富的程序员,都无法自信地回答这个问题。

许多开发人员甚至不知道 SQL 命令是如何执行的以及按照什么顺序执行?

对于它们来说,SQL 查询是按照编写的方式执行的,但事实并非如此,您可以从上图中看到,在 SELECT 任何内容之前会执行 FROM 和 JOIN,如果您仔细想想,这又是非常合理的。

之前,我分享了20 个来自面试的 SQL 查询50 个系统设计问题,在本文中,我将回答 SQL 查询背后的工作原理,因此请继续关注并继续阅读。

而且,如果您正在准备技术面试,并且您需要更多问题,而不仅仅是查询,还需要其他主题的数据库和 SQL 相关问题,如索引、连接、分组、聚合和窗口函数,那么您还可以查看这200 多个 SQL 面试问题

本课程是专门为 SQL 面试准备的课程之一,通过解答常见问题来提升你的面试技巧。现在购买此课程即可享受超值优惠。

SQL查询究竟是如何执行的?

结构化查询语言或 SQL 是管理和操作关系数据库的标准语言。

它提供了一种强大而有效的数据交互方式,使开发人员、分析师和数据科学家能够从数据库中检索、插入、更新和删除信息。

虽然 SQL 查询是以声明性的、人类可读的格式编写的,但在后台执行这些查询并检索所需的结果需要一个复杂的过程。

在本文中,我们将深入研究 SQL 查询的内部工作原理,逐步分解该过程。

1. 查询解析和标记化

SQL 查询的旅程始于解析和标记化。当用户提交 SQL 查询时,数据库管理系统 (DBMS) 必须首先将查询分解为单个标记。

标记是查询的最小单位,可以包括关键字(SELECT、 FROM 、WHERE等)、表名和列名、运算符(=、>、< 等)和值。

此过程涉及识别查询的语法和结构,以确保其遵循 SQL 语言的规则。

SQL查询如何执行


2.查询优化

一旦查询被解析并标记化,DBMS 就会执行查询优化。这是旨在提高查询执行效率的关键步骤。

DBMS 分析查询并探索各种执行计划以确定检索请求数据的最有效方法。

它考虑索引、表关系和可用资源等因素来创建执行计划,以最大限度地减少完成查询所需的时间和资源。

如何进行查询优化


3.执行计划生成

所选的执行计划概述了完成查询所需的步骤顺序。

它决定了访问表的顺序、执行的连接类型以及应用的过滤条件。

DBMS 根据有关数据分布和数据库模式的统计信息生成此计划。

目标是减少需要处理的数据量并优化磁盘和内存使用。

在 Microsoft SQL Server 上,查询执行计划如下所示:

执行计划是什么样的


4.数据检索和连接

有了执行计划,DBMS 就开始数据检索过程。如果查询涉及多个表,DBMS 会执行连接操作来组合相关数据。

高效地连接表需要根据指定条件比较和匹配行。根据连接类型(内连接、 外连接等),DBMS 会确定每个表中的哪些行应包含在结果集中。

SQL 连接如何工作


5.过滤和排序

在连接必要的表之后,DBMS 会应用WHERE 子句中指定的过滤条件。这涉及评估每一行以确定其是否满足用户设置的条件。

不满足条件的行将被丢弃,而通过过滤的行将被保留以供进一步处理。

此外,如果查询包含 ORDER BY 子句,DBMS 将根据指定的列对结果行进行排序。

排序涉及按特定顺序排列数据,例如升序或降序,以生成最终排序的结果集。

SQL 查询执行中何时进行过滤和排序


6. 聚合和分组

聚合函数(例如SUMCOUNT、 AVG 、 MIN 和MAX )通常用于 SQL 查询中对数据组执行计算。

如果查询包含GROUP BY 子句,DBMS 会根据指定的列对行进行分组。然后,它会将聚合函数分别应用于每个组,从而生成分组数据的汇总统计信息或计算结果。

SQL查询中的聚合和分组


7.结果集生成

完成所有必要的操作后,DBMS 会生成最终结果集。这组行和列代表满足用户查询的数据。

然后将结果集返回给用户或发起查询的应用程序。

SQL 查询何时生成结果


8. 索引利用率

索引在优化 SQL 查询性能方面起着至关重要的作用。索引是一种数据结构,它提供了一种基于特定列快速查找数据的方法。

执行查询时,DBMS 可以利用索引来有效地定位相关行,从而减少全表扫描的需要并提高查询响应时间。

SQL查询中的索引利用率


9. 交易管理

SQL 中的事务操作(例如 INSERT、UPDATE 和 DELETE)涉及修改数据库中的数据。这些操作被分组为事务,以确保数据的一致性和完整性。

当启动事务时,DBMS 可能会锁定受影响的行或表,以防止其他事务同时访问或修改它们。

一旦事务完成,更改将被提交到数据库或回滚,具体取决于事务的成功或失败。

SQL中的事务管理


10.缓存和内存管理

现代数据库系统采用各种缓存和内存管理技术来优化查询性能。

缓存涉及将经常访问的数据存储在内存中,以减少磁盘读取的需要,相比之下磁盘读取的速度较慢。

DBMS 还可以使用缓冲池来管理查询执行和结果集生成的内存分配,从而进一步提高效率。

SQL中的缓存和内存管理


SQL 查询顺序?SQL 查询在底层是如何执行的?

了解并记住各种 SQL 命令(如 SELECT、FROM、COUNT、WHERE、HAVING、ORDER BY、JOIN 等)的应用顺序也很重要

SQL 查询按特定顺序处理,了解此顺序对于有效地编写和优化查询至关重要。SQL 查询处理的典型顺序包括以下步骤:

  1. FROM:查询首先指定要从中检索数据的源表或视图。此子句定义查询的主要数据源。

  2. JOIN:如果查询涉及多个表,则使用 JOIN 子句根据指定条件组合来自不同表的数据。不同类型的连接(INNER JOIN、LEFT JOIN、RIGHT JOIN 等)决定了如何匹配每个表中的行并将其包含在结果集中。

  3. WHERE: WHERE 子句用于根据特定条件过滤行。它将数据限制为仅满足指定条件的行。不满足条件的行将被排除在进一步处理之外。

  4. GROUP BY:如果需要聚合,则使用 GROUP BY 子句对指定列中具有相似值的行进行分组。此步骤通常与 COUNT、SUM、AVG 等聚合函数结合使用,以对分组数据执行计算。

  5. HAVING: HAVING子句用于在GROUP BY操作后对结果集进行过滤。它指定了聚合数据的过滤条件。类似于WHERE子句,不满足条件的行将从最终结果中排除。

  6. SELECT: SELECT 子句用于指定最终结果集中应出现的列。它决定了哪些数据将被检索并显示在查询输出中。

  7. DISTINCT:如果使用 DISTINCT 关键字,则会从结果集中删除重复的行,确保只显示唯一的值。

  8. ORDER BY: ORDER BY 子句用于根据指定的列对结果集进行排序。它按照指定的升序或降序排列行。

  9. LIMIT/OFFSET 或 FETCH/FIRST:根据数据库系统,您可以使用 LIMIT(或 FETCH 或 FIRST)和 OFFSET 子句来控制返回的行数并实现分页。

  10. UNION/INTERSECT/EXCEPT:如果需要,这些集合运算可用于组合多个查询的结果。

这是来自 Medium 的一张很好的图表,它清楚地解释了 SQL 查询的样子以及查询引擎如何执行它:

SQL查询执行顺序

值得注意的是,实际执行顺序可能因所使用的特定数据库管理系统而异。**但是,逻辑处理顺序在大多数 SQL 数据库中保持一致。

此外,现代查询优化器可能会出于性能原因重新排列其中一些步骤,同时确保最终结果保持准确和一致。

了解 SQL 查询处理的顺序不仅有助于技术面试,还可以让您编写高效且有效的查询,并为查询优化和性能调整提供见解。

通过按照此顺序构建查询,您可以更好地控制数据流并获得所需的结果。

结论

这就是 SQL 查询在底层是如何执行的。SQL 查询看似简单的语句,但在后台却有一个复杂的过程来检索、操作和管理数据。

从解析、优化到执行计划生成、结果集生成,每一步都经过精心设计,确保查询处理高效、准确。

了解SQL 查询的工作原理可以为开发人员和数据库管理员提供有关性能优化和查询调整的宝贵见解,最终可以更好地利用数据库资源并提高应用程序的响应能力。

而且,如果您正在准备技术面试,并且您需要更多问题,而不仅仅是查询,还需要来自其他主题的数据库和 SQL 相关问题,例如索引、连接、分组、聚合和窗口函数,那么您还可以阅读Grokking SQL 面试书籍或加入200+ SQL 面试问题

两者都是很好的资源,可以通过回答常见问题来帮助您准备 SQL 面试。

一切顺利 !!

鏂囩珷鏉簮锛�https://dev.to/somadevtoo/how-sql-query-works-sql-query-execution-order-for-tech-interview-15kb
PREV
🔴 使用 HTML 和 CSS 构建 Twitter 克隆 - 教程
NEXT
大 O 符号备忘单及说明