处理数据库查询语句的方法和装置制造方法及图纸

技术编号:33502306 阅读:16 留言:0更新日期:2022-05-19 01:12
本公开披露了一种处理数据库查询语句的方法和装置。该方法包括:接收第一数据库查询语句,第一数据库查询语句包括FROM子句中的第一视图,以及第一视图与第一数据表的连接操作,该第一视图中封装有第一窗口函数;根据第一数据库查询语句生成第二数据库查询语句,第二数据库查询语句与第一数据库查询语句等价,第二数据库查询语句包括FROM子句中的第二视图,第二视图中封装有第一窗口函数,以及第一数据表与第二数据表的连接操作,该第二数据表为第一视图对应的数据表。为第一视图对应的数据表。为第一视图对应的数据表。

【技术实现步骤摘要】
处理数据库查询语句的方法和装置


[0001]本公开涉及数据库
,并且更为具体地,涉及一种处理数据库查询语句的方法和装置。

技术介绍

[0002]数据库查询中经常会用到连接操作和窗口函数等查询语句以进行业务分析。某些场景中,如果数据库查询语句中的窗口函数位于该数据库查询语句的FROM子句中,那么查询优化器会先执行窗口函数、再执行连接操作,导致数据库查询语句的执行效率较低。

技术实现思路

[0003]有鉴于此,本公开提供一种处理数据库查询语句的方法和装置,以提升数据库查询语句的执行效率。
[0004]第一方面,提供一种处理数据库查询语句的方法,包括:接收第一数据库查询语句,所述第一数据库查询语句包括FROM子句中的第一视图,以及所述第一视图与第一数据表的连接操作,所述第一视图中封装有第一窗口函数;根据所述第一数据库查询语句生成第二数据库查询语句,所述第二数据库查询语句与所述第一数据库查询语句等价,所述第二数据库查询语句包括FROM子句中的第二视图,所述第二视图中封装有所述第一窗口函数,以及所述第一数据表与第二数据表的连接操作,所述第二数据表为所述第一视图对应的数据表。
[0005]可选地,所述根据所述第一数据库查询语句生成第二数据库查询语句,包括:判断所述第一视图与所述第一数据表的连接操作能否下推到所述第一视图的内部;如果所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部,则根据所述第一数据库查询语句,将所述第一视图与所述第一数据表的连接操作下推到所述第一视图的内部,得到所述第二数据库查询语句。
[0006]可选地,所述判断所述第一视图与所述第一数据表的连接操作能否下推到所述第一视图的内部,包括:判断所述第一视图与所述第一数据表是否满足第一条件,在满足所述第一条件的情况下,则认为所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部;其中,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段。
[0007]可选地,所述方法还包括:检查第一连接条件中关于所述第一数据表的表达式是否满足唯一性,其中,所述第一连接条件为所述第一视图和所述第一数据表的连接操作对应的连接条件;如果关于所述第一数据表的表达式不满足唯一性,在所述第一窗口函数的分组字段中添加所述第一数据表的唯一键。
[0008]可选地,在所述检查第一连接条件中的关于所述第一数据表的表达式是否满足唯一性之后,所述方法还包括:如果关于所述第一数据表的表达式不满足唯一性,计算所述第
二数据库查询语句的执行代价,以确定是否生成所述第二数据库查询语句。
[0009]可选地,在所述根据所述第一数据库查询语句生成第二数据库查询语句之前,所述方法还包括:检查所述第一视图的合法性;所述根据所述第一数据库查询语句生成第二数据库查询语句,包括:在所述第一视图合法的情况下,根据所述第一数据库查询语句生成所述第二数据库查询语句。
[0010]可选地,在所述第一视图中还封装有第二窗口函数的情况下,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段和所述第二窗口函数中的分组字段的交集。
[0011]可选地,第二视图中还封装有仅关于所述第一数据表的过滤条件。
[0012]第二方面,提供一种处理数据库查询语句的装置,包括:接收模块,用于接收第一数据库查询语句,所述第一数据库查询语句包括FROM子句中的第一视图,以及所述第一视图与第一数据表的连接操作,所述第一视图中封装有第一窗口函数;生成模块,用于根据所述第一数据库查询语句生成第二数据库查询语句,所述第二数据库查询语句与所述第一数据库查询语句等价,所述第二数据库查询语句包括FROM子句中的第二视图,所述第二视图中封装有所述第一窗口函数,以及所述第一数据表与第二数据表的连接操作,所述第二数据表为所述第一视图对应的数据表。
[0013]可选地,生成模块进一步包括:判断模块,用于判断所述第一视图与所述第一数据表的连接操作能否下推到所述第一视图的内部;下推模块,用于如果所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部,则根据所述第一数据库查询语句,将所述第一视图与所述第一数据表的连接操作下推到所述第一视图的内部,得到所述第二数据库查询语句。
[0014]可选地,判断模块进一步用于:判断所述第一视图与所述第一数据表是否满足第一条件,在满足所述第一条件的情况下,则认为所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部;其中,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段。
[0015]可选地,所述装置还包括:第一检查模块,用于检查第一连接条件中关于所述第一数据表的表达式是否满足唯一性,其中,所述第一连接条件为所述第一视图和所述第一数据表的连接操作对应的连接条件;添加模块,用于如果关于所述第一数据表的表达式不满足唯一性,在所述第一窗口函数的分组字段中添加所述第一数据表的唯一键。
[0016]可选地,所述装置还包括:计算模块,用于如果关于所述第一数据表的表达式不满足唯一性,计算所述第二数据库查询语句的执行代价,以确定是否生成所述第二数据库查询语句。
[0017]可选地,所述装置还包括:第二检查模块,用于检查所述第一视图的合法性;所述生成模块进一步用于在所述第一视图合法的情况下,根据所述第一数据库查询语句生成所述第二数据库查询语句。
[0018]可选地,在所述第一视图中还封装有第二窗口函数的情况下,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所
述第一视图的表达式依赖于所述第一窗口函数中的分组字段和所述第二窗口函数中的分组字段的交集。
[0019]可选地,第二视图中还封装有仅关于所述第一数据表的过滤条件。
[0020]第三方面,提供一种处理数据库查询语句的装置,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器被配置为执行所述可执行代码,以实现如第一方面所述的方法中的部分或全部步骤。
[0021]第四方面,提供一种计算机可读存储介质,其上存储有可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法中的部分或全部步骤。
[0022]第五方面,提供一种计算机程序产品,包括可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法中的部分或全部步骤。
[0023]在第一数据库查询语句中,当第一窗口函数的执行次序早于连接操作时,本公开实施例通过对第一数据库查询语句进行改写,生成与之等价的第二数据库查询语句,使得第二数据库查询语句中的连接操作的执行次序早于第一窗口函数,从而提升了第一数据库查询语句本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种处理数据库查询语句的方法,包括:接收第一数据库查询语句,所述第一数据库查询语句包括FROM子句中的第一视图,以及所述第一视图与第一数据表的连接操作,所述第一视图中封装有第一窗口函数;根据所述第一数据库查询语句生成第二数据库查询语句,所述第二数据库查询语句与所述第一数据库查询语句等价,所述第二数据库查询语句包括FROM子句中的第二视图,所述第二视图中封装有所述第一窗口函数,以及所述第一数据表与第二数据表的连接操作,所述第二数据表为所述第一视图对应的数据表。2.根据权利要求1所述的方法,所述根据所述第一数据库查询语句生成第二数据库查询语句,包括:判断所述第一视图与所述第一数据表的连接操作能否下推到所述第一视图的内部;如果所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部,则根据所述第一数据库查询语句,将所述第一视图与所述第一数据表的连接操作下推到所述第一视图的内部,得到所述第二数据库查询语句。3.根据权利要求2所述的方法,所述判断所述第一视图与所述第一数据表的连接操作能否下推到所述第一视图的内部,包括:判断所述第一视图与所述第一数据表是否满足第一条件,在满足所述第一条件的情况下,则认为所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部;其中,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段。4.根据权利要求1所述的方法,所述方法还包括:检查第一连接条件中的关于所述第一数据表的表达式是否满足唯一性,其中,所述第一连接条件为所述第一视图和所述第一数据表的连接操作对应的连接条件;如果关于所述第一数据表的表达式不满足唯一性,在所述第一窗口函数的分组字段中添加所述第一数据表的唯一键。5.根据权利要求4所述的方法,在所述检查第一连接条件中的关于所述第一数据表的表达式是否满足唯一性之后,所述方法还包括:如果关于所述第一数据表的表达式不满足唯一性,计算所述第二数据库查询语句的执行代价,以确定是否生成所述第二数据库查询语句。6.根据权利要求1所述的方法,在所述根据所述第一数据库查询语句生成第二数据库查询语句之前,所述方法还包括:检查所述第一视图的合法性;所述根据所述第一数据库查询语句生成第二数据库查询语句,包括:在所述第一视图合法的情况下,根据所述第一数据库查询语句生成所述第二数据库查询语句。7.根据权利要求3所述的方法,在所述第一视图中还封装有第二窗口函数的情况下,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段和所述第二窗口函数中的分组字段的交集。
8.根据权利要求1所述的方法,所述第二视图中还封装有仅关于所述第一数据表的过滤条件。9.一种处理数据库查询语句的装置,包括:...

【专利技术属性】
技术研发人员:施文俊朱涛
申请(专利权)人:北京奥星贝斯科技有限公司
类型:发明
国别省市:

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

1