eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« openGauss 查询优化 | Blog首页 | openGauss 数据库执行器概述 »

openGauss SQL解析
modb.pro

文章来源于墨天轮:https://www.modb.pro/db/159536

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

  • 词法分析:从查询语句中识别出系统支持的关键字、标识符、操作符、终结符等,每个词确定自己固有的词性。

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

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

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

SELECT wname FROM warehouse WHERE wno = 1;

可以划分的关键字、标识符、操作符、常量等原子单位,如下表所示。

屏幕快照 2021-11-10 上午11.45.13.png

语法分析会根据词法分析获得的词来匹配语法规则,最终生成一个抽象语法树(AST),每个词作为语法树的叶子结点出现,如下图所示。

抽象语法图.png

抽象语法树表达的语义还仅仅限制在能够保证应用的SQL语句符合SQL标准的规范,但是对于SQL语句的内在含义还需要做有效性的检查。

  • 检查关系的使用:FROM子句中出现的关系必须是该查询对应模式中的关系或视图。

  • 检查与解析属性的使用:在SELECT句中或者WHERE子句中出现的各个属性必须是FROM子句中某个关系或视图的属性。

  • 检查数据类型:所有属性的数据类型必须是匹配的。

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

关系代数表达式.png


历史上的今天...
    >> 2010-11-10文章:
    >> 2009-11-10文章:
    >> 2008-11-10文章:
    >> 2006-11-10文章:
    >> 2005-11-10文章:
           Linux上iSCSI配置
           给20年后的自己发封邮件
           How to use Oracle Dump Function

By enmotech on 2021-11-10 11:53 | Comments (0) | | 3430 |


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com