从“执行SQL”到“返回结果”,数据库到底发生了什么?
SQL 全称是 Structured Query Language 结构化查询语言。由于其简单易学、完整安全、灵活且具备高可扩展性,SQL 如今已经成为标准的关系型数据库管理语言。
当连接到数据库,写下一条 SQL 语句,点击“执行”,
SELECT name, company FROM product WHERE id=12345;
就会获得结果:
name | company ------------+--------- PieCloudDB | OpenPie (1 row)
你是否好奇,从点击“执行”到看到结果的这段时间里,到底发生了哪些神奇的事情呢?
首先,用来连接数据库、编写 SQL 的工具是数据库的客户端软件(又称 Client),当我们编写完 SQL 并点击“执行”后,SQL 语句就从客户端传到了数据库服务器端(又称 Server)。数据库服务器收到 SQL 语句之后,就会开始它的表演。
SQL 语句的执行一般经过三个步骤:解析、优化、执行,而数据库里进行这三项操作的功能模块称为:解析器、优化器、执行器。分别负责对 SQL 语句进行词法和语法分析、进行查询优化和执行 SQL 语句。
首先,解析器会识别 SQL 语句中的词语的含义,例如下面这个 SQL 语句中:
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 语句执行的全部过程,你学会了吗?

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
面向 NGINX 和 NGINX Plus 的 OpenTracing
原文作者:Mohamed Gougam of F5 原文链接:面向 NGINX 和 NGINX Plus 的 OpenTracing 转载来源:NGINX 开源社区 NGINX 唯一中文官方社区 ,尽在nginx.org.cn 尽管微服务架构有诸多优势,但它也带来了新的挑战。其中一个挑战是在处理请求时对其进行追踪,因为请求数据在组成应用的所有微服务之间流动。为此,一种被称为分布式(请求)追踪的新方法用来解决这一挑战,OpenTracing供一组规范和标准的 API,旨在指导分布式追踪工具的设计和实施。 在 NGINX Plus Release 18 (R18) 中,NGINX 官方将NGINX OpenTracing 模块添加到 NGINX Plus 动态模块库中(它已经作为第三方模块被使用了数年)。NGINX OpenTracing 模块的一大优势是,通过对 NGINX 和 NGINX Plus 进行分布式追踪,您可以获得每个代理应用的追踪数据,而无需单独对应用进行追踪。 在这篇博客中,我们将展示如何为 NGINX 或 NGINX Plus 启用分布式请求追踪(为简洁起见,我们从现在...
- 下一篇
14款DevOps/SRE工具,助力提升运维效率
简介 随着平台工程的兴起,DevOps 和 SRE 不断发展,带来了新一代工具,旨在提高软件开发和运维的效率、可扩展性和可靠性。 在本篇文章中,我们将深入探讨一些最具发展前景的工具,它们正在塑造持续集成与部署、监控与可观测性、基础架构/应用平台、事件管理与警报、安全性和可视化的未来。 CI/CD Tekton Tekton 是一个用于创建 CI/CD 系统的开源框架,具有处理各种部署环境、云提供商和本地的灵活性和强大功能。它使跨供应商、语言和部署环境的CI/CD 工具和流程标准化。 Tekton 与 Jenkins 和 Knative 等一系列流行工具兼容,提供可扩展、无服务器、云原生的执行。其抽象底层实施的能力允许团队根据具体需求定制构建、测试和部署工作流。 Argo CD Argo CD 是为 Kubernetes 量身定制的声明式 GitOps 持续交付工具。它强调保持应用定义、配置和环境的声明性和版本控制的重要性。 Argo CD 旨在自动化和简化应用程序的部署和生命周期管理,确保它们既可审计又易于理解。 GitHub Actions GitHub Actions 是最受欢迎的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群