一种数据库语句优化方法、装置、设备及存储介质制造方法及图纸

技术编号:21477294 阅读:24 留言:0更新日期:2019-06-29 04:45
本发明专利技术公开了一种数据库语句优化方法、装置、设备及存储介质。该方法包括:获取用户输入的查询语句;若所述查询语句包括外层分组子句和表单子句,则根据所述外层分组子句构建内层分组子句,其中,所述表单子句的表单项为派生表且不包括分组子句;根据所述内层分组子句转换所述查询语句,通过本发明专利技术的技术方案,能够实现提高数据库语句的执行效率。

【技术实现步骤摘要】
一种数据库语句优化方法、装置、设备及存储介质
本专利技术实施例涉及计算机技术,尤其涉及一种数据库语句优化方法、装置、设备及存储介质。
技术介绍
分组查询是数据库中常见的一种查询。在数据库SQL(StructuredQueryLanguage,结构化查询语言)语句中可使用GROUPBY子句指定对数据按指定的列进行分组。例如,设表T中每一行数据记录了一个员工的基本信息,“SELECT部门号,COUNT(*)FROMTGROUPBY部门号;”语句指定对表T的数据按指定的分组列“部门号”进行分组,然后对每个分组使用COUNT(*)集函数统计组内记录行数,最后返回的是每个部门的部门号及人数。通常,数据库对于分组的实现是将所有记录从FROM项中提取出来,如果有WHERE过滤条件,则将这些记录按照WHERE条件进行过滤,将满足条件的所有记录按照GROUPBY指定的分组列进行分组。当FROM项为派生表(类似一个根据SELECT语句构建的临时表)时,有时这种传统实现方式的性能会非常低。假设有表T,该表有C1、C2、C3三列,有形如下列的查询:SELECTMAX(D1),D2FROM(SELECTC1ASD1,FUNC(C2)ASD2,C3ASD3FROMT)GROUPBYD2;由于这个查询的FROM项为派生表,则从FROM项提取记录时,需要对T表的每一条记录执行一次派生表的子查询“SELECTC1ASD1,FUNC(C2)ASD2,C3ASD3FROMT”,如果T表数据量很大,查询效率会较低。当查询项中还包含函数计算如本例中的FUNC()时,对T表的每一条记录都需要计算FUNC()函数,如果函数本身较耗时,则查询的效率会更低。
技术实现思路
本专利技术实施例提供一种数据库语句优化方法、装置、设备及存储介质,以实现提高数据库语句的执行效率。第一方面,本专利技术实施例提供了一种数据库语句优化方法,包括:获取用户输入的查询语句;若所述查询语句包括外层分组子句和表单子句,则根据所述外层分组子句构建内层分组子句,其中,所述表单子句的表单项为派生表且不包括分组子句;根据所述内层分组子句转换所述查询语句。进一步的,外层分组项中包括所述派生表的列。进一步的,根据所述内层分组子句转换所述查询语句包括:若所述派生表中存在不是外层分组项的查询项,则删除所述派生表的查询项。进一步的,删除所述派生表的查询项之后,还包括:新建内层派生表,所述内层派生表包括:包含内层分组子句的内层查询语句,根据外层分组子句构建所述内层查询语句;根据所述内层派生表构建中间层派生表;根据所述中间层派生表转换所述查询语句。进一步的,所述查询语句还包括外层集函数,其中,所述外层集函数包括MAX函数、MIN函数、COUNT函数以及SUM函数中的至少一种,且所述SUM函数的参数为所述派生表的列,所述MAX函数、MIN函数和COUNT函数的参数为常数和/或所述派生表的列。进一步的,根据所述内层分组子句转换所述查询语句包括:若所述派生表中存在不是外层分组项且不是外层集函数的参数的查询项,则删除所述派生表的查询项。进一步的,删除所述派生表的查询项之后,还包括:新建内层派生表,所述内层派生表包括:包含内层集函数和内层分组子句的内层查询语句,根据外层分组子句构建所述内层查询语句,根据外层集函数构建内层集函数;根据所述内层派生表构建中间层派生表;根据所述中间层派生表转换所述查询语句。进一步的,还包括:若外层集函数为COUNT函数,且COUNT函数的参数为所述派生表的列,则将所述COUNT函数转换为SUM函数,参数不变;若外层集函数为COUNT函数,且COUNT函数的参数为常数,则将所述COUNT函数转换为SUM函数,参数转换为TMPCOL。第二方面,本专利技术实施例还提供了一种数据库语句优化装置,该装置包括:获取模块,用于获取用户输入的查询语句;构建模块,用于若所述查询语句包括外层分组子句和表单子句,则根据所述外层分组子句构建内层分组子句,其中,所述表单子句的表单项为派生表且不包括分组子句;转换模块,用于根据所述内层分组子句转换所述查询语句。第三方面,本专利技术实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本专利技术实施例中任一所述的数据库语句优化方法。第四方面,本专利技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本专利技术实施例中任一所述的数据库语句优化方法。本专利技术实施例通过获取用户输入的查询语句;若所述查询语句包括外层分组子句和表单子句,则根据所述外层分组子句构建内层分组子句,其中,所述表单子句的表单项为派生表且不包括分组子句;根据所述内层分组子句转换所述查询语句,能够提高数据库语句的执行效率。附图说明为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本专利技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。图1是本专利技术实施例一中的一种数据库语句优化方法的流程图;图2是本专利技术实施例二中的一种数据库语句优化方法的流程图;图3是本专利技术实施例三中的一种数据库语句优化装置的结构示意图;图4是本专利技术实施例四中的一种计算机设备的结构示意图。具体实施方式下面结合附图和实施例对本专利技术作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本专利技术,而非对本专利技术的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本专利技术相关的部分而非全部结构。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本专利技术的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。实施例一图1为本专利技术实施例一提供的一种数据库语句优化方法的流程图,本实施例可适用于数据库语句优化的情况,该方法可以由本专利技术实施例中的数据库语句优化装置来执行,该装置可采用软件和/或硬件的方式实现,如图1所示,该方法具体包括如下步骤:S110,获取用户输入的查询语句。其中,所述用户输入的查询语句的获取方式可以为实时获取用户输入的查询语句,也可以为间隔预设时间获取用户输入的查询语句,或者可以为周期性获取用户输入的查询语句,本专利技术实施例对此不进行限制。其中,所述查询语句为数据库SQL语句。具体的,获取用户输入的查询语句,例如可以是,获取用户输入的查询语句:SELECTMAX(D1),D2FROM(SELECTC1ASD1,FUNC(C2)ASD2,C3ASD3FROMT)GROUPBYD2。S120,若查询语句包括外层分组子句和表单子句,则根据外层分组子句构建内层分组子句,其中,表单子句的表单项为派生表且不包括分组子句。其中,所述外层分组子句为表单子句外的GROUPBY子句,例如可以是,若查询语句为SELECTMAX(D1),D2FROM(SELECTC1ASD1,FUNC(C2)ASD2,C3ASD3FROMT)GROUPBYD2,则其中GROUPBYD2为外层分组子句,GRO本文档来自技高网
...

【技术保护点】
1.一种数据库语句优化方法,其特征在于,包括:获取用户输入的查询语句;若所述查询语句包括外层分组子句和表单子句,则根据所述外层分组子句构建内层分组子句,其中,所述表单子句的表单项为派生表且不包括分组子句;根据所述内层分组子句转换所述查询语句。

【技术特征摘要】
1.一种数据库语句优化方法,其特征在于,包括:获取用户输入的查询语句;若所述查询语句包括外层分组子句和表单子句,则根据所述外层分组子句构建内层分组子句,其中,所述表单子句的表单项为派生表且不包括分组子句;根据所述内层分组子句转换所述查询语句。2.根据权利要求1所述的方法,其特征在于,外层分组项中包括所述派生表的列。3.根据权利要求1所述的方法,其特征在于,根据所述内层分组子句转换所述查询语句包括:若所述派生表中存在不是外层分组项的查询项,则删除所述派生表的查询项。4.根据权利要求3所述的方法,其特征在于,删除所述派生表的查询项之后,还包括:新建内层派生表,所述内层派生表包括:包含内层分组子句的内层查询语句,根据外层分组子句构建所述内层查询语句;根据所述内层派生表构建中间层派生表;根据所述中间层派生表转换所述查询语句。5.根据权利要求1所述的方法,其特征在于,所述查询语句还包括外层集函数,其中,所述外层集函数包括MAX函数、MIN函数、COUNT函数以及SUM函数中的至少一种,且所述SUM函数的参数为所述派生表的列,所述MAX函数、MIN函数和COUNT函数的参数为常数和/或所述派生表的列。6.根据权利要求5所述的方法,其特征在于,根据所述内层分组子句转换所述查询语句包括:若所述派生表中存在不是外层分组项且不是外层集函数的参数的查询项,则删除所述派生表的...

【专利技术属性】
技术研发人员:万伟朱仲颖
申请(专利权)人:上海达梦数据库有限公司
类型:发明
国别省市:上海,31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1