一种结构化查询语句优化方法、装置、设备及存储介质与流程

专利2022-05-09  104


本发明实施例涉及数据处理技术领域,尤其涉及一种结构化查询语句优化方法、装置、设备及存储介质。



背景技术:

结构化查询语言(structuredquerylanguage,sql),一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

在基于sql语句的数据库操作中,多表连接是sql语句中的常用的一项操作,在实际应用中,对于没有过滤条件的多表连接,首先需要将参与连接的数据表进行笛卡尔积计算,再在笛卡尔积计算结果中查询相应的数据结果。在数据表中的数据较多时,多表连接产生的笛卡尔积数据的数量就比较庞大,因此在笛卡尔积数据上再进行其他的sql查询将会带来相应的性能损耗。



技术实现要素:

本发明提供一种结构化查询语句优化方法、装置、设备及存储介质,以实现对查询项中包含去重语句的结构化查询sql语句进行优化。

第一方面,本发明实施例提供了一种结构化查询语句优化方法,包括:

获取查询项中包含去重语句的结构化查询sql语句;

确定多表连接项中包含的满足消除条件的待消除连接表;

从所述多表连接项中消除所述待消除连接表,获得目标sql语句。

可选的,所述确定多表连接项中包含的满足消除条件的待消除连接表,包括:

当所述sql语句仅包括查询项和多表连接项时,确定所述多表连接项中包含的连接数据表;

如果各所述连接数据表之间不存在连接关系且各所述连接数据表非空,则遍历各所述连接数据表;

当所述连接数据表满足设定的引用判定条件时,则将所述连接数据表确定为所述待消除连接表。

可选的,所述连接数据表满足设定的引用判定条件的步骤包括:

判定所述连接数据表是否在所述查询项的执行逻辑层中被引用;

若否,则确定所述连接数据表满足引用判定条件。

可选的,在获取查询项中包含去重语句的结构化查询sql语句之后,还包括:

对所述sql语句进行语义解析,如果存在语义错误,则进行语义错误提示。

第二方面,本发明实施例还提供了一种结构化查询语句优化装置,该装置包括:

语句获取模块,用于获取查询项中包含去重语句的结构化查询sql语句;

消除确定模块,用于确定多表连接项中包含的满足消除条件的待消除连接表;

语句确定模块,用于从所述多表连接项中消除所述待消除连接表,获得目标sql语句。

可选的,所述消除确定模块,包括:

数据表确定单元,用于当所述sql语句仅包括查询项和多表连接项时,确定所述多表连接项中包含的连接数据表;

数据表遍历单元,用于如果各所述连接数据表之间不存在连接关系且各所述连接数据表非空,则遍历各所述连接数据表;

消除表确定单元,用于当所述连接数据表满足设定的引用判定条件时,则将所述连接数据表确定为所述待消除连接表。

可选的,所述连接数据表满足设定的引用判定条件的步骤包括:

判定所述连接数据表是否在所述查询项的执行逻辑层中被引用;

若否,则确定所述连接数据表满足引用判定条件。

可选的,该装置还包括:

语义解析模块,用于在获取查询项中包含去重语句的结构化查询sql语句之后,对所述sql语句进行语义解析,如果存在语义错误,则进行语义错误提示。

第三方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明任意实施例所述的结构化查询语句优化方法。

第四方面,本发明实施例还提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如本发明任意实施例所述的结构化查询语句优化方法。

本发明通过获取查询项中包含去重语句的结构化查询sql语句,确定多表连接项中包含的满足消除条件的待消除连接表,从多表连接项中消除待消除连接表,获得目标sql语句,在执行目标sql语句时,减少了多表连接中数据表的数量,提高了查询效率,解决了多表连接产生笛卡尔积数据量过大,导致进行sql查询时计算复杂耗能的问题,实现快速完成去重的效果。

附图说明

图1是本发明实施例一提供的一种结构化查询语句优化方法的流程图;

图2是本发明实施例二提供的一种结构化查询语句优化装置的结构框图;

图3是本发明实施例三提供的一种计算机设备的结构框图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构,此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

实施例一

图1为本发明实施例一提供的一种结构化查询语句优化方法的流程图,本实施例可适用于优化查询项中包含去重语句的结构化查询sql语句的情况,该方法可以由结构化查询语句优化装置来执行,该装置可以通过软件和/或硬件实现。

如图1所示,该方法具体包括如下步骤:

步骤110、获取查询项中包含去重语句的sql语句。

一般情况下,对数据库中的数据进行操作都要先查询到相应的数据,因此,数据查询是数据库的核心操作,在数据库应用中往往采用sql语句实现各种数据库操作,数据查询同样可以采用sql语言实现,可以知道的是,sql语句进行各种操作的前提是选择待操作的数据对象,而对数据操作对象的选择可以结合具体场景构建相应的select语句来实现,在需要进行去重操作的场景中,所构建的select语句需要包含用于去重实现的distinct子句。在本实施例中,可以将select语句中select关键字与from关键字之间的部分称为查询项,将distinct语句称为去重语句。

具体的,本实施例为实现对包含去重语句的sql语句进行优化,可以通过本步骤对当前已形成的sql语句进行遍历,从而获得初始的包含distinct语句的sql语句。

示例性的,下述给出了一个涉及去重语句应用场景的sql语句,具体表示如下:

selectdistinctt1.c1fromt1,t2;

在执行上述语句时,首先需要获取数据表t1和t2的结果集,然后计算两个结果集的笛卡尔积,之后获取该笛卡尔积中t1表的c1列的值,并对c1列的值进行distinct计算,最后将计算结果输出。其中,对c1列的值进行distinct计算即去掉c1列中重复的值。

可选的,在步骤110之后,还可以包括:对sql语句进行语义解析,如果存在语义错误,则进行语义错误提示。

具体的,在获取到用户输入的sql语句后,可以对sql语句进行词法、语法、语义分析,若能成功得到分析结果且分析结果正确,则可进一步利用本实施例提供的结构化查询语句优化方法对该sql语句进行优化,否则,可以进行语义错误提示,提示用户检查语法错误。

步骤120、确定多表连接项中包含的满足消除条件的待消除连接表。

在本实施例中,可以将from子句中from关键字后的部分称为多表连接项。from语句最常见的用法为from [数据表],数据表可以有一个或多个。当数据表有多个时,表示需要将多个数据表进行多表连接操作,特殊的,当数据表只有一个时,也可以作为特殊的多表连接进行处理,即一个数据表做多表连接操作后,结果还是原数据表。在本实施例中,可以将多表连接项中的数据表称为连接数据表,多表连接项中包含至少一个连接数据表,当去掉某一连接数据表不影响查询结果时,可以将该连接数据表称为待消除连接表。消除条件则可以理解为判定某一连接数据表的存在与否是否影响查询结果的条件。

具体的,当多表连接项中某一连接数据表存在与否都不影响查询结果时,则可以认为该连接数据表满足消除条件,可以确定为待消除连接表。

可选的,步骤120可以通过以下步骤实现:

s1、当sql语句仅包括查询项和多表连接项时,确定多表连接项中包含的连接数据表。

具体的,可以判断sql语句中是否仅包含查询项和多表连接项,不包含其他子句,如where子句、层次查询等。如果sql语句仅包括查询项和多表连接项,则可以将多表连接项中包含的数据表确定为连接数据表,继续进行s2;否则,该sql语句不适用于本实施例提供的语句优化方法,结束优化操作即可。

s2、如果各连接数据表之间不存在连接关系且各连接数据表非空,则遍历各连接数据表。

具体的,可以判断各连接数据表之间是否存在连接关系,以及各连接数据表是否非空。连接数据表非空可以理解为表中记录的数据行数大于0。由于一个非空的数据表与一个空数据表的笛卡尔积为空集,此时语句无法进行相应的优化改写,因此,如果各连接数据表之间存在连接关系或者有连接数据表为空,则该sql语句不适用于本实施例提供的语句优化方法,结束优化操作即可,否则,遍历各连接数据表并进行s3。

s3、当连接数据表满足设定的引用判定条件时,则将连接数据表确定为待消除连接表。

具体的,当某一连接数据表满足设定的引用判定条件时,可以认为去掉该连接数据表不影响查询结果,因此可以确定该连接数据表为待消除连接表。

可选的,连接数据表满足设定的引用判定条件的步骤可以包括:判定连接数据表是否在查询项的执行逻辑层中被引用;若否,则确定连接数据表满足引用判定条件。

也就是说,当某一连接数据表没有在查询项中被引用,则可以确定该连接数据表满足引用判定条件。

步骤130、从多表连接项中消除待消除连接表,获得目标sql语句。

其中,目标sql语句可以理解为将满足消除条件的待消除连接表从sql语句中消除后的sql语句。

具体的,将步骤120中确定的满足消除条件的待消除连接表从多表连接项中消除,得到目标sql语句。

示例性的,通过查询用户输入的sql语句,获取查询项中包含去重语句的sql语句,如以下语句:

selectdistinctt1.c1fromt1,t2;

其中表t1和表t2非空,该sql语句仅包括查询项和多表连接项,表t1和表t2不存在连接关系且两表均非空,表t1不满足设定的引用判定条件,表t2满足设定的引用判定条件,因此,确定表t2为待消除连接表,将表t2从多表连接项中消除,得到目标sql语句如下:

selectdistinctc1fromt1;

本实施例的技术方案,通过获取查询项中包含去重语句的结构化查询sql语句,确定多表连接项中包含的满足消除条件的待消除连接表,从多表连接项中消除待消除连接表,获得目标sql语句,在执行目标sql语句时,减少了多表连接中数据表的数量,提高了查询效率,解决了多表连接产生笛卡尔积数据量过大,导致进行sql查询时计算复杂耗能的问题,实现快速完成去重的效果。

实施例二

本发明实施例所提供的结构化查询语句优化装置可执行本发明任意实施例所提供的结构化查询语句优化方法,具备执行方法相应的功能模块和有益效果。图2是本发明实施例二提供的一种结构化查询语句优化装置的结构框图,如图2所示,该装置包括:语句获取模块210、消除确定模块220和语句确定模块230。

语句获取模块210,用于获取查询项中包含去重语句的结构化查询sql语句。

消除确定模块220,用于确定多表连接项中包含的满足消除条件的待消除连接表;

语句确定模块230,用于从所述多表连接项中消除所述待消除连接表,获得目标sql语句。

本实施例的技术方案,通过获取查询项中包含去重语句的结构化查询sql语句,确定多表连接项中包含的满足消除条件的待消除连接表,从多表连接项中消除待消除连接表,获得目标sql语句,在执行目标sql语句时,减少了多表连接中数据表的数量,提高了查询效率,解决了多表连接产生笛卡尔积数据量过大,导致进行sql查询时计算复杂耗能的问题,实现快速完成去重的效果。

可选的,所述消除确定模块220,包括:

数据表确定单元,用于当所述sql语句仅包括查询项和多表连接项时,确定所述多表连接项中包含的连接数据表;

数据表遍历单元,用于如果各所述连接数据表之间不存在连接关系且各所述连接数据表非空,则遍历各所述连接数据表;

消除表确定单元,用于当所述连接数据表满足设定的引用判定条件时,则将所述连接数据表确定为所述待消除连接表。

可选的,所述连接数据表满足设定的引用判定条件的步骤包括:

判定所述连接数据表是否在所述查询项的执行逻辑层中被引用;

若否,则确定所述连接数据表满足引用判定条件。

可选的,该装置还包括:

语义解析模块,用于在获取查询项中包含去重语句的结构化查询sql语句之后,对所述sql语句进行语义解析,如果存在语义错误,则进行语义错误提示。

实施例三

图3为本发明实施例三提供的一种计算机设备的结构框图,如图3所示,该计算机设备包括处理器310、存储器320、输入装置330和输出装置340;计算机设备中处理器310的数量可以是一个或多个,图3中以一个处理器310为例;计算机设备中的处理器310、存储器320、输入装置330和输出装置340可以通过总线或其他方式连接,图3中以通过总线连接为例。

存储器320作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的结构化查询语句优化方法对应的程序指令/模块(例如,结构化查询语句优化装置中的语句获取模块210、消除确定模块220和语句确定模块230)。处理器310通过运行存储在存储器320中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的结构化查询语句优化方法。

存储器320可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器320可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器320可进一步包括相对于处理器310远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置330可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置340可包括显示屏等显示设备。

实施例四

本发明实施例四还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种结构化查询语句优化方法,该方法包括:

获取查询项中包含去重语句的结构化查询sql语句;

确定多表连接项中包含的满足消除条件的待消除连接表;

从所述多表连接项中消除所述待消除连接表,获得目标sql语句。

当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的结构化查询语句优化方法中的相关操作。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

值得注意的是,上述结构化查询语句优化装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。


技术特征:

1.一种结构化查询语句优化方法,其特征在于,包括:

获取查询项中包含去重语句的结构化查询sql语句;

确定多表连接项中包含的满足消除条件的待消除连接表;

从所述多表连接项中消除所述待消除连接表,获得目标sql语句。

2.根据权利要求1所述的结构化查询语句优化方法,其特征在于,所述确定多表连接项中包含的满足消除条件的待消除连接表,包括:

当所述sql语句仅包括查询项和多表连接项时,确定所述多表连接项中包含的连接数据表;

如果各所述连接数据表之间不存在连接关系且各所述连接数据表非空,则遍历各所述连接数据表;

当所述连接数据表满足设定的引用判定条件时,则将所述连接数据表确定为所述待消除连接表。

3.根据权利要求2所述的结构化查询语句优化方法,其特征在于,所述连接数据表满足设定的引用判定条件的步骤包括:

判定所述连接数据表是否在所述查询项的执行逻辑层中被引用;

若否,则确定所述连接数据表满足引用判定条件。

4.根据权利要求1所述的结构化查询语句优化方法,其特征在于,在获取查询项中包含去重语句的结构化查询sql语句之后,还包括:

对所述sql语句进行语义解析,如果存在语义错误,则进行语义错误提示。

5.一种结构化查询语句优化装置,其特征在于,包括:

语句获取模块,用于获取查询项中包含去重语句的结构化查询sql语句;

消除确定模块,用于确定多表连接项中包含的满足消除条件的待消除连接表;

语句确定模块,用于从所述多表连接项中消除所述待消除连接表,获得目标sql语句。

6.根据权利要求5所述的结构化查询语句优化装置,其特征在于,所述消除确定模块,包括:

数据表确定单元,用于当所述sql语句仅包括查询项和多表连接项时,确定所述多表连接项中包含的连接数据表;

数据表遍历单元,用于如果各所述连接数据表之间不存在连接关系且各所述连接数据表非空,则遍历各所述连接数据表;

消除表确定单元,用于当所述连接数据表满足设定的引用判定条件时,则将所述连接数据表确定为所述待消除连接表。

7.根据权利要求6所述的结构化查询语句优化装置,其特征在于,所述连接数据表满足设定的引用判定条件的步骤包括:

判定所述连接数据表是否在所述查询项的执行逻辑层中被引用;

若否,则确定所述连接数据表满足引用判定条件。

8.根据权利要求5所述的结构化查询语句优化装置,其特征在于,所述装置还包括:

语义解析模块,用于在获取查询项中包含去重语句的结构化查询sql语句之后,对所述sql语句进行语义解析,如果存在语义错误,则进行语义错误提示。

9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-4中任一所述的结构化查询语句优化方法。

10.一种包含计算机可执行指令的存储介质,其特征在于,所述计算机可执行指令在由计算机处理器执行时用于执行如权利要求1-4中任一所述的结构化查询语句优化方法。

技术总结
本发明公开了一种结构化查询语句优化方法、装置、设备及存储介质。该方法包括:获取查询项中包含去重语句的结构化查询SQL语句;确定多表连接项中包含的满足消除条件的待消除连接表;从所述多表连接项中消除所述待消除连接表,获得目标SQL语句。本发明在执行目标SQL语句时,减少了多表连接中数据表的数量,提高了查询效率,解决了多表连接产生笛卡尔积数据量过大,导致进行SQL查询时计算复杂耗能的问题,实现快速完成去重的效果。

技术研发人员:万伟;朱仲颖;韩朱忠
受保护的技术使用者:上海达梦数据库有限公司
技术研发日:2021.05.26
技术公布日:2021.08.03

转载请注明原文地址:https://doc.8miu.com/read-9080.html

最新回复(0)