CN115905278A - 数据查询的方法及装置 - Google Patents
数据查询的方法及装置 Download PDFInfo
- Publication number
- CN115905278A CN115905278A CN202211316460.6A CN202211316460A CN115905278A CN 115905278 A CN115905278 A CN 115905278A CN 202211316460 A CN202211316460 A CN 202211316460A CN 115905278 A CN115905278 A CN 115905278A
- Authority
- CN
- China
- Prior art keywords
- query
- paging
- semantic unit
- predicate
- candidate 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例提供一种数据查询的方法及装置,在针对数据库进行分页查询过程中,对于查询请求中具有通过预定谓词实现分页查询语义的语义单元,可以通过和候选条件集中的候选条件进行匹配,按照匹配结果将预定谓词实现的分页查询语义的语义单元,转换成等价的分页查询子句。在可选的实施方式中,转换后的分页查询语句之间还可以相互合并。该实施方式可以减少分页查询过程中的无效数据读取和/或无效数据运算,提升数据库查询的执行效率。
Description
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及数据查询的方法及装置。
背景技术
在数据库相关的业务中存在大量分页查询场景。其中,分页查询通常是获取查询结果集中指定连续行的查询。分页查询可以通过分页谓词或分页查询子句实现。谓词的执行过程具有相应的规则,对具有分页查询语义的谓词,作为普通谓词执行可能会造成大量无用的基表数据读取及无效计算,执行效率较差。
发明内容
本说明书一个或多个实施例描述了一种数据查询的方法及装置,用以解决背景技术提到的一个或多个问题。
根据第一方面,提供一种数据查询的方法,所述方法包括:获取当前查询请求,所述当前查询请求中包含通过预定谓词实现分页查询语义的第一语义单元;对所述第一语义单元与候选条件集中的各个候选条件进行匹配,各个候选条件分别用于描述通过所述预定谓词实现的各种分页查询语义单元,单个候选条件对应有与相应分页查询语义单元等价的单个分页查询子句;根据匹配结果,将所述第一语义单元转换成与所匹配到的第一候选条件等价的第一分页查询子句,得到当前查询请求对应的优化查询方案;利用所述优化查询方案进行数据查询,得到查询结果。
在一个实施例中,所述预定谓词为通过ROWNUM描述输出行数限定的谓词。
在一个实施例中,在第一语义单元仅通过所述预定谓词限定当前查询的输出行数实现分页查询语义的情况下,所述将所述第一语义单元转换成与匹配到的第一候选条件等价的第一分页查询子句包括:通过LIMIT语句替换所述预定谓词语句实现mySQL数据库分页查询语义;或者,通过FETCH语句替换所述预定谓词语句实现oracle数据库分页查询语义。
在一个实施例中,在第一语义单元通过内联视图输出由所述预定谓词限定预定输出行数的列,并在外层查询中利用所述限定预定输出行数的列实现分页查询语义的情况下,所述将所述第一语义单元转换成与匹配到的第一候选条件等价的第一分页查询子句包括:在所述第一语义单元满足可转化条件的情况下,用“偏移+输出行数”的行偏移语句代替通过内联视图输出由所述预定谓词限定预定输出行数的语句。
在一个实施例中,所述可转化条件包括:外层查询为单表查询;内联视图不包含预定语法集中的查询语法。
在一个实施例中,所述预定语法集包括关键词为GROUP-BY、ORDER-BY、WindowFunction中的至少一项的查询语法。
在一个实施例中,在所述优化查询语句中存在多个分页查询子句的情况下,所述利用所述优化查询方案进行数据查询,还包括:对所述多个分页查询语句进行分页查询合并,利用分页查询合并后的优化查询方案进行数据查询。
在一个进一步的实施例中,在所述优化查询方案包括内联视图和外层查询,且外层查询和内联视图均包含分页查询子句的情况下,所述对所述多个分页查询语句进行分页查询合并还包括:将外层查询的分页查询语句合并下压到内联视图;其中,外层查询的行偏移量为M2,内联查询的行偏移量为M1的情况下,合并下压到内联视图的分页查询语句中,行偏移量为M1+M2。
在一个更进一步的实施例中,在外层输出列存在通过ROWNUM限定输出行数的情况下,将外层输出列转换为ROWNUM+M2。
根据第二方面,提供一种数据查询的装置,所述装置包括:
获取模块,配置为获取当前查询请求,所述当前查询请求中包含通过预定谓词实现分页查询语义的第一语义单元;
匹配模块,配置为对所述第一语义单元与候选条件集中的各个候选条件进行匹配,各个候选条件分别用于描述通过所述预定谓词实现的各种分页查询语义单元,单个候选条件对应有与相应分页查询语义单元等价的单个分页查询子句;
转换模块,配置为根据匹配结果,将所述第一语义单元转换成与所匹配到的第一候选条件等价的第一分页查询子句,得到当前查询请求对应的优化查询方案;
查询模块,配置为利用所述优化查询方案进行数据查询,得到查询结果。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
通过本说明书实施例提供的方法和装置,在接收到数据库查询请求的情况下,对于查询请求中通过预定谓词实现分页查询语义的语义单元,通过和候选条件集中的候选条件进行匹配,按照匹配结果转换成等价的分页查询子句。在可选的实施方式中,转换后的分页查询语句之间还可以相互合并。该实施方式可以减少分页查询过程中的无效数据读取和/或无效数据运算,提升数据库查询的执行效率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出根据本说明书的一个具体实施场景示意图;
图2示出根据本说明书一个实施例的数据查询的方法流程图;
图3示出根据一个实施例的数据查询的装置的示意性框图。
具体实施方式
下面结合附图,对本说明书提供的技术方案进行描述。
为了更清楚地理解本说明书的技术方案,首先结合一个具体实施场景描述本说明书中的技术方案提出的技术背景。
图1示出了本说明书的一个具体实施架构。该实施架构涉及至少一个业务服务器及数据库。业务服务器可以为各个用户在相应终端上进行的相关业务(例如搜索业务、查询业务、收付款业务、导航业务等),提供相应业务支持。业务服务器在为终端提供相应业务支持过程中,可以向数据库中写入数据、读取数据。例如,业务服务器是为终端的购物业务、借贷业务、导航业务等提供业务支持的服务器等。相应地,业务服务器可以向数据库写入或读出购物记录数据(如购物品类、金额、时间等数据),借贷记录数据(如借贷数额、借贷种类、还款时间等数据),导航记录数据(如导航时间、到达目的地用时、导航路线和实际路线等数据)。数据库可以为一种业务服务器提供数据存储服务,也可以为多种业务服务器提供数据存储服务。在为多种业务服务器提供数据存储服务的情况下,基于业务服务器间的相互授权,单个业务服务器可以从数据库的多个业务数据表中读取数据。
业务服务器从数据库读取数据通常基于相应的查询请求进行。业务服务器发送相应查询请求,而数据库通过计算平台根据查询请求确定相应查询策略,并从数据库表中查询相应数据。为了减小数据库压力,计算平台通常还可以根据查询请求确定多个候选查询策略,并从中选择代价较小的策略作为目标策略进行数据查询。这里的计算平台可以是连接数据库设备的计算机、设备、服务器等,也可以是嵌入或运行于数据库设备的执行器,如优化器等。
在许多场景下,相关业务的查询请求可能包含分页查询。分页查询通常不是一次性将所有数据全部查询出来,而是分多次查询,如发送一条查询10条数据的查询语句作为查询第一页,再发送一条查询10条数据的查询语句作为查询下一页,等等。
通常,分页查询可以利用限定输出行数的普通谓词(如ROWNUM限定输出行数的谓词)作为查询条件实现。事实上,数据库中实现分页查询还可能存在高效的专用语法,如果业务服务器方针对查询请求进行编辑的人员对于数据库的查询机制和专业查询语法不够了解,则查询过程中可能会因为执行普通谓词而使得执行效率变差。
有鉴于此,在本说明书中,在确定查询策略之前还可以对查询请求中包含的分页查询语义进行优化,得到优化查询方案进行分页查询。本说明书提供一种基于对分页查询的普通谓词的优化进行数据查询的技术方案。该技术方案例如可以通过图1示出的计算平台(如优化器)执行。其构思为,针对所接收到的查询请求,先检测是否存在分页查询的普通谓词,若存在,则根据具体查询目标向分页查询子句进行转换,从而使用专用查询语句进行分页查询,简化查询执行程序,提高分页查询效率。
下面结合图2示出的一个具体实施例详细描述本说明书的技术构思。
图2示出了根据本说明书一个实施例的数据查询流程。该流程的执行主体可以是具有一定计算能力的计算机、设备、服务器。更具体地,如可以是图1中的计算平台。该流程的执行主体可以设于数据库设备,也可以是能够访问数据库的控制设备等。图2示出的数据查询流程可以用于数据库查询情况下,针对查询请求确定数据查询策略,并从数据库查询相应数据。如图2所示,该数据查询流程可以包括:步骤201,获取当前查询请求,上述当前查询请求中包含通过预定谓词实现分页查询语义的第一语义单元;步骤202,将第一语义单元与候选条件集中的各个候选条件进行匹配,各个候选条件分别用于描述通过上述预定谓词实现的各种分页查询语义单元,单个候选条件对应有与相应分页查询语义单元等价的单个分页查询子句;步骤203,根据匹配结果,将包第一语义单元转换成与匹配到的第一候选条件等价的第一分页查询子句,得到当前查询请求对应的优化查询方案;步骤204,利用优化查询方案进行数据查询,得到查询结果。
首先,通过步骤201,获取当前查询请求。
其中,当前查询请求可以是用户或业务服务器按照预定协议发送的数据查询请求。在图2示出的流程可以针对包含分页查询的查询请求进行处理,因此,假设当前所接收到的查询请求是分页查询请求。因此,在可选的实施例中,可以在接收到查询请求之后执行步骤201之前,先检测所接收到的查询请求是否包含预定谓词实现的分页查询语义。当前查询请求可以是所检测到的包含预定谓词实现的分页查询语义的任意查询请求。
这里的预定谓词例如为通过关键词ROWNUM实现的分页查询语义。其中,关键词ROWNUM可以用于限定输出行数,因此,通常可以由ROWNUM+大小关系(通常为小于、等于等)+输出行数,构成一个谓词。如“ROWNUM<=N”、“ROWNUM<N”等,N为正整数。作为一个查询语句示例,假设一个查询请求要查询T1数据表中按C1、C2字段至多查询10条数据,该查询请求例如包含“SELECT C1,C2 FROM T1 WHERE ROWNUM<=10”查询语句(以下记为查询1)。其中,“ROWNUM<=10”为预定谓词,实现分页查询语义。由于预定谓词是按照关键词(如ROWNUM)的预定格式构建的谓词,其中的数值是根据实际情形改变的,在本说明书中,为了描述方便,可以将查询请求中通过一个关键词的预定格式实现的语义记为一个语义单元。针对当前查询请求,一个预定谓词具体的预定格式实现分页查询语义的可以称为第一语义单元。
步骤202,将第一语义单元与候选条件集中的各个候选条件进行匹配。
可以理解,同一个关键词按照各种预定格式可以构建不同的谓词,不同的谓词包含的分页查询语义可能不同。候选条件可以描述这些通过预定谓词实现的各种分页查询语义单元。而不同分页查询语义可以具有不同的优化方式。这些不同的候选条件指示不同的分页查询语义。在一个可选的实现方式中,当前查询请求仅通过预定谓词实现的分页查询语义限定当前查询的输出行数,如通过关键词ROWNUM基于不同格式的谓词限定当前查询的输出行数的分页查询语义单元,则每种格式的谓词可以对应一个候选条件。例如具有以下的分页查询语义描述方式:ROWNUM<N、ROWNUM<=N、ROWNUM=1、ROWNUM=N(1!=N)等等。具体而言,ROWNUM<N限定了输出行数小于N,ROWNUM<=N限定了输出行数至多为N,ROWNUM=1限定了输出行数为1,等等。这些情形通常不包含内联视图,例如前文的查询1中的“SELECT C1,C2 FROM T1 WHERE ROWNUM<=10”查询语句。这些在不同格式下的各个分页查询语义单元分别可以作为相应的各个候选条件。
其中,内联视图通常是一种临时视图,无需在SELECT前进行视图创建,而是在使用SQL语句编写查询时,临时构建的一个嵌入式的视图。查询中包含内联视图时,视图中的SELECT语句先被执行,得到一个结果集,然后由外层查询语句查询内联视图的结果。一次查询中可以包括一个或多个内联视图。
在另一个可选的实现方式中,针对包含内联视图的查询,可以在内联视图中输出经由ROWNUM限定的字段,然后在外层查询构成该字段的分页查询语义,此时,候选条件可以用于描述在内联视图中包含通过预定谓词实现的分页查询语义单元的情形。例如以下查询2:“SELECT C1,C2 FROM(SELECT C1,C2,ROWNUM RN FROM T1)V WHERE RN>10000AND RN<=10010”。其中,内联视图描述了在表T1的字段C1、C2通过输出参数RN限定的行数,外层查询利用字段C1、C2由RN(RN>10000且RN<=10010)定义的分页查询。此时,这种包含内联视图,且在内联视图中输出经由ROWNUM限定的字段,然后在外层查询构成该字段的分页查询语义的各种语义单元可以作为相应的候选条件。
根据外层查询描述的不同语义,还可以对应不同的候选条件。例如该类候选条件可以包括但不限于外层查询的以下情形:
RN>M AND RN<N;
RN>=M AND RN<=N;
RN=N(N为正整数);
RN=N(N为非正整数);
等等。
在其他可选的实现方式中,还可以具有包含其他分页查询语义的其他候选条件,在此不再赘述。
第一语义单元与候选条件的匹配例如可以是句式、语法等格式的匹配等,例如“关键词+大小关系”的匹配等。作为具体示例,前文查询1“SELECT C1,C2 FROM T1WHEREROWNUM<=10”的查询语句可以匹配到“ROWNUM<=N”的候选条件,前文的查询2“SELECTC1,C2 FROM(SELECT C1,C2,ROWNUM RN FROM T1)V WHERE RN>10000AND RN<=10010”的查询语句可以匹配到包含内联视图的候选条件“RN>M AND RN<N”等。
在本说明书的实施架构下,单个候选条件可以对应有与相应分页查询语义单元等价的单个分页查询子句。例如,ROWNUM<=N限定了输出行数至多为N,可以对应分页查询子句“FETCH NEXT N ROWS”,包含内联查询“ROWNUM RN FROM T1”的情况下,外层查询中的“RN>M AND RN<N”可以对应分页查询子句“OFFSET MROWS FETCH N-M ROWS”(偏移M行后取N-M行)等等。
在本说明书中,第一语义单元匹配到的候选条件可以记为第一候选条件,与第一候选条件等价的分页查询语句可以记为第一分页查询子句。
然后,通过步骤203,根据匹配结果,将所述第一语义单元转换成与所匹配到的第一候选条件等价的分页查询子句。
为了优化查询方案,可以在匹配到候选条件的情况下,将原预定谓词实现分页查询语义的第一语义单元改写成等价的专用分页查询子句。具体转化成什么样的分页查询子句可以根据所匹配到的候选条件确定。
在一个实施例中,匹配到的候选条件中,当前查询请求仅通过预定谓词实现的分页查询语义限定当前查询的输出行数,则可以通过预定关键词对应的相关语句替换相应分页查询语义的语义单元。其中,预定关键词可以根据不同的数据库进行选择,并采取各自的语法实现。例如,针对oracle数据库,预定语法由FETCH语句实现,针对mySQL数据库,预定语法由LIMIT语句实现。作为一个具体示例,针对前文的查询1“SELECT C1,C2FROM T1 WHEREROWNUM<=10”,在针对oracle的查询语法中,可以转换为分页查询子句“SELECT C1,C2FROM T1 FETCH NEXT 10ROWS ONLY”。其中,分页查询语义“WHERE ROWNUM<=10”对应转换成分页查询子句“FETCH NEXT 10ROWS ONLY”。
可选地,如果原始查询不包含内联视图(SPJ),还可以先创建内联视图,再将分页查询子句添加到内联视图中。作为示例,原始查询语句例如为“SELECT*FROM T1WHEREROWNUM<=10ORDER BY C1”,从表T1中按照C1的排序输出10行数据,查询语句本身不包含内联视图。此时,可以先创建内联视图,再将分页查询子句SELECT*FROM T1 FETCH NEXT10ROWS ONLY添加到内联视图,得到查询语句“SELECT*from(select*FROM T1 FETCH NEXT10ROWS ONLY)v1 ORDER BY C1”。
此时,从普通谓词向等价的分页查询子句的转化可以依据相应规则进行。具体而言,可以将普通谓词ROWNUM实现分页查询语义的第一语义单元删除,用描述偏移行数的关键词构成的专用分页查询子句(如OFFSET*ROWS,*表示行数值)代替。具体的便宜行数与候选条件描述的分页查询语义单元中的具体行数限定相关。举例而言,在ROWNUM描述输出行数为形如“RN>M AND RN<N”的语义的情况下,,则OFFSET*ROWS对应的行偏移量*为“M”,在ROWNUM描述输出行数为形如“RN>=M AND RN<=N”(输出行号在M、N之间)的语义的情况下,则OFFSET*ROWS对应的行偏移量*为“M-1”,在ROWNUM描述输出行数为形如“RN=N”(N为正整数)的语义(输出行号为N)的情况下,OFFSET*ROWS对应的行偏移量*为“N-1”,在ROWNUM描述输出行数为形如“RN=N”(N为非正整数)的语义的情况下,OFFSET*ROWS中的行偏移量*为“0”,等等。
在另一个实施例中,匹配到的候选条件中,包含内联视图的分页查询语义,则分页查询语义还需要满足以下条件的情况下,才将其转换成等价的分页查询子句:外层查询为单表查询。这是考虑到外层查询不是单表查询的情况使用较少,且情况较复杂,直接转换容易引起行号等混乱,转换成本过高而不进行转换。,
可选地,内联视图中的一些关键词对应的查询子句也可能存在无法通过等价的查询语义进行转换,或者查询语不常用,转换比较复杂等,则转换成分页查询子句也可能消耗更多成本,则不便于进行查询语句转换。例如包含“GROUP-BY”、“ORDER-BY”、“WindowFunction”等等中的至少一种关键词的查询子句。为了排除这些查询子句,可以预先设置预定语法集,用于存储不便于进行分页查询转换的子句所涉及的语法关键词,从而,针对在内联视图中基于这些关键词的查询子句,不进行查询子句的转换。此时,包含内联视图的分页查询语义,还需满足“内联视图不包含预定语法集中的查询语法”的条件,才转换成等价的分页查询子句。
包含内联视图的查询子句的转换至少可以包括外层查询的查询语句转换。对于外层查询中包含的分页查询语义,可以将相关谓词替换为等价的分页查询子句,如将通过“ROWNUM”实现的谓词用“OFFSET*ROWS FETCH NEXT*ROWS ONLY”替换。其中“*”在实际使用场景中可以替换为相应行数。
如果外层查询和内联视图均包含分页查询子句,还可以对查询语句进行合并下压,从而简化查询,节约查询步骤,减少无效数据读取和/或无效计算。合并下压是将内联视图和外层查询的多个查询子句向内层合并压缩为一个查询子句的操作。例如,对于前文的查询2“SELECT C1,C2 FROM(SELECT C1,C2,ROWNUM RN FROM T1)VWHERE RN>10000AND RN<=10010”的查询语句,要从T1表中查询满足行参数RN大于10000且小于10010的数据,也就是查询行参数RN=10000之后的10行数据,因此,合并到内层查询之后例如可以改写为分页查询子句“SELECT C1,C2 FROM T1OFFSET 10000ROWS FETCH NEXT 10ROWS ONLY”。原语句使用普通谓词(如包含ROWNUM的谓词)实现分页查询语义,需要读取T1的全表数据,先从表T1中读取行参数RN所涉及的全部数据,再从中选择RN>10000AND RN<=10010的10行,而经合并转换后的分页查询子句执行时能下压到存储层,仅从第10000行读取10行数据,减少了无效数据的读取,查询代价大大减小。
在其他实施例中,还可以包括其他转换方式,由包含普通谓词实现的分页查询语义的语义单元向专用的分页查询子句进行转换,得到优化查询方案,在此不再一一赘述。
接着,在步骤204,利用优化查询方案进行数据查询,得到查询结果。
可以理解,如果转换后的分页查询中存在多个分页查询子句,也可能存在优化查询方案执行的复杂度高、产生冗余查询代价等问题。因此,在一个可能的设计中,还可以对转换后的分页查询子句进行合并。
根据一个可能的设计,分页查询子句的合并可以针对满足以下条件的情形进行:
外层查询与内联视图分页查询子句均为简单语法,如“OFFSET*ROWS FETCHNEXT*ROWS ONLY”等,而不包含预定子句如“with ties”(通常和Top、order by等相结合使用,会查询出最后一条数据额外的返回值)、“percent”(用百分数限定的查询)等语法实现的查询语句;
外层查询为单表查询,且不包含谓词条件、“GROUP-BY”、“ORDER-BY”、“WindowFunction”、“Sequence”等限定的语义。
这些条件可以排除语句复杂度高、产生冗余查询代价的情形。在满足这样的条件的情况下,可以按照语义等价原则,对内联视图和外层查询的分页查询子句进行分页查询的合并。合并规则可以基于语义预先确定。
在一个实施例中,合并规则可以包括对内联视图和外层查询中的行偏移量进行叠加合并。行偏移量例如是语句OFFSET*ROWS所描述的数值。如OFFSET 1000ROWS表示行偏移量为1000行。举例而言,可以将内联视图中查询行偏移量M1和外层查询的行偏移量M2合并为查询的行偏移量M1+M2。作为一个具体示例,假设一个转换后的查询语句(以下可以记为查询3)为“SELECT S1,ROWNUM RN FROM(SELECT(SELECT MEDIAN(C1)FROM T2 WHERE C1=T1.C1)S1 FROM T1 OFFSET 5000ROWS FETCH NEXT 20000ROWS ONLY)V OFFSET 3000ROWSFETCH NEXT10ROWS ONLY”,则在内联视图中包含行偏移语义“OFFSET 5000ROWS”,偏移量为5000行(对应M1),外层查询也存在行偏移语义“OFFSET 3000ROWS”,偏移量为3000行(对应M2)则可以将外层查询的行偏移量向内联视图中合并,合并结果如为“SELECT S1,ROWNUMRN FROM(SELECT(SELECT MEDIAN(C1)FROM T2 WHERE C1=T1.C1)S1 FROM T1 OFFSET8000ROWS FETCH 10ROWS ONLY”。最终查询结果都是从第10000行之后取其中10行数据,原始查询需要先读出5000行之后的20000行数据,再从这20000行数据的3000行之后取其中10条,而合并优化后只从第8000行(M1+M2)之后读取10条数据,查询代价大大减少。
另一方面,在外层查询使用ROWNUM输出行号的情况下,合并改写后为了保持通过FETCH或LIMIT等语句取出的数据行号不变,合并规则还可以包括:使用外层查询中的行偏移量替换原始输出列的输出行号。其中,外层查询中的行偏移量例如是外层查询中语句OFFSET*ROWS所描述的数值。如前文的查询3“SELECT S1,ROWNUM RN FROM(SELECT(SELECTMEDIAN(C1)FROM T2 WHERE C1=T1.C1)S1FROM T1 OFFSET 5000ROWS FETCH NEXT20000ROWS ONLY)V OFFSET 3000ROWS FETCH NEXT 10ROWS ONLY”中,除了对内联视图和完成查询进行合并,还可以对“ROWNUM”进行替换。具体而言,“ROWNUM”可以用外层查询“OFFSET 3000ROWS”中的行偏移量3000替换为“ROWNUM+3000”。这样,最终合并得到的分页查询子句为:
SELECT S1,(ROWNUM+3000)RN FROM(SELECT(SELECT MEDIAN(C1)
FROM T2 WHERE C1=T1.C1)S1 FROM T1
OFFSET 8000ROWS FETCH NEXT 10ROWS ONLY)V。
以上查询3在进行分页查询子句合并下压前,内联视图每输出一行便需要进行一次子查询计算,由于外层查询中的OFFSET 3000ROWS子句,内联视图输出的前3000行都是无用的。合并下压后,内联视图中包含了OFFSET 8000ROWS FETCH NEXT 10ROWS ONLY子句,内联视图中子查询仅需要被计算10次,大大提升执行效率。
在更多实施例中,还可以具有其他合并规则,对经过谓词向专用分页查询子句转换后的优化查询方案中的查询子句进行合并,在此不再赘述。经过子句合并的优化查询方案具有更高的查询效率。
回顾以上过程,在针对数据库进行分页查询过程中,对于查询请求中通过预定谓词实现分页查询语义的语义单元,可以通过和候选条件集中的候选条件进行匹配,按照匹配结果转换成等价的分页查询子句,从而减少无效数据的读取和/或无效数据的计算,提升数据库查询的执行效率。
根据另一方面的实施例,还提供一种用于数据查询的装置。图3示出了根据一个实施例的数据查询的装置300。如图3所示,装置300可以包括:
获取模块301,配置为获取当前查询请求,当前查询请求中包含通过预定谓词实现分页查询语义的第一语义单元;
匹配模块302,配置为对第一语义单元与候选条件集中的各个候选条件进行匹配,各个候选条件分别用于描述通过预定谓词实现的各种分页查询语义单元,单个候选条件对应有与相应分页查询语义单元等价的单个分页查询子句;
转换模块303,配置为根据匹配结果,将第一语义单元转换成与所匹配到的第一候选条件等价的第一分页查询子句,得到当前查询请求对应的优化查询方案;
查询模块304,配置为利用优化查询方案进行数据查询,得到查询结果。
值得说明的是,图3所示的装置300与图2描述的方法相对应,图2的方法实施例中的相应描述同样适用于装置300,在此不再赘述。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2等所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2等所描述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所描述的具体实施方式,对本说明书的技术构思的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所描述仅为本说明书的技术构思的具体实施方式而已,并不用于限定本说明书的技术构思的保护范围,凡在本说明书实施例的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书的技术构思的保护范围之内。
Claims (12)
1.一种数据查询的方法,所述方法包括:
获取当前查询请求,所述当前查询请求中包含通过预定谓词实现分页查询语义的第一语义单元;
将所述第一语义单元与候选条件集中的各个候选条件进行匹配,各个候选条件分别用于描述通过所述预定谓词实现的各种分页查询语义单元,单个候选条件对应有与相应分页查询语义单元等价的单个分页查询子句;
根据匹配结果,将所述第一语义单元转换成与所匹配到的第一候选条件等价的第一分页查询子句,得到当前查询请求对应的优化查询方案;
利用所述优化查询方案进行数据查询,得到查询结果。
2.如权利要求1所述的方法,其中,所述预定谓词为通过ROWNUM描述输出行数限定的谓词。
3.如权利要求1所述的方法,其中,在第一语义单元仅通过所述预定谓词限定当前查询的输出行数实现分页查询语义的情况下,所述将所述第一语义单元转换成与匹配到的第一候选条件等价的第一分页查询子句包括:
通过LIMIT语句替换所述预定谓词语句实现mySQL数据库分页查询语义;或者
通过FETCH语句替换所述预定谓词语句实现oracle数据库分页查询语义。
4.如权利要求1所述的方法,其中,在第一语义单元通过内联视图输出由所述预定谓词限定预定输出行数的列,并在外层查询中利用所述限定预定输出行数的列实现分页查询语义的情况下,所述将所述第一语义单元转换成与匹配到的第一候选条件等价的第一分页查询子句包括:
在所述第一语义单元满足可转化条件的情况下,用“偏移+输出行数”的行偏移语句代替通过内联视图输出由所述预定谓词限定预定输出行数的语句。
5.如权利要求4所述的方法,其中,所述可转化条件包括:
外层查询为单表查询;
内联视图不包含预定语法集中的查询语法。
6.如权利要求5所述的方法,其中,所述预定语法集包括关键词为GROUP-BY、ORDER-BY、Window Function中的至少一项的查询语法。
7.如权利要求1所述的方法,其中,在所述优化查询方案中存在多个分页查询子句的情况下,所述利用所述优化查询方案进行数据查询,还包括:
对所述多个分页查询语句进行分页查询合并,利用分页查询合并后的优化查询方案进行数据查询。
8.如权利要求7所述的方法,其中,在所述优化查询方案包括内联视图和外层查询,且外层查询和内联视图均包含分页查询子句的情况下,所述对所述多个分页查询语句进行分页查询合并还包括:
将外层查询的分页查询语句合并下压到内联视图;
其中,外层查询的行偏移量为M2,内联查询的行偏移量为M1的情况下,合并下压到内联视图的分页查询语句中,行偏移量为M1+M2。
9.如权利要求8所述的方法,其中,在外层输出列通过ROWNUM限定输出行数的情况下,将外层输出列转换为ROWNUM+M2。
10.一种数据查询的装置,所述装置包括:
获取模块,配置为获取当前查询请求,所述当前查询请求中包含通过预定谓词实现分页查询语义的第一语义单元;
匹配模块,配置为对所述第一语义单元与候选条件集中的各个候选条件进行匹配,各个候选条件分别用于描述通过所述预定谓词实现的各种分页查询语义单元,单个候选条件对应有与相应分页查询语义单元等价的单个分页查询子句;
转换模块,配置为根据匹配结果,将所述第一语义单元转换成与所匹配到的第一候选条件等价的第一分页查询子句,得到当前查询请求对应的优化查询方案;
查询模块,配置为利用所述优化查询方案进行数据查询,得到查询结果。
11.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-9中任一项的所述的方法。
12.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211316460.6A CN115905278A (zh) | 2022-10-26 | 2022-10-26 | 数据查询的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211316460.6A CN115905278A (zh) | 2022-10-26 | 2022-10-26 | 数据查询的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115905278A true CN115905278A (zh) | 2023-04-04 |
Family
ID=86482501
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211316460.6A Pending CN115905278A (zh) | 2022-10-26 | 2022-10-26 | 数据查询的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115905278A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117235118A (zh) * | 2023-10-19 | 2023-12-15 | 北京人大金仓信息技术股份有限公司 | 一种查询优化方法、存储介质与计算机设备 |
-
2022
- 2022-10-26 CN CN202211316460.6A patent/CN115905278A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117235118A (zh) * | 2023-10-19 | 2023-12-15 | 北京人大金仓信息技术股份有限公司 | 一种查询优化方法、存储介质与计算机设备 |
CN117235118B (zh) * | 2023-10-19 | 2024-01-26 | 北京人大金仓信息技术股份有限公司 | 一种查询优化方法、存储介质与计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8635206B2 (en) | Database query optimization | |
US8700658B2 (en) | Relational meta model and associated domain context-based knowledge inference engine for knowledge discovery and organization | |
US6571233B2 (en) | Optimization of SQL queries using filtering predicates | |
US9600507B2 (en) | Index structure for a relational database table | |
US8996555B2 (en) | Question answering framework for structured query languages | |
US20240012810A1 (en) | Clause-wise text-to-sql generation | |
JP7100422B2 (ja) | データプロパティ認識のための装置、プログラム、及び方法 | |
US20110093486A1 (en) | Data query method, data query system and computer readable and writable recording medium | |
CN105718593A (zh) | 一种数据库查询优化方法及系统 | |
CN103164507A (zh) | 行与列数据库表在原生方向上的混合联接 | |
CN1573756A (zh) | 分布式查询引擎流水线方法和系统 | |
US20070112586A1 (en) | Clinical genomics merged repository and partial episode support with support abstract and semantic meaning preserving data sniffers | |
US10242123B2 (en) | Method and system for handling non-presence of elements or attributes in semi-structured data | |
CN107491476B (zh) | 一种适用于多种大数据管理系统的数据模型转换及查询分析方法 | |
CN115905278A (zh) | 数据查询的方法及装置 | |
Michel et al. | A generic mapping-based query translation from SPARQL to various target database query languages | |
US20110302220A1 (en) | Sql processing for data conversion | |
US8548985B2 (en) | Method and process of query optimization to a given environment via specific abstraction layer domain knowledge | |
KR101718119B1 (ko) | SparkSQL 기반의 SPARQL 질의 처리 수행 시스템 | |
JP3163141B2 (ja) | リレーショナルデータベース処理装置および処理方法 | |
US11036725B2 (en) | System and method for computerized data processing, analysis and display | |
US7958112B2 (en) | Interleaving query transformations for XML indexes | |
Morishima et al. | A data modeling and query processing scheme for integration of structured document repositories and relational databases | |
US11422782B1 (en) | Transforming logic programming language code into structured query language code | |
JP2001344147A (ja) | 汎用データベースアクセス装置 |
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 |