【SQL引擎概览】

SQL引擎概览


SQL引擎是数据库系统的重要组成部分,主要职责是将应用程序输入的SQL语句在当前负载场景下生成高效的执行计划,在SQL语句的高效执行上扮演重要角色。

  • SQL引擎主要框架如下
    在这里插入图片描述

  • SQL查询响应流程如图所示:

在这里插入图片描述

  • SQL语句在SQL引擎中的执行过程如下图所示:

![在这里插入图片描述](https://img-blog.csdnimg.cn/60f53589b29d4c129c2f73ba77959687.png

从上图中可以看出,应用程序的SQL语句需要经过SQL解析生成逻辑执行计划、经过查询优化生成物理执行计划,然后将物理执行计划转交给查询执行引擎做物理算子的执行操作。

SQL解析通常包含词法分析、语法分析、语义分析几个子模块。SQL是介于关系演算和关系代数之间的一种描述性语言,它吸取了关系代数中一部分逻辑算子的描述,而放弃了关系代数中“过程化”的部分,SQL解析主要的作用就是将一个SQL语句编译成为一个由关系算子组成的逻辑执行计划。

一、SQL引擎


数据库的SQL引擎是数据库重要的子系统之一。它对上负责承接应用程序发送过来的SQL语句,对下则负责指挥执行器运行执行计划。其中优化器作为SQL引擎中最重要、最复杂的模块,被称为数据库的“大脑”,优化器产生的执行计划的优劣直接决定数据库的性能。

SQL引擎作为数据库的三大核心模块之一,起到了承上启下的作用,上接客户端应用程序中用户输入的的SQL语句,并返回查询结果, 下接查询执行的执行器,运行执行计划。SQL 引擎包括查询解析查询分流查询优化查询执行

  • SQL 引擎中查询解析作为第一个接触到 SQL 语句的模块,主要负责将 SQL语句转换为查询树,即逻辑执行计划,以便于后续进行查询优化与执行。

  • SQL 引擎中查询分流负责将简单查询与复杂查询分流,是提高数据库性能的第一步基本操作。简单查询直接传入查询执行,复杂查询会进入查询优化。

  • SQL 引擎中查询优化负责对查询解析产生的逻辑执行计划进行优化,优化器最终产生的执行计划的性能决定 openGauss 数据库的性能。

  • SQL 引擎中查询执行负责执行优化器给予的计划,服从优化器的指挥,通过存储引擎读取数据并进行处理,将结果返回给客户端。

二、 SQL解析


SQL语句在数据库管理系统中的编译过程符合编译器实现的常规过程,需要进行词法分析、语法分析和语义分析。

(1)词法分析:从查询语句中识别出系统支持的关键字、标识符、运算符、终结符等,确定每个词固有的词性。

(2)语法分析:根据SQL的标准定义语法规则,使用词法分析中产生的词去匹配语法规则,如果一个 SQL 语句能够匹配一个语法规则,则生成对应的抽象语法树(Abstract Syntax Tree,AST)。

(3)语义分析:对语法树进行有效性检查,检查语法树中对应的表、列、函数、表达式是否有对应的元数据,将抽象语法树转换为逻辑执行计划(关系代数表达式)。


e.g:
在SQL标准中,确定了SQL的关键字以及语法规则信息,SQL 解析器在做词法分析的过程中会将一个SQL语句根据关键字信息以及间隔信息划分为独立的原子单 位,每个单位以一个词的方式展现,例如有SQL语句:

SELECT w_name FROM warehouse WHERE w_no = 1;

(一). 该SQL语句可以划分的关键字、标识符、运算符、常量等原子单位如表所示。
在这里插入图片描述
(二). 语法分析会根据词法分析获得的词来匹配语法规则,最终生成一个抽象语法树,每个词作为语法树的叶子节点出现,如下图所示。
在这里插入图片描述
(三)抽象语法树表达的语义还仅仅限制在能够保证应用的SQL语句符合SQL标准的规范,但是对于SQL语句的内在含义还需要做有效性检查。

  • (1)检查关系的使用:FROM 子句中出现的关系必须是该查询对应模式中的关系或视图。
  • (2)检查与解析属性的使用:在SELECT语句中或者WHERE子句中出现的各个属性必须是FROM子句中某个关系或视图的属性。
  • (3)检查数据类型:所有属性的数据类型必须是匹配的。

在有效性检查的同时,语义分析的过程还是有效性语义绑定(Bind)的过程,通过语义分析的检查,抽象语法树就转换成一个逻辑执行计划。逻辑执行计划可以通过关系代数表达式的形式来表现。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值