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

文档序号:21179053发布日期:2020-06-20 17:40阅读:168来源:国知局
本发明实施例涉及数据库
技术领域
:,尤其涉及结构化查询语句的优化方法、装置、设备及存储介质。
背景技术
::结构化查询语言(structuredquerylanguage,sql),一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。在基于sql语句的数据库操作中,分组是sql语句中的常用的一项操作,然而,在实际应用,如果所形成sql语句中包含的分组项过多,或者,sql语句中包含的分组项在执行中需要复杂的计算,那么分组操作将占用较多的计算资源,影响sql语句的执行性能。技术实现要素:本发明提供一种结构化查询语句的优化方法、装置、设备及存储介质,以实现优化分组操作的计算量,提升结构化查询语句的性能。第一方面,本发明实施例提供了一种结构化查询语句的优化方法,包括:获取包含分组语句的结构化查询sql语句;确定所述分组语句中包含的满足消除条件的待消除分组项;从所述sql语句中消除所述待消除分组项,获得目标sql语句。可选的,所述确定所述分组语句中包含的满足消除条件的待消除分组项,包括:遍历所述分组语句中包含的分组项;如果所述分组语句中存在具备主键标识的第一分组项,则确定所述第一分组项对应的目标数据表;如果所述分组语句中存在同属于所述目标数据表且为非主键的第二分组项,则当所述第二分组项满足设定的引用判定条件时,将所述第二分组项确定为所述待消除分组项。可选的,其特征在于,所述第二分组项满足设定的引用判定条件的步骤包括:判定所述第二分组项是否在所述分组语句之上的执行逻辑层中被引用;若否,则确定所述第二分组项满足引用判定条件。可选的,所述判定所述第二分组项是否在所述分组语句之上的执行逻辑层中被引用,包括:解析所述sql语句,获得所述sql语句对应的逻辑计划树;确定所述分组语句在所述逻辑计划树中对应的操作符节点,并确定所述操作符节点在所述逻辑计划树中关联的上层操作符节点;判定所述第二分组项是否包含在各所述上层操作符节点对应的执行表达式中。可选的,其特征在于,所述从所述sql语句中消除所述待消除分组项,获得目标sql语句,包括:获取所述sql语句中选择语句包含的选择项,并将与所述待消除分组项匹配的选择项确定为待消除选择项;消除所述选择语句中的待消除选择项,并消除所述分组语句中的待消除分组项,获得目标sql语句。第二方面,本发明实施例还提供了一种结构化查询语句的优化装置,该装置包括:语句获取模块,用于获取包含分组语句的结构化查询sql语句;消除确定模块,用于确定所述分组语句中包含的满足消除条件的待消除分组项;语句确定模块,用于从所述sql语句中消除所述待消除分组项,获得目标sql语句。第三方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明任意实施例所述的结构化查询语句的优化方法。第四方面,本发明实施例还提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行如本发明任意实施例所述的结构化查询语句的优化方法。本发明通过确定分组语句中包含的满足消除条件的待消除分组项,从sql语句中消除待消除分组项,获得目标sql语句,在执行目标sql语句时,减少了分组项的数量,简化了分组计算,解决分组项过多或计算复杂耗能的问题,实现快速完成分组的效果。附图说明图1是本发明实施例一提供的结构化查询语句的优化方法的流程图;图2给出了本发明实施例一所提供结构化查询优化方法中确定待消除分组项的实现流程图;图3给出了本发明实施例一所提供结构化查询优化方法中判定分组项满足设定的引用判定条件的实现流程图;图4是本发明实施例二提供的结构化查询语句的优化装置的结构框图;图5是本发明实施例三提供的一种计算机设备的结构框图。具体实施方式下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。实施例一图1为本发明实施例一提供的结构化查询语句的优化方法的流程图,本实施例可适用于对包含分组语句的sql语句进行优化的情况,该方法可以由结构化查询语句的优化装置来执行,该装置可以通过软件和/或硬件实现。如图1所示,该方法具体包括如下步骤:步骤110、获取包含分组语句的sql语句。其中,数据库中的数据很多时候是为了查询,因此,数据查询是数据库的核心操作,在数据库应用中往往采用sql语句实现各种数据库操作中,数据查询同样可以采用sql语言实现,可以知道的是,sql语句进行各种操作的前提是选择待操作的数据对象,而对数据操作对象的选择可以结合具体场景构建相应的select语句来实现,在需要进行分组操作的场景中,所构建的select语句需要包含用于分组实现的groupby子句。在本实施例中,将groupby语句称为分组语句。具体的,本实施例为实现对包含分组语句的sql语句进行优化,可以通过本步骤对当前已形成的sql语句进行遍历,从而获得初始的包含groupby语句的sql语句。示例性的,下述给出了一个涉及分组语句应用场景的sql语句,具体表示如下:createtablenn1(c1int,c2int,c3int,primarykey(c1));createtablenn2(d1int,d2int,d3int,primarykey(d1));createtablenn3(e1int,e2int,e3int,primarykey(e1));withvas(selectabs(c2)cc1,c1,d1,c2+c3,count(*)cntfromnn1a,nn2b,nn3cwherec1=d1andd2=e2groupbyabs(c2),c1,d1,c2+c3havingcount(*)>4)selectcntfromv;本实施例可以采用上述sql语句进行优化操作。步骤120、确定分组语句中包含的满足消除条件的待消除分组项。其中,groupby语句最常见的用法为groupby+[分组项],分组项可以有一个或多个,在执行分组操作时,数据集将根据分组项的值将一个数据集划分成各个不同的小组。在本实施例中,分组语句中包含至少一个分组项,当去掉某一分组项不影响分组结果时,可以将该分组项称为待消除分组项。消除条件则可以理解为判定某一分组项的存在与否是否影响分组结果的条件。具体的,当某一分组项存在与否都不影响分组结果时,则可以认为该分组项满足消除条件,可以确定为待消除分组项。可选的,图2给出了本发明实施例一所提供结构化查询优化方法中确定待消除分组项的实现流程图,如图2所示,进一步将上述步骤120“确定分组语句中包含的满足消除条件的待消除分组项”具体优化为通过以下步骤实现:步骤1201、遍历分组语句中包含的分组项。示例性的,接上述给出的sql语句示例,可以对其包含的groupby语句进行遍历,由此确定groupby语句中的分组项有abs(c2)、c1、d1和c2+c3。步骤1202、如果分组语句中存在具备主键标识的第一分组项,则确定第一分组项对应的目标数据表。其中,在本实施例中,将具备主键标识的分组项称为第一分组项,将具备主键标识的分组项所对应的数据表称为目标数据表。示例性的,上述例子中分组项c1为数据表nn1的主键,具备主键标识,因此,将c1确定为第一分组项,数据表nn1为对应的目标数据表。步骤1203、如果分组语句中存在同属于目标数据表且为非主键的第二分组项,则当第二分组项满足设定的引用判定条件时,将第二分组项确定为待消除分组项。具体的,当某一非主键的分组项和某第一分组项同属于一个目标数据表,则可以确定该非主键的分组项为第二分组项,当该第二分组项满足设定的引用判定条件时,可以认为去掉该第二分组项不影响分组结果,因此可以确定该第二分组项为待消除分组项。可选的,第二分组项满足设定的引用判定条件的步骤可以包括:判定第二分组项是否在分组语句之上的执行逻辑层中被引用;若否,则确定第二分组项满足引用判定条件。示例性的,上述例子中分组项c1,c2,c3来自同一个数据表,并且c1是主键,那么c1可以标识c2和c3,abs(c2)和c2+c3即为第二分组项,同时abs(c2)和c2+c3在上层并没有被引用,v的上层只需要cnt,那么,abs(c2)和c2+c3这两个分组项就可以确定为待消除分组项了。可选的,图3给出了本发明实施例一所提供结构化查询优化方法中判定分组项满足设定的引用判定条件的实现流程图,如图3所示,确定第二分组项满足设定的引用判定条件可以具体通过以下步骤实现:步骤12031、解析sql语句,获得sql语句对应的逻辑计划树。其中,sql语句在dbms经过语法解析和词法解析,会将其转换为逻辑计划树,简称为rel树。逻辑计划树的执行过程为:数据流从下向上传递。示例性的,如下所示,将步骤110中的sql语句经过语法解析和词法解析,将其转换为rel树的形式。步骤12032、确定分组语句在逻辑计划树中对应的操作符节点,并确定操作符节点在逻辑计划树中关联的上层操作符节点。在本实施例中,逻辑计划树中的所要执行的每一步(如上述1-9)中均包括一个待执行节点,该待执行节点相当于sql语句对应的操作符节点。一般的,逻辑计划树中的操作符节点的执行顺序为由下到上,但对于同一层次中的操作符节点而言,如本例中的#tab(nn3asc)和#tab(nn2asb),由父节点(#cross)控制它们的执行顺序。为确定本实施例中的第二分组项是否满足引用条件,首先可以通过本步骤来确定分组语句在rel树对应的操作符节点#groupby,并确定处理出该操作符节点在rel树中的具体位置,如操作符节点#groupby当前位于第4层;之后可以确定出处于该操作符节点#groupby上层的相关联的上层操作符节点分别为处于第3、2以及1层的#prjt2、#prjt2和#slct2。步骤12033、判定第二分组项是否包含在各上层操作符节点对应的执行表达式中。上述步骤确定出操作符节点#groupby的上层操作符节点#prjt2、#prjt2和#slct2,可以获得各上层操作符节点在rel树所对应sql语句中关联的执行表达式,由此可以通过执行本步骤的操作来确定上述各上层操作符节点对应的执行表达式中是否包含了第二分组项。步骤12034、若否,则确定第二分组项满足引用判定条件。示例性的,例子中作为第二分组项的abs(c2)和c2+c3在上层操作符节点#prjt2、#prjt2和#slct2分别对应的执行表达式并未出现,因此,可认为第二分组项都满足引用判定条件,即abs(c2)和c2+c3这两个第二分组项就可以确定为待消除分组项。步骤130、从sql语句中消除待消除分组项,获得目标sql语句。其中,目标sql语句可以理解为将满足消除条件的待消除分组项从sql语句中消除后的sql语句。具体的,将步骤120中确定的满足消除条件的待消除分组项从sql语句中消除,得到目标sql语句。可选的,步骤130具体可以通过以下方法实现:获取sql语句中选择语句包含的选择项,并将与待消除分组项匹配的选择项确定为待消除选择项;消除选择语句中的待消除选择项,并消除分组语句中的待消除分组项,获得目标sql语句。其中,sql语句中对数据操作对象的选择可以结合具体场景构建相应的select语句来实现,在本实施例中,将select语句称为选择语句。select语句最常见的用法为select[选择项]from数据源。因为查询项只能是分组项和集函数,因此分组语句中的分组项在选择语句中有对应的选择项,例如,在上述例子中,在步骤120中确定的待消除分组项abs(c2)和c2+c3,在选择项中对应选择项abs(c2)和选择项c2+c3。具体的,在确定了待消除分组项后,查找并确认选择语句中对应的待消除选择项,从选择语句中消除待消除选择项,从分组语句中消除待消除分组项,获得目标sql语句。示例性的,接上述给出的例子,获取sql语句中选择语句包含的选择项,根据步骤120中确定的待消除分组项abs(c2)和c2+c3,在选择项中确定的待消除选择项为abs(c2)和c2+c3,将待消除选择项abs(c2)和c2+c3从选择语句中消除,将待消除分组项abs(c2)和c2+c3从分组语句中消除,得到转换后的目标sql语句:withvas(selectc1,d1,count(*)cntfromnn1a,nn2b,nn3cwherec1=d1andd2=e2groupbyc1,d1havingcount(*)>4)selectcntfromv;除了上述例子中出现的情况,在进行步骤1203时还有另外一种情况,当出现会被共用的部分的groupby语句,那么每个被使用的部分上层操作符节点都需要检查,例如下述例子:createtablenn1(c1int,c2int,c3int,primarykey(c1));createtablenn2(d1int,d2int,d3int,primarykey(d1));createtablenn3(e1int,e2int,e3int,primarykey(e1));withvas(selectabs(c2)cc1,c1,d1,c2+c3,d3,count(*)cntfromnn1a,nn2b,nn3cwherec1=d1andd2=e2groupbyabs(c2),c1,d1,c2+c3,d3havingcount(*)>4)selectc1fromvmvm1,vmvm2,vmvm3wherevm1.cc1=vm2.d3andvm1.c1=vm3.d1;采用本实施例的优化方法对上述sql语句进行优化时,首先可以通过步骤110获取上述sql语句。其次进行步骤120,确定该sql语句中分组语句包含的满足消除条件的待消除分组项。具体的,可以通过步骤1201确定上述sql语句中groupby语句中的分组项有abs(c2)、c1、d1、c2+c3和d3;通过步骤1202确定分组项中c1和d1为第一分组项,abs(c2)、c2+c3和d3为第二分组项。在执行步骤1203时,因为上述sql语句中出现会被共用的部分的groupby语句,因此步骤12031在解析sql语句时,经过语法解析和词法解析,将其转换为管道pipe形式:管道pipe的作用是:先做一遍右儿子(6#htab),然后执行左儿子(1#cross:c1=d1),并把左儿子的数据向上送,直到左儿子不再有数据。其中htab(vm1)、htab(vm2)、htab(vm3)是htab的别名,本质上都是htab。通过步骤12033,可以看到主计划(1-5层)是三个表(临时结果表htab)的连接操作,而#groupby在共用部分htab(临时结果表)中,所以#groupby的上层不仅要检查第8、7、6层的#slct2、#prjt2、#htab三个操作符节点,还需要检查主计划中使用htab的上层,因此同时需要检查操作符节点第2层和第1层的#cross:cc1=d3和#cross:c1=d1。因为cc1和d3在操作符节点#cross:cc1=d3中被引用,cc1对应的第二分组项为abs(c2),因此,步骤12034可以确定第二分组项abs(c2)和d3不满足引用判定条件,则可以确定c2+c3这个分组项为待消除分组项。最后,进行步骤130,获取sql语句中选择语句包含的选择项,根据确定的待消除分组项c2+c3,在选择项中确定的待消除选择项为c2+c3,将待消除选择项c2+c3从选择语句中消除,将待消除分组项c2+c3从sql语句中消除,得到转换后的目标sql语句:withvas(selectabs(c2)cc1,c1,d1,d3,count(*)cntfromnn1a,nn2b,nn3cwherec1=d1andd2=e2groupbyabs(c2),c1,d1,d3havingcount(*)>4)selectc1fromvmvm1,vmvm2,vmvm3wherevm1.cc1=vm2.d3andvm1.c1=vm3.d1;本实施例的技术方案,通过确定分组语句中包含的满足消除条件的待消除分组项,从sql语句中消除待消除分组项,获得目标sql语句,在执行目标sql语句时,减少了分组项的数量,简化了分组计算,解决分组项过多或计算复杂耗能的问题,实现快速完成分组的效果。实施例二本发明实施例所提供的结构化查询语句的优化装置可执行本发明任意实施例所提供的结构化查询语句的优化方法,具备执行方法相应的功能模块和有益效果。图4是本发明实施例二提供的结构化查询语句的优化装置的结构框图,如图4所示,该装置包括:语句获取模块210、消除确定模块220和语句确定模块230。语句获取模块210,用于获取包含分组语句的结构化查询sql语句。消除确定模块220,用于确定分组语句中包含的满足消除条件的待消除分组项。语句确定模块230,用于从sql语句中消除待消除分组项,获得目标sql语句。可选的,消除确定模块220,包括:分组项遍历单元,用于遍历分组语句中包含的分组项;数据表确定单元,用于如果分组语句中存在具备主键标识的第一分组项,则确定第一分组项对应的目标数据表;消除项确定单元,用于如果分组语句中存在同属于目标数据表且为非主键的第二分组项,则当第二分组项满足设定的引用判定条件时,将第二分组项确定为待消除分组项。可选的,第二分组项满足设定的引用判定条件的步骤包括:判定第二分组项是否在分组语句之上的执行逻辑层中被引用;若否,则确定第二分组项满足引用判定条件。可选的,判定第二分组项是否在分组语句之上的执行逻辑层中被引用,包括:解析sql语句,获得sql语句对应的逻辑计划树;确定分组语句在逻辑计划树中对应的操作符节点,并确定操作符节点在逻辑计划树中关联的上层操作符节点;判定第二分组项是否包含在各上层操作符节点对应的执行表达式中。可选的,从sql语句中消除待消除分组项,获得目标sql语句,包括:获取sql语句中选择语句包含的选择项,并将与待消除分组项匹配的选择项确定为待消除选择项;消除选择语句中的待消除选择项,并消除分组语句中的待消除分组项,获得目标sql语句。本实施例的技术方案,通过确定分组语句中包含的满足消除条件的待消除分组项,从sql语句中消除待消除分组项,获得目标sql语句,在执行目标sql语句时,减少了分组项的数量,简化了分组计算,解决分组项过多或计算复杂耗能的问题,实现快速完成分组的效果。实施例三图5为本发明实施例三提供的一种计算机设备的结构框图,如图5所示,该计算机设备包括处理器310、存储器320、输入装置330和输出装置340;计算机设备中处理器310的数量可以是一个或多个,图5中以一个处理器310为例;计算机设备中的处理器310、存储器320、输入装置330和输出装置340可以通过总线或其他方式连接,图5中以通过总线连接为例。存储器320作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的结构化查询语句的优化方法对应的程序指令/模块(例如,结构化查询语句的优化装置中的语句获取模块210、消除确定模块220和语句确定模块230)。处理器310通过运行存储在存储器320中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的结构化查询语句的优化方法。存储器320可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器320可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器320可进一步包括相对于处理器310远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。输入装置330可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置340可包括显示屏等显示设备。实施例四本发明实施例四还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种结构化查询语句的优化方法,该方法包括:获取包含分组语句的结构化查询sql语句;确定分组语句中包含的满足消除条件的待消除分组项;从sql语句中消除待消除分组项,获得目标sql语句。当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的结构化查询语句的优化方法中的相关操作。通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。值得注意的是,上述搜索装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1