CN114490724B - 处理数据库查询语句的方法和装置 - Google Patents

处理数据库查询语句的方法和装置 Download PDF

Info

Publication number
CN114490724B
CN114490724B CN202210392238.8A CN202210392238A CN114490724B CN 114490724 B CN114490724 B CN 114490724B CN 202210392238 A CN202210392238 A CN 202210392238A CN 114490724 B CN114490724 B CN 114490724B
Authority
CN
China
Prior art keywords
view
data table
database query
query statement
condition
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210392238.8A
Other languages
English (en)
Other versions
CN114490724A (zh
Inventor
施文俊
朱涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Oceanbase Technology Co Ltd
Original Assignee
Beijing Oceanbase Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Oceanbase Technology Co Ltd filed Critical Beijing Oceanbase Technology Co Ltd
Priority to CN202210392238.8A priority Critical patent/CN114490724B/zh
Publication of CN114490724A publication Critical patent/CN114490724A/zh
Application granted granted Critical
Publication of CN114490724B publication Critical patent/CN114490724B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2452Query translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开披露了一种处理数据库查询语句的方法和装置。该方法包括:接收第一数据库查询语句,第一数据库查询语句包括FROM子句中的第一视图,以及第一视图与第一数据表的连接操作,该第一视图中封装有第一窗口函数;根据第一数据库查询语句生成第二数据库查询语句,第二数据库查询语句与第一数据库查询语句等价,第二数据库查询语句包括FROM子句中的第二视图,第二视图中封装有第一窗口函数,以及第一数据表与第二数据表的连接操作,该第二数据表为第一视图对应的数据表。

Description

处理数据库查询语句的方法和装置
技术领域
本公开涉及数据库技术领域,并且更为具体地,涉及一种处理数据库查询语句的方法和装置。
背景技术
数据库查询中经常会用到连接操作和窗口函数等查询语句以进行业务分析。某些场景中,如果数据库查询语句中的窗口函数位于该数据库查询语句的FROM子句中,那么查询优化器会先执行窗口函数、再执行连接操作,导致数据库查询语句的执行效率较低。
发明内容
有鉴于此,本公开提供一种处理数据库查询语句的方法和装置,以提升数据库查询语句的执行效率。
第一方面,提供一种处理数据库查询语句的方法,包括:接收第一数据库查询语句,所述第一数据库查询语句包括FROM子句中的第一视图,以及所述第一视图与第一数据表的连接操作,所述第一视图中封装有第一窗口函数;根据所述第一数据库查询语句生成第二数据库查询语句,所述第二数据库查询语句与所述第一数据库查询语句等价,所述第二数据库查询语句包括FROM子句中的第二视图,所述第二视图中封装有所述第一窗口函数,以及所述第一数据表与第二数据表的连接操作,所述第二数据表为所述第一视图对应的数据表。
可选地,所述根据所述第一数据库查询语句生成第二数据库查询语句,包括:判断所述第一视图与所述第一数据表的连接操作能否下推到所述第一视图的内部;如果所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部,则根据所述第一数据库查询语句,将所述第一视图与所述第一数据表的连接操作下推到所述第一视图的内部,得到所述第二数据库查询语句。
可选地,所述判断所述第一视图与所述第一数据表的连接操作能否下推到所述第一视图的内部,包括:判断所述第一视图与所述第一数据表是否满足第一条件,在满足所述第一条件的情况下,则认为所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部;其中,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段。
可选地,所述方法还包括:检查第一连接条件中关于所述第一数据表的表达式是否满足唯一性,其中,所述第一连接条件为所述第一视图和所述第一数据表的连接操作对应的连接条件;如果关于所述第一数据表的表达式不满足唯一性,在所述第一窗口函数的分组字段中添加所述第一数据表的唯一键。
可选地,在所述检查第一连接条件中的关于所述第一数据表的表达式是否满足唯一性之后,所述方法还包括:如果关于所述第一数据表的表达式不满足唯一性,计算所述第二数据库查询语句的执行代价,以确定是否生成所述第二数据库查询语句。
可选地,在所述根据所述第一数据库查询语句生成第二数据库查询语句之前,所述方法还包括:检查所述第一视图的合法性;所述根据所述第一数据库查询语句生成第二数据库查询语句,包括:在所述第一视图合法的情况下,根据所述第一数据库查询语句生成所述第二数据库查询语句。
可选地,在所述第一视图中还封装有第二窗口函数的情况下,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段和所述第二窗口函数中的分组字段的交集。
可选地,第二视图中还封装有仅关于所述第一数据表的过滤条件。
第二方面,提供一种处理数据库查询语句的装置,包括:接收模块,用于接收第一数据库查询语句,所述第一数据库查询语句包括FROM子句中的第一视图,以及所述第一视图与第一数据表的连接操作,所述第一视图中封装有第一窗口函数;生成模块,用于根据所述第一数据库查询语句生成第二数据库查询语句,所述第二数据库查询语句与所述第一数据库查询语句等价,所述第二数据库查询语句包括FROM子句中的第二视图,所述第二视图中封装有所述第一窗口函数,以及所述第一数据表与第二数据表的连接操作,所述第二数据表为所述第一视图对应的数据表。
可选地,生成模块进一步包括:判断模块,用于判断所述第一视图与所述第一数据表的连接操作能否下推到所述第一视图的内部;下推模块,用于如果所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部,则根据所述第一数据库查询语句,将所述第一视图与所述第一数据表的连接操作下推到所述第一视图的内部,得到所述第二数据库查询语句。
可选地,判断模块进一步用于:判断所述第一视图与所述第一数据表是否满足第一条件,在满足所述第一条件的情况下,则认为所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部;其中,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段。
可选地,所述装置还包括:第一检查模块,用于检查第一连接条件中关于所述第一数据表的表达式是否满足唯一性,其中,所述第一连接条件为所述第一视图和所述第一数据表的连接操作对应的连接条件;添加模块,用于如果关于所述第一数据表的表达式不满足唯一性,在所述第一窗口函数的分组字段中添加所述第一数据表的唯一键。
可选地,所述装置还包括:计算模块,用于如果关于所述第一数据表的表达式不满足唯一性,计算所述第二数据库查询语句的执行代价,以确定是否生成所述第二数据库查询语句。
可选地,所述装置还包括:第二检查模块,用于检查所述第一视图的合法性;所述生成模块进一步用于在所述第一视图合法的情况下,根据所述第一数据库查询语句生成所述第二数据库查询语句。
可选地,在所述第一视图中还封装有第二窗口函数的情况下,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段和所述第二窗口函数中的分组字段的交集。
可选地,第二视图中还封装有仅关于所述第一数据表的过滤条件。
第三方面,提供一种处理数据库查询语句的装置,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器被配置为执行所述可执行代码,以实现如第一方面所述的方法中的部分或全部步骤。
第四方面,提供一种计算机可读存储介质,其上存储有可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法中的部分或全部步骤。
第五方面,提供一种计算机程序产品,包括可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法中的部分或全部步骤。
在第一数据库查询语句中,当第一窗口函数的执行次序早于连接操作时,本公开实施例通过对第一数据库查询语句进行改写,生成与之等价的第二数据库查询语句,使得第二数据库查询语句中的连接操作的执行次序早于第一窗口函数,从而提升了第一数据库查询语句的执行效率。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对本公开实施例中所需要使用的附图进行说明。
图1为本公开一实施例提供的处理数据库查询语句的方法的流程示意图。
图2为本公开实施例提供的步骤S120的一种可能的实现方式的流程示意图。
图3为本公开另一实施例提供的处理数据库查询语句的方法的流程示意图。
图4为本公开又一实施例提供的处理数据库查询语句的方法的流程示意图。
图5为本公开又一实施例提供的处理数据库查询语句的方法的流程示意图。
图6为本公开一实施例提供的处理数据库查询语句的装置的结构示意图。
图7为本公开另一实施例提供的处理数据库查询语句的装置的结构示意图。
具体实施方式
下面对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本公开一部分实施例,而不是全部的实施例。
为了便于理解,先对本公开实施例涉及的一些相关技术知识进行介绍。以下相关技术作为可选方案与本公开实施例的技术方案可以进行任意结合,其均属于本公开实施例的保护范围。本公开实施例包括以下内容中的至少部分内容。
连接操作
在关系型数据库中,数据库查询语句(例如,结构化查询语言(structured querylanguage,SQL)语句)经常包含连接操作(JOIN)。基于连接操作,可以将两个或多个数据表(或视图)按照连接条件进行合并,形成新的结果集。基于连接操作形成的结果集,可以实现例如查询、增加、删除、更改等数据库操作。
连接操作的语法格式中包含连接类型和连接条件。以SQL语句为例,连接操作的SQL语法格式可以表示为:数据表1 <连接类型> JOIN 数据表2 <连接条件>,其中,数据表也可以是视图。
数据库可以支持多种类型的连接操作,例如,内连接(INNER JOIN)、外连接(OUTERJOIN)或交叉连接(CROSS JOIN)等。不同的连接操作还可以再进行细分,例如内连接还可以包括等值连接、非等值连接、自然连接等;外连接操作还可以包括左连接、右连接、全连接等。
连接操作的连接条件可以包括多种,常见的连接条件可以分为等值连接条件(即,连接条件中的关系是等值关系,如T1.C1=T2.C2)或非等值连接条件。在一些实施例中,连接条件可以是简单条件,也可以是复合条件。所谓复合条件,可以理解为是多个简单条件的组合,例如,可以采用“和(AND)”、“或(OR)”等逻辑关系将多个简单条件进行组合,形成复合条件。
需要说明的是,连接操作的对象为两个,例如两个数据表,两个视图、一个数据表和一个视图等。下面以多个数据表需要连接为例,对有多个对象需要连接的情况进行说明。在需要连接多个数据表的情况下,可以先对其中两个数据表进行连接,再将形成的结果集和第三个数据表进行连接,以此类推。基于此,在一些实施例中,连接操作也可以称为多表连接。为了简化描述,后文的连接操作均以两个对象之间的连接为例。
应该理解,由于连接操作可以根据连接条件以及过滤条件对数据表进行过滤,筛选出有用的结果集,因此,在某些场景中,连接操作具有较强的数据过滤性,连接之后的中间结果集数据量相对较小。
窗口函数
数据库查询语句可以支持窗口函数(WINDOW FUNCTION),以用于对数据库中的数据进行实时分析处理。在一些实施例中,窗口函数也可以称为联机分析处理(onlineanalytical processing,OLAP)函数。以SQL语句为例,窗口函数的SQL语法格式可以表示为:<窗口函数名称> OVER (PARTITION BY <分组字段> ORDER BY <排序字段>,其中,PARTITION BY为表示分组功能的关键字,用于根据其后面的<分组字段>进行分组,ORDERBY为表示排序功能的关键字,用于根据其后面的<排序字段>进行排序。示例性地,<分组字段>和<排序字段>可以是数据表或视图中的列名,以用于根据该列名进行分组或排序。<窗口函数名称>可以包括专用的窗口函数或聚合函数,作为一个示例,<窗口函数名称>可以为RANK、DENSE_RANK等专用的窗口函数,也可以是SUM、COUNT、MAX、MIN等聚合函数。
在一些实施例中,窗口函数可以用于对数据库查询语句中的JOIN、WHERE或GROUPBY等子句处理后的结果进行进一步操作,因此,一般情况下,窗口函数写在SELECT子句中。作为一个具体示例,窗口函数的SQL语句可以表示为:
SELECT *,
RANK() OVER (PARTITION BY <分组字段>
ORDER BY <排序字段>) AS RANKING
FROM <表名>;
需要说明的是,使用窗口函数进行数据库查询时,可以在不减少原表的行数的情况下,同时实现分组(PARTITION BY)和排序(ORDER BY)的功能。
视图
视图(VIEW)可以理解为是基于数据库查询语句的结果集的可视化的表。视图包含行和列,视图中的字段就是来自一个或多个数据库中的真实的表中的字段。在一些实施例中,视图中可以包含SQL函数(如窗口函数)、WHERE语句以及连接(JOIN)语句等。
视图的类型可以有多种,例如标准视图、内联视图、物化视图等。其中,内联视图可以理解为SQL语句的FROM子句中的子查询。应该理解,在FROM子句中,可以指定要查询数据的数据表,除了数据表之外,还可以是视图(子查询)。由于内联视图可以替换查询中的表,因此,在一些实施例中,内联视图也可以称为派生表。
数据库查询语句中经常会用到连接操作和窗口函数等查询语句,以实现业务分析(例如,分析型的查询等)。当数据库查询语句中同时包括多种不同的操作(例如,同时包括连接操作和窗口函数)时,不同的执行次序会产生不同的中间结果集。在查询优化的过程中,尽可能地减少中间结果集的数据量通常可以大大降低查询的影响时间。以连接操作和窗口函数的执行次序为例,窗口函数并不会减少原表的行数,而连接操作根据连接条件以及过滤条件的不同,可以产生不同的结果集。基于此,一个更好的查询计划应该优先执行连接操作,然后再执行窗口函数。
一般情况下,当数据库查询语句中同时包含连接操作和窗口函数时,连接操作的执行次序是在窗口函数之前的,这是因为连接操作一般是位于FROM子句中,而窗口函数一般位于SELECT子句中,查询优化器在执行数据库查询语句时,会优先执行FROM子句,以组装来自不同数据源的数据。以下面的SQL1语句为例:
SELECT *,
RANK() OVER (PARTITION BY T1.C1
ORDER BY T1.C2) AS RANKING
FROM T1, T2
WHERE T1.C1=T2.C3;
在执行SQL1语句时,执行顺序为:先基于连接条件(T1.C1=T2.C3)进行T1和T2之间的连接操作;基于该连接操作的结果集再执行窗口函数(SQL1语句中为RANK函数)。
然而,某些场景中,如果数据库查询语句中的窗口函数位于该数据库查询语句的FROM子句(即,窗口函数位于FROM子句的视图,或称,位于FROM子查询)中,那么查询优化器仅能按照先执行窗口函数、再执行连接操作的次序进行处理。如前文所述,窗口函数并不会减少原表的行数,这种情况下,先执行窗口函数、再执行连接操作会导致窗口函数扫描时的工作量较大,进而导致数据库查询语句的执行效率较低。以下面的SQL2语句为例:
SELECT *
FROM T0, T1, T2,
(SELECT MAX (C1) OVER (PARTITION BY (C2, C3)), C2, C3
FROM T3) VIEW1
WHERE T1.UNIQUE=T2.C1
AND T1.UNIQUE=VIEW1.C2
AND T1.C2=5
AND T0.C1=T2.C3;
在SQL2语句中,(SELECT MAX (C1) OVER (PARTITION BY (C2, C3)), C2, C3FROM T3) VIEW1为一个内联视图(也可以称为,是FROM子查询),窗口函数MAX (C1) OVER(PARTITION BY (C2, C3))位于该内联视图中。因此,查询优化器在执行SQL2语句时,会优先执行该窗口函数MAX (C1) OVER (PARTITION BY (C2,C3)),再执行该窗口函数对应的内联视图VIEW1与数据表T0,T1,T2之间的连接操作。
为了解决上述问题,本公开实施例提供一种处理数据库查询语句的方法和装置,以提升数据库查询语句的执行效率。
下面结合附图,对本公开实施例的技术方案进行详细描述。
图1为本公开一实施例提供的处理数据库查询语句的方法的流程示意图。图1所示的方法可以由数据库中的查询优化器执行。该数据库可以是普通数据库,也可以是分布式数据库。该数据库的用户可以通过数据库查询语句对数据库进行操作,例如数据库查询等。这里提及的数据库查询语句例如可以是SQL语句。该数据库中可以存储有一个或多个数据表。如图1所示,该方法可以包括步骤S110和步骤S120。下面对这些步骤进行详细描述。
在步骤S110,接收第一数据库查询语句。第一数据库查询语句包括FROM子句中的第一视图,以及第一视图与第一数据表的连接操作,第一视图中封装有第一窗口函数。
第一数据库查询语句可以用于进行数据库查询,例如可以是SQL语句。本公开实施例中,第一数据查询语句的组成部分可以包括多个(即,第一数据库查询语句可以包括多个子句),例如,第一数据库查询语句可以包括SELECT-FROM-WHERE子句。
第一数据库查询语句的FROM子句中包括第一视图,第一视图可以理解为第一数据库查询语句的FROM子句中的子查询,第一视图例如可以是内联视图。该第一视图中封装有第一窗口函数,第一窗口函数可以用于求和(SUM)、平均(AVG)、最大值(MAX)、最小值(MIN)等聚合函数的查询计算,也可以用于排序(RANK)等专用的窗口函数的统计分析计算等。在一些实施例中,第一数据库查询语句的FROM子句中可以包括多个视图,这种情况下,第一视图可以是指多个视图中的任意一个。
第一数据库查询语句还包括第一视图和第一数据表的连接操作。第一数据库查询语句包括第一视图和第一数据表的连接操作,可以是指,包括第一视图和第一数据表的连接类型(下称,第一连接类型)和连接条件(下称,第一连接条件)。本公开实施例对第一连接类型不做具体限定,第一连接类型可以为内连接、外连接或交叉连接等。进一步地,第一连接类型为内连接时,还可以是等值连接、非等值连接、自然连接等;或者,第一连接类型为外连接时,还可以是左连接、右连接、全连接等。本公开实施例对第一连接条件也不做具体限定,示例性地,第一连接条件可以为等值连接条件,或者也可以为简单条件。
在一些实施例中,当第一视图和多个数据表之间存在连接条件时,第一数据表可以是指该多个数据表中的任意一个。例如,第一视图和表T1、T2均存在等值连接条件,那么第一数据表可以是指T1,也可以是指T2,本公开对此并不限定。
在一些实施例中,第一数据库查询语句可以是经过查询优化器处理后的数据库查询语句。例如,用户输入的数据库查询语句中,WHERE子句中包含有窗口函数,查询优化器在进行优化时,可以先将该窗口函数提取到FROM子句中的视图内部。这种情况下,提取后得到的数据库查询语句即可以是本公开实施例所提及的第一数据库查询语句。
查询优化器接收第一数据库查询语句后,在不进行优化处理的情况下,查询优化器会优先执行第一视图中的第一窗口函数,然后基于第一窗口函数的执行结果,执行第一视图和第一数据表的连接操作。
以前文的SQL2语句为第一数据库查询语句为例,在SQL2语句中,第一数据库查询语句中的FROM子句中包括第一视图VIEW1,该第一视图VIEW1为FROM子查询(SELECT MAX(C1) OVER(PARTITION BY(C2,C3)), C2,C3 FROM T3) VIEW1),且该第一视图VIEW1中包括第一窗口函数MAX (C1) OVER (PARTITION BY (C2,C3)),其中,第一窗口函数为MAX聚合函数。此外,在SQL2语句中,还包括第一视图VIEW1和第一数据表T1的连接操作,该连接操作的连接条件为T1.UNIQUE=VIEW1.C2,连接类型为内连接。需要说明的是,在第一视图VIEW1中,由于查询语句仅针对表T3,为了简洁,在查询语句中省略了表名,在一些实施例中,也可以采用完整的表达方式,例如,第一视图VIEW1还可以表示为:
SELECT MAX (T3.C1) OVER (PARTITION BY(T3.C2, T3.C3)), T3.C2, T3.C3FROM T3) VIEW1。
在步骤S120,根据第一数据库查询语句生成第二数据库查询语句。在本公开实施例中,当查询优化器接收第一数据库查询语句后,会对该第一数据库查询语句进行优化处理,生成第二数据库查询语句,生成的第二数据库查询语句与处理之前的第一数据库查询语句是等价的。
具体地,生成的第二数据库查询语句中包括FROM子句中的第二视图。第二视图中包括第一数据库查询语句中的第一窗口函数。第二视图中还包括第一数据表与第二数据表的连接操作,其中,第二数据表为第一视图对应的数据表。应该理解,第二数据表为第一视图对应的数据表可以是指,第一视图中的查询语句是针对第二数据表的,即第二数据表为第一视图中的表。作为一个示例,第一视图为(SELECT MAX (C1) OVER (PARTITION BY(C2, C3)), C2, C3 FROM T3) VIEW1),该第一视图中的查询是针对表T3进行的,则第二数据表为T3。
第二视图中包括第一数据表和第二数据表的连接操作,可以是指,第二视图中包括第一数据表和第二数据表的连接类型(下称,第二连接类型)以及连接条件(下称,第二连接条件)。本公开实施例对第二连接类型和第二连接条件的具体内容不做限定,例如,第二连接类型为内连接,第二连接条件为等值连接条件等。
需要说明的是,在本公开实施例中,第一连接类型和第二连接类型可以相同,例如均为内连接;第一连接条件与第二连接条件等价。
在一些实施例中,当第一数据库查询语句中还包括仅关于第一数据表的过滤条件时,根据该第一数据库查询语句生成的第二数据库查询语句中,第二视图中还可以包括(封装有)仅关于第一数据表的过滤条件。作为一个示例,前文的SQL2语句中,根据SQL2语句生成第二数据库查询语句后,第二视图中还可以包括过滤条件:T1.C2=5。
在一些实施例中,按照步骤S120生成第二数据库查询语句后,如果第二数据库查询语句还包括第二视图与其他数据表的连接操作,可以以第二数据库查询语句为基础,重复步骤S110-S120,生成新的数据库查询语句。
下面以SQL2语句为第一数据库查询语句为例,给出生成的第二数据库查询语句的一个示例。对SQL2语句进行优化后,生成的第二数据库查询语句SQL3语句可以为:
SELECT *
FROM T0,T2,
(SELECT MAX (T3.C1) OVER (PARTITION BY (T3.C2, T3.C3)), T3.C2,
T3.C3, T1.*
FROM T3, T1
WHERE T3.C2=T1.UNIQUE AND T1.C2=5) VIEW2
WHERE VIEW2.T1.UNIQUE=T2.C1 AND T0.C1=T2.C3;
其中,(SELECT MAX (T3.C1) OVER (PARTITION BY (T3.C2, T3.C3)), T3.C2,T3.C3, T1.*
FROM T3, T1
WHERE T3.C2=T1.UNIQUE AND T1.C2=5) VIEW2为第二视图,该第二视图中包括第一窗口函数MAX (T3.C1) OVER (PARTITION BY (T3.C2, T3.C3)),以及第一数据表T1和第二数据表T3的连接操作。可以看出,在该SQL3语句中,第二视图还包括仅关于第一数据表T1的过滤条件T1.C2=5。此时经过T3和T1连接之后,行数相比T3将减少(过滤的行数取决于连接条件以及过滤条件的过滤性)。这时,连接的计算不变,但是第一窗口函数的计算量将大大降低。
本公开实施例通过对第一数据库查询语句进行改写,生成与之等价的第二数据库查询语句,使得第二数据库查询语句中的连接操作的执行次序早于第一窗口函数(即,对连接操作和窗口函数的执行次序进行交换),使得查询优化器可以生成更好的执行计划,从而可以提升第一数据库查询语句的执行效率。
图2为步骤S120的一种可能的实现方式的示意性流程图。如图2所示,该方法可以包括步骤S122和步骤S124。下面结合图2,对步骤S120中根据第一数据库查询语句生成第二数据库查询语句的具体实现过程进行描述。
在步骤S122,判断第一视图与第一数据表的连接操作能否下推(或称,下压)到第一视图的内部。
作为一种实现方式,可以根据第一条件来判断第一视图与第一数据表的连接能否下推到第一视图的内部。换句话说,判断第一视图与第一数据表是否满足第一条件,在满足第一条件的情况下,可以认为第一视图与第一数据表的连接操作能下推到第一视图的内部。
其中,第一条件包括:第一视图与第一数据表之间存在等值连接条件,且该等值连接条件中的关于第一视图的表达式依赖于第一窗口函数中的分组字段。换句话说,当第一视图与第一数据表之间存在等值连接条件E1=E2(E1为关于第一视图的表达式,E2为第一数据表的表达式),且E1依赖于第一窗口函数中的PARTITION BY中的表达式时,可以认为第一视图与第一数据表的连接操作能下推到第一视图的内部。作为一个具体示例,第一窗口函数以表T3的C2列和C3列进行分组,则E1的表达式应该为依赖于C2列和/或C3列相关的表达式。
需要说明的是,关于第一视图的表达式依赖于第一窗口函数中的分组字段,可以是指,关于第一视图的表达式是与第一窗口函数中的分组字段相关的表达式,例如,关于第一视图的表达式中包括第一窗口函数中的至少一个分组字段。示例性地,当第一窗口函数中只有一个分组字段时,关于第一视图的表达式中包含该分组字段;或者,当第一窗口函数中有多个(两个或两个以上)分组字段时,关于第一视图的表达式至少包含该多个分组字段中的一个。
在一些实施例中,当第一视图中还封装有第二窗口函数(即,第一视图中包含多个窗口函数)的情况下,对第一条件的要求更为严格。具体地,第一条件可以包括:第一视图与第一数据表之间存在等值连接条件,且等值连接条件中的关于第一视图的表达式依赖于第一窗口函数中的分组字段和第二窗口函数中的分组字段的交集。换句话说,当第一视图与第一数据表之间存在等值连接条件E1=E2(E1为关于第一视图的表达式,E2为第一数据表的表达式),且E1同时依赖于第一窗口函数中的PARTITION BY中的表达式和第二窗口函数中的PARTITION BY中的表达式时,可以认为第一视图与第一数据表的连接操作能下推到第一视图的内部。作为一个具体示例,第一窗口函数以表T3的C2列和C3列进行分组,第二窗口函数以表T3的C2列进行分组,则E1的表达式应该为与C2列相关的表达式。
在步骤S124,如果第一视图与第一数据表的连接操作能下推到第一视图的内部,则根据第一数据库查询语句,将第一视图与第一数据表的连接下推到第一视图的内部,得到第二数据库查询语句。
作为一种具体的实现方法,当判断出第一视图与第一数据表的连接操作能下推到第一视图的内部时,可以对第一数据库查询语句进行等价地改写,将FROM子句中的关于第一数据表与第一视图的连接操作(包括连接类型、连接条件等)下推到第一视图的内部,并检查FROM子句中是否包括仅关于第一数据表的过滤条件,如果有的话,将该过滤条件一并下推到第一视图的内部。
以前文的SQL2语句为第一数据库查询语句为例,第一视图VIEW1包括第一窗口函数,且第一视图VIEW1和第一数据表T1满足第一条件(存在等值连接条件T1.UNIQUE=VIEW1.C2,且VIEW1.C2为第一窗口函数中的一个分区列)。此时,可以将表T1下推到第一视图VIEW1中。
图3为本公开另一实施例提供的处理数据库查询语句的方法的流程示意图。如图3所示,该方法可以包括步骤S310至步骤S340。步骤S310和步骤S320分别和前文所述的步骤S110和步骤S120相同,关于步骤S310和步骤S320的描述可以参见前文对步骤S110和步骤S120的描述,此处不再赘述。下面对步骤S330和步骤S340进行详细描述。
在步骤S330,检查第一连接条件中的关于第一数据表的表达式是否满足唯一性。如前文所述,第一连接条件为第一视图和第一数据表的连接操作对应的连接条件,例如,第一连接条件为等值连接条件。
本公开实施例对检查的方式不做具体限定。作为一种实现方式,可以通过判断第一连接条件中关于第一数据表的表达式中是否具有唯一键(unique key)来进行检查。若判断结果为第一连接条件中的关于第一数据表的表达式中具有唯一键,则认为满足唯一性;若判断结果为第一连接条件中的关于第一数据表的表达式中没有唯一键,则认为不满足唯一性。在一些实施例中,唯一键可以是指主键(primary key)。在一些实施例中,唯一键可以是指唯一索引。
本公开实施例对检查的时间不做具体限定。在一些实施例中,可以在生成第二数据库查询语句之前进行检查。在一些实施例中,也可以在生成第二数据库查询语句之后再进行检查。换句话说,本公开实施例对步骤S320和步骤S330的执行顺序不做具体限定。图3的流程示意图并不用于限定本公开实施例先执行步骤S320再执行步骤S330。实际在本公开实施例中,可以先执行步骤S320,再执行步骤S330,也可以先执行步骤S330再执行步骤S320。
在步骤S340,如果关于第一数据表的表达式不满足唯一性,在第一窗口函数的分组字段中添加第一数据表的唯一键,例如可以添加第一数据表的主键作为唯一键。
以前文所示的SQL2语句为例,第一视图VIEW1与第一数据表T1存在第一连接条件T1.UNIQUE=VIEW1.C2,第一连接条件中的关于第一数据表T1的表达式T1.UNIQUE中具有唯一键,则可以认为满足唯一性。
在将T1下推得到SQL3语句之后,可以看出,此时T2和VIEW2也具有了满足的连接条件,因为T1.UNIQUE=T3.C2,可以推出T2.C1=T3.C2。所以可以尝试将表T2下推到VIEW2中。但是,检查第一连接条件中的关于第一数据表T2的表达式是否满足唯一性时,发现第一连接条件中的关于第一数据表T2的表达式T2.C1没有唯一键,则可以认为不满足唯一性。
此时,在不满足唯一性的情况下,在改写第一数据库查询语句SQL3语句的时候,可以在第一视图中添加表T2的唯一键,以生成第二视图。具体地,以SQL3语句作为第一数据库查询语句时,生成的第二数据库查询语句SQL4语句可以表示为:
SELECT *
FROM T0,
(SELECT MAX (T3.C1) OVER (PARTITION BY (T3.C2, T3.C3, T2.PKEY)),
T3.C2, T3.C3, T1.*, T2.*
FROM T3, T1, T2
WHERE T3.C2=T1.UNIQUE AND T1.C2=5 AND T2.C1=T1.UNIQUE) VIEW3
WHERE T0.C1=VIEW1.T2.C3;
在将表T2下推之后,最后的表T0也满足下推条件,因为T2.PKEY唯一映射了一个T2.C3。T0.C1与VIEW3.T2.C3连接可以视为与分区键在进行连接。在将T0下推后,因为T0.C1仍然不是唯一键,需要给第一窗口函数再添加一个T0的唯一键,例如主键T0.PKEY。
当第一连接条件中的关于第一数据表的表达式不满足唯一性时,通过在第一窗口函数的分组字段中添加第一数据表的唯一键,可以保证改写之后结果(第二数据库查询语句)的正确性。
在一些实施例中,如果第一连接条件中的关于第一数据表的表达式不满足唯一性,还可以计算第二数据库查询语句的执行代价,以确定是否生成第二数据库查询语句。这是因为,当第一连接条件中的关于第一数据表的表达式不满足唯一性时,优先执行第一数据表和第二数据表连接之后的行数相比执行第一数据表与第一视图连接的行数的大小关系不确定,这时需要借助计算执行代价来确定本次下推是否是一个好的下推。
作为一个示例,当计算结果为第二数据库查询语句的执行代价小于第一数据库查询语句,可以确定生成第二数据库查询语句,以减少中间结果集的数据量来提升查询效率。
作为另一个示例,当计算结果为第二数据库查询语句的执行代价大于第一数据库查询语句,可以确定不基于该第一视图和第一数据表生成第二数据库查询语句(即否定第一数据表的下推),然后可以重新尝试寻找新的第一数据表,以根据新的第一数据表和第一视图生成第二数据库查询语句,进而保证最终得到的第二数据库查询语句的中间结果集的数据量较少,查询效率较高。
作为又一个示例,当计算结果为第二数据库查询语句的执行代价大于第一数据库查询语句,可以确定生成第二数据库查询语句(即肯定第一数据表的下推),以便后续可以下推其他的数据表。换句话说,虽然当前下推后结果并未最优,但有助于之后找到更优的解,从而可以保证最终得到的第二数据库查询语句的中间结果集的数据量较少,查询效率较高。
图4为本公开又一实施例提供的处理数据库查询语句的方法的流程示意图。如图4所示,该方法包括步骤S410至步骤S430。
在步骤S410,接收第一数据库查询语句。第一数据库查询语句包括FROM子句中的第一视图,以及第一视图与第一数据表的连接操作,第一视图中封装有第一窗口函数。关于步骤S410的详细内容,可以参见前文所述的步骤S110,此处不再赘述。
在步骤S420,检查第一视图的合法性。
在一些实施例中,当第一视图中包含某些特定子句时,这些特定子句的执行顺序位于连接操作之后,那么正常执行顺序是先在第一视图内执行该特定子句,针对该特定子句执行得到的结果集进行连接操作。在本公开实施例中,如果优先执行连接操作再执行该特定子句,可能会导致执行结果不正确。基于此,本公开实施例在接收第一数据库查询语句后,还可以检查第一视图的合法性,当第一视图中不包含特定子句时,才执行后续的步骤S430。
本公开实施例对特定子句的具体内容不做限定,只要该特定子句的存在会使得将连接操作的顺序提前后会导致最终的执行结果不正确即可。下面给出特定子句的几个示例。
作为一个示例,第一视图中包含GROUP BY,ROLL UP等子句时,认为第一视图不合法。作为另一个示例,第一视图中包含LIMIT,ROWNUM等子句时,认为第一视图不合法。作为又一个示例,第一视图为层次查询或集合运算时,认为第一视图不合法。
在步骤S430,在第一视图合法的情况下,根据第一数据库查询语句生成第二数据库查询语句。第二数据库查询语句与第一数据库查询语句等价。第二数据库查询语句包括FROM子句中的第二视图,第二视图中封装有第一窗口函数,以及第一数据表与第二数据表的连接操作,其中,第二数据表为第一视图对应的数据表。关于步骤S430中的根据第一数据库查询语句生成第二数据库查询语句的详细内容,可以参见前文所述的步骤S120,此处不再赘述。
下面结合图5,给出本公开实施例的一个具体示例。
图5为本公开又一实施例提供的处理数据库查询语句的方法的流程示意图。在该示例中,以第一数据库查询语句中可能包含多个视图,且视图中可能包含多个窗口函数(比如,第一窗口函数和第二窗口函数)为例进行介绍。具体地,参见图5,查询优化器接收第一数据库查询语句之后,可以先确定第一视图(即,判断FROM子句的列表中,是否包含具有窗口函数的视图),并检查第一视图的合法性。如果第一视图不合法,重新确定新的第一视图;如果第一视图合法,计算第一视图中封装的第一窗口函数中的分组字段和第二窗口函数中的分组字段的交集。进一步地,查询优化器可以确定第一数据表(例如,随机选择一个数据表),并判断该第一数据表和第一视图是否满足第一条件。如果不满足第一条件,则重新确定第一数据表;如果满足第一条件,则将第一数据表和第一视图的连接操作(例如,将第一数据表、第一数据表和第一视图的等值连接条件、以及仅关于第一数据表的过滤条件)下推至第一视图的内部。完成第一数据表和第一视图的连接操作的下推之后,可以检查第一连接条件中关于第一数据表的表达式是否满足唯一性,如果满足唯一性,则直接生成第二数据库查询语句;如果不满足唯一性,则在第一窗口函数的分组字段中添加第一数据表的唯一键之后再生成第二数据库查询语句。
上文结合图1至图5,详细描述了本公开的方法实施例。下面结合图6至图7,对本公开提供的装置实施例进行描述。应该理解,装置实施例的描述与方法实施例的描述相互对应,因此,未详细描述的部分可以参见前面的方法实施例。
图6为本公开一实施例提供的处理数据库查询语句的装置的结构示意图。图6所示的装置600例如可以为查询优化器。该装置600可以包括接收模块610和生成模块620。
接收模块610用于接收第一数据库查询语句,第一数据库查询语句包括FROM子句中的第一视图,以及第一视图与第一数据表的连接操作,该第一视图中封装有第一窗口函数。
生成模块620用于根据第一数据库查询语句生成第二数据库查询语句,第二数据库查询语句与第一数据库查询语句等价,第二数据库查询语句包括FROM子句中的第二视图,第二视图中封装有第一窗口函数,以及第一数据表与第二数据表的连接操作,该第二数据表为第一视图对应的数据表。
可选地,生成模块620进一步包括:判断模块,用于判断第一视图与第一数据表的连接操作能否下推到第一视图的内部;下推模块,用于如果第一视图与第一数据表的连接操作能下推到第一视图的内部,则根据第一数据库查询语句,将第一视图与第一数据表的连接操作下推到第一视图的内部,得到第二数据库查询语句。
可选地,判断模块进一步用于:判断第一视图与第一数据表是否满足第一条件,在满足第一条件的情况下,则认为第一视图与第一数据表的连接操作能下推到第一视图的内部;其中,第一条件包括:第一视图与第一数据表之间存在等值连接条件,且等值连接条件中的关于第一视图的表达式依赖于第一窗口函数中的分组字段。
可选地,装置600还包括:第一检查模块,用于检查第一连接条件中关于第一数据表的表达式是否满足唯一性,其中,第一连接条件为第一视图和第一数据表的连接操作对应的连接条件;添加模块,用于如果关于第一数据表的表达式不满足唯一性,在第一窗口函数的分组字段中添加第一数据表的唯一键。
可选地,装置600还包括:计算模块,用于如果关于第一数据表的表达式不满足唯一性,计算第二数据库查询语句的执行代价,以确定是否生成第二数据库查询语句。
可选地,装置600还包括:第二检查模块,用于检查第一视图的合法性;生成模块进一步用于在第一视图合法的情况下,根据第一数据库查询语句生成第二数据库查询语句。
可选地,在第一视图中还封装有第二窗口函数的情况下,第一条件包括:第一视图与第一数据表之间存在等值连接条件,且等值连接条件中的关于第一视图的表达式依赖于第一窗口函数中的分组字段和第二窗口函数中的分组字段的交集。
可选地,第二视图中还封装有仅关于第一数据表的过滤条件。
图7为本公开另一实施例提供的处理数据库查询语句的装置的结构示意图。图7所示的装置700可以包括存储器710和处理器720。
存储器710可以用于存储指令。处理器720可以用于执行存储器710中存储的指令,以实现前文描述的各个方法中的步骤。
在一些实施例中,该装置700还可以包括网络接口730,处理器720与外部设备的数据交换可以通过该网络接口730实现。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其他任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如数字视频光盘(Digital Video Disc,DVD))、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
本领域普通技术人员可以意识到,结合本公开实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
在本公开所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。

Claims (17)

1.一种处理数据库查询语句的方法,包括:
接收第一数据库查询语句,所述第一数据库查询语句包括FROM子句中的第一视图,以及所述第一视图与第一数据表的连接操作,所述第一视图中封装有第一窗口函数;
根据所述第一数据库查询语句生成第二数据库查询语句,所述第二数据库查询语句与所述第一数据库查询语句等价,所述第二数据库查询语句包括FROM子句中的第二视图,所述第二视图中封装有所述第一窗口函数,以及所述第一数据表与第二数据表的连接操作,所述第二数据表为所述第一视图对应的数据表。
2.根据权利要求1所述的方法,所述根据所述第一数据库查询语句生成第二数据库查询语句,包括:
判断所述第一视图与所述第一数据表的连接操作能否下推到所述第一视图的内部;
如果所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部,则根据所述第一数据库查询语句,将所述第一视图与所述第一数据表的连接操作下推到所述第一视图的内部,得到所述第二数据库查询语句。
3.根据权利要求2所述的方法,所述判断所述第一视图与所述第一数据表的连接操作能否下推到所述第一视图的内部,包括:
判断所述第一视图与所述第一数据表是否满足第一条件,在满足所述第一条件的情况下,则认为所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部;
其中,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段。
4.根据权利要求1所述的方法,所述方法还包括:
检查第一连接条件中的关于所述第一数据表的表达式是否满足唯一性,其中,所述第一连接条件为所述第一视图和所述第一数据表的连接操作对应的连接条件;
如果关于所述第一数据表的表达式不满足唯一性,在所述第一窗口函数的分组字段中添加所述第一数据表的唯一键。
5.根据权利要求4所述的方法,在所述检查第一连接条件中的关于所述第一数据表的表达式是否满足唯一性之后,所述方法还包括:
如果关于所述第一数据表的表达式不满足唯一性,计算所述第二数据库查询语句的执行代价,以确定是否生成所述第二数据库查询语句。
6.根据权利要求1所述的方法,在所述根据所述第一数据库查询语句生成第二数据库查询语句之前,所述方法还包括:
检查所述第一视图的合法性;
所述根据所述第一数据库查询语句生成第二数据库查询语句,包括:
在所述第一视图合法的情况下,根据所述第一数据库查询语句生成所述第二数据库查询语句。
7.根据权利要求3所述的方法,在所述第一视图中还封装有第二窗口函数的情况下,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段和所述第二窗口函数中的分组字段的交集。
8.根据权利要求1所述的方法,所述第二视图中还封装有仅关于所述第一数据表的过滤条件。
9.一种处理数据库查询语句的装置,包括:
接收模块,用于接收第一数据库查询语句,所述第一数据库查询语句包括FROM子句中的第一视图,以及所述第一视图与第一数据表的连接操作,所述第一视图中封装有第一窗口函数;
生成模块,用于根据所述第一数据库查询语句生成第二数据库查询语句,所述第二数据库查询语句与所述第一数据库查询语句等价,所述第二数据库查询语句包括FROM子句中的第二视图,所述第二视图中封装有所述第一窗口函数,以及所述第一数据表与第二数据表的连接操作,所述第二数据表为所述第一视图对应的数据表。
10.根据权利要求9所述的装置,所述生成模块进一步包括:
判断模块,用于判断所述第一视图与所述第一数据表的连接操作能否下推到所述第一视图的内部;
下推模块,用于如果所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部,则根据所述第一数据库查询语句,将所述第一视图与所述第一数据表的连接操作下推到所述第一视图的内部,得到所述第二数据库查询语句。
11.根据权利要求10所述的装置,所述判断模块进一步用于:
判断所述第一视图与所述第一数据表是否满足第一条件,在满足所述第一条件的情况下,则认为所述第一视图与所述第一数据表的连接操作能下推到所述第一视图的内部;
其中,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段。
12.根据权利要求9所述的装置,所述装置还包括:
第一检查模块,用于检查第一连接条件中的关于所述第一数据表的表达式是否满足唯一性,其中,所述第一连接条件为所述第一视图和所述第一数据表的连接操作对应的连接条件;
添加模块,用于如果关于所述第一数据表的表达式不满足唯一性,在所述第一窗口函数的分组字段中添加所述第一数据表的唯一键。
13.根据权利要求12所述的装置,所述装置还包括:
计算模块,用于如果关于所述第一数据表的表达式不满足唯一性,计算所述第二数据库查询语句的执行代价,以确定是否生成所述第二数据库查询语句。
14.根据权利要求9所述的装置,所述装置还包括:
第二检查模块,用于检查所述第一视图的合法性;
所述生成模块进一步用于在所述第一视图合法的情况下,根据所述第一数据库查询语句生成所述第二数据库查询语句。
15.根据权利要求11所述的装置,在所述第一视图中还封装有第二窗口函数的情况下,所述第一条件包括:所述第一视图与所述第一数据表之间存在等值连接条件,且所述等值连接条件中的关于所述第一视图的表达式依赖于所述第一窗口函数中的分组字段和所述第二窗口函数中的分组字段的交集。
16.根据权利要求9所述的装置,所述第二视图中还封装有仅关于所述第一数据表的过滤条件。
17.一种处理数据库查询语句的装置,包括处理器和存储器,所述存储器中存储有可执行代码,所述处理器被配置为执行所述可执行代码,以实现权利要求1-8中任一项所述的方法。
CN202210392238.8A 2022-04-15 2022-04-15 处理数据库查询语句的方法和装置 Active CN114490724B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210392238.8A CN114490724B (zh) 2022-04-15 2022-04-15 处理数据库查询语句的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210392238.8A CN114490724B (zh) 2022-04-15 2022-04-15 处理数据库查询语句的方法和装置

Publications (2)

Publication Number Publication Date
CN114490724A CN114490724A (zh) 2022-05-13
CN114490724B true CN114490724B (zh) 2022-06-14

Family

ID=81487362

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210392238.8A Active CN114490724B (zh) 2022-04-15 2022-04-15 处理数据库查询语句的方法和装置

Country Status (1)

Country Link
CN (1) CN114490724B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114969101B (zh) * 2022-07-13 2022-10-21 北京奥星贝斯科技有限公司 Sql语句的处理方法及装置

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105718593A (zh) * 2016-01-28 2016-06-29 长春师范大学 一种数据库查询优化方法及***
CN111611274A (zh) * 2020-05-28 2020-09-01 华中科技大学 一种数据库查询优化方法和***
CN112597182A (zh) * 2020-12-16 2021-04-02 平安普惠企业管理有限公司 数据查询语句的优化方法、装置、终端及存储介质
CN112732752A (zh) * 2021-01-29 2021-04-30 上海达梦数据库有限公司 一种查询语句优化方法、装置、设备和存储介质
CN112765286A (zh) * 2021-02-01 2021-05-07 广州海量数据库技术有限公司 一种基于关系数据库的查询方法及装置
CN113282607A (zh) * 2021-06-02 2021-08-20 山东健康医疗大数据有限公司 一种数据库的优化查询方法
CN113420023A (zh) * 2021-02-05 2021-09-21 阿里巴巴集团控股有限公司 一种数据处理方法、装置、电子设备及计算机存储介质
CN113553339A (zh) * 2021-07-13 2021-10-26 杭州安恒信息技术股份有限公司 数据查询方法、中间件、电子装置和存储介质
CN114168620A (zh) * 2022-02-11 2022-03-11 北京奥星贝斯科技有限公司 执行计划的处理方法及装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105718593A (zh) * 2016-01-28 2016-06-29 长春师范大学 一种数据库查询优化方法及***
CN111611274A (zh) * 2020-05-28 2020-09-01 华中科技大学 一种数据库查询优化方法和***
CN112597182A (zh) * 2020-12-16 2021-04-02 平安普惠企业管理有限公司 数据查询语句的优化方法、装置、终端及存储介质
CN112732752A (zh) * 2021-01-29 2021-04-30 上海达梦数据库有限公司 一种查询语句优化方法、装置、设备和存储介质
CN112765286A (zh) * 2021-02-01 2021-05-07 广州海量数据库技术有限公司 一种基于关系数据库的查询方法及装置
CN113420023A (zh) * 2021-02-05 2021-09-21 阿里巴巴集团控股有限公司 一种数据处理方法、装置、电子设备及计算机存储介质
CN113282607A (zh) * 2021-06-02 2021-08-20 山东健康医疗大数据有限公司 一种数据库的优化查询方法
CN113553339A (zh) * 2021-07-13 2021-10-26 杭州安恒信息技术股份有限公司 数据查询方法、中间件、电子装置和存储介质
CN114168620A (zh) * 2022-02-11 2022-03-11 北京奥星贝斯科技有限公司 执行计划的处理方法及装置

Also Published As

Publication number Publication date
CN114490724A (zh) 2022-05-13

Similar Documents

Publication Publication Date Title
US11755575B2 (en) Processing database queries using format conversion
Simitsis et al. State-space optimization of ETL workflows
US8612421B2 (en) Efficient processing of relational joins of multidimensional data
US9286393B2 (en) Performing a function on rows of data determined from transitive relationships between columns
US8924373B2 (en) Query plans with parameter markers in place of object identifiers
CN110795455A (zh) 依赖关系解析方法、电子装置、计算机设备及可读存储介质
US8046352B2 (en) Expression replacement in virtual columns
US10783142B2 (en) Efficient data retrieval in staged use of in-memory cursor duration temporary tables
US10534797B2 (en) Synchronized updates across multiple database partitions
EP3047399A1 (en) Densely grouping dimensional data
CN111221791A (zh) 一种多源异构数据导入数据湖的方法
US10726006B2 (en) Query optimization using propagated data distinctness
CN112579610A (zh) 多数据源结构分析方法、***、终端设备及存储介质
US20190340272A1 (en) Systems and related methods for updating attributes of nodes and links in a hierarchical data structure
US9904702B2 (en) Dynamic generation of database queries in query builders
CN114490724B (zh) 处理数据库查询语句的方法和装置
EP3293645B1 (en) Iterative evaluation of data through simd processor registers
CN117421302A (zh) 一种数据处理方法及相关设备
CN115114325B (zh) 数据查询方法、装置、电子设备以及存储介质
CN114416884B (zh) 连接分区表的方法和装置
CN114547083A (zh) 数据处理方法、装置及电子设备
CN112783758A (zh) 测试案例库与特征库生成方法、设备及存储介质
CN116680299B (zh) 数据库查询方法、***、存储介质以及设备
US10929396B1 (en) Multi-type attribute index for a document database
CN116028519A (zh) 一种数据筛选方法、装置、电子设备及可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant