从“执行SQL”到“返回结果”,数据库到底发生了什么?

SQL 全称是 Structured Query Language 结构化查询语言。由于其简单易学、完整安全、灵活且具备高可扩展性,SQL 如今已经成为标准的关系型数据库管理语言。

当连接到数据库,写下一条 SQL 语句,点击"执行",

ini 复制代码
SELECT name, company FROM product WHERE id=12345;

就会获得结果:

sql 复制代码
 name       | company 
------------+---------
 PieCloudDB | OpenPie 
(1 row)

你是否好奇,从点击"执行"到看到结果的这段时间里,到底发生了哪些神奇的事情呢?

首先,用来连接数据库、编写 SQL 的工具是数据库的客户端软件(又称 Client),当我们编写完 SQL 并点击"执行"后,SQL 语句就从客户端传到了数据库服务器端(又称 Server)。数据库服务器收到 SQL 语句之后,就会开始它的表演。

SQL 语句的执行一般经过三个步骤:解析、优化、执行,而数据库里进行这三项操作的功能模块称为:解析器、优化器、执行器。分别负责对 SQL 语句进行词法和语法分析、进行查询优化和执行 SQL 语句。

首先,解析器会识别 SQL 语句中的词语的含义,例如下面这个 SQL 语句中:

ini 复制代码
SELECT name, company FROM product WHERE id=12345;

"SELECT"、"FROM"、"WHERE" 会被识别为关键字,"product"被识别为表名,"name"和"company"将被识别为属性名称,而" id=12345" 将被识别为过滤条件。

接着,解析器会查询数据库的系统表信息(catalog),确定表名、属性名是否存在。如果词法语法正确,解析器生成 SQL 的抽象语法树(abstract syntax tree, AST)。下面就是上述 SQL 例子对应的 AST 树概述图。

解析器的任务完成了,下面轮到优化器登场了。一条 SQL 语句有很多种执行方式,而优化器将依据 SQL 的解析树(AST)生成最优的执行计划(Execution Plan)。优化器会从计算复杂度和 IO 两个方面进行优化。优化过程一般分为两个阶段:逻辑优化和物理优化。

逻辑优化是将 SQL 语句改写为更加容易执行的等价形式,过滤条件的改写(优化 where)、子查询优化、子连接提升、谓词下推等等;而物理优化则不同。这一阶段会根据表中的数据的分布特点,来选择 SQL 的执行路径。数据库会定期收集表中的数据的统计信息,例如表中的元组数量、数据的分布特点等。优化技术包括如何使用索引,多表连接时如何确定连接顺序等。

拓数派旗下云原生虚拟数仓 PieCloudDB Database 打造的优化器「达奇」针对用户云上数据查询性能需求对复杂查询场景做了大量优化和改进,实现多阶段聚集、聚集下推、预计算等高阶优化。

执行计划生成后,下面登场的是执行器。执行器会根据执行计划执行各种操作,例如数据文件的扫描、数据的连接(join)等。还需要和存储层(如 PieCloudDB 的存储引擎简墨)协作处理多种操作,包括事务、锁、缓存等。

此外,PieCloudDB 新一代向量化执行引擎还会具有并行执行查询计划以及使用 SIMD 等指令进行加速等能力目前,PieCloudDB 向量化执行引擎已在业内常用的决策支持基准测试 TPCH 和 TPC-DS 中展现了令人瞩目的性能提升。

待到执行计划执行完毕,Server 端会把 SQL 的执行结果返回 Client 端,将执行结果展示给我们。

这就是 SQL 语句执行的全部过程,你学会了吗?

相关推荐
风哥2号3 小时前
数据库教程FGMT27‑MySQL数据库基础知识与体系架构
数据库·mysql
YangYang9YangYan4 小时前
2026 校招商品分析岗位 JD 拆解,核心指标、工具与面试考点
大数据·数据库·数据分析
西安栈上月明软件科技5 小时前
从业务黑话到本体图谱:OAG本体建模五步法(西安老系统AI化改造实战)
数据库·人工智能·架构
anxiao_m5 小时前
跨云跨机房大数据迁移怎么选?不同场景工具适配指南
数据库·云启快传
风哥2号7 小时前
数据库教程FGMT43‑MySQL性能分析与优化调整
数据库·mysql
随身数智备忘录7 小时前
财务数据分析如何与业务场景结合?财务数据分析如何从数出有据到数出有用?
数据库
这个DBA有点耶9 小时前
数据库教程:从零基础到实战的完整学习路径(2026版)
数据库·程序员·代码规范
forestsea9 小时前
从零构建 Java 智能体 RAG 系统:Milvus 向量数据库实战指南
java·数据库·milvus
probex_10 小时前
从 ByConity 到 VictoriaMetrics:一次指标数据迁移引发的四种存储对比
数据库
Patrick在香港10 小时前
Python 审计香港开放数据目录:两个端点差 10 倍,只有 9.3% 的资源标了「最后修改时间」
开发语言·数据库·python·数据分析·api·数据治理·开放数据