掌桥专利:专业的专利平台
掌桥专利
首页

查询优化方法、装置及设备

文献发布时间:2024-04-18 20:01:23


查询优化方法、装置及设备

技术领域

本申请涉及数据库查询技术领域,尤其涉及一种查询优化方法、装置及设备。

背景技术

标量子查询是结构化查询语言(Structured Query Language,SQL)中的一个特性,通常指子查询的结果是“单个值”(一行一列)的查询。

目前,针对查询的过滤条件中存在的标量子查询,通常都是作为子计划进行处理的,即在执行查询前,先生成执行计划,然后在执行时将外部查询的每一条记录带入到子计划中进行执行。

然而,上述这种查询方式由于子计划的执行次数较大,因此会影响数据库查询的效率。

发明内容

本申请提供一种查询优化方法、装置及设备,可以有效提升数据库查询的效率。

第一方面,本申请提供一种查询优化方法,该方法包括:

接收查询语句,并确定所述查询语句中是否存在标量子查询;

在所述查询语句中存在标量子查询时,确定所述标量子查询的过滤条件中是否存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定;

若所述标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定,则根据外部查询信息,构造目标子过滤条件;

将所述目标子过滤条件插入所述外部查询信息中,生成目标查询语句,并基于所述目标查询语句,在预设数据库中查找目标数据。

在一些实施例中,所述确定所述标量子查询的过滤条件中是否存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定,包括:

获取所述标量子查询的过滤条件中的各个子过滤条件,以及所述查询语句中的所述外部查询信息;

根据所述外部查询信息,确定所述查询语句中的所述外部查询列;

根据所述各个子过滤条件,以及所述外部查询列,确定所述标量子查询的过滤条件中是否存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定。

在一些实施例中,所述根据所述各个子过滤条件,以及所述外部查询列,确定所述标量子查询的过滤条件中是否存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定,包括:

确定所述各个子过滤条件中是否存在引用所述外部查询列的子过滤条件;

当所述各个子过滤条件中存在引用所述外部查询列的子过滤条件时,确定所述外部查询列是否存在指定值;

当所述外部查询列存在指定值时,确定所述标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定。

在一些实施例中,还包括:

当所述外部查询列不存在指定值时,根据所述各个子过滤条件之间的推算结果,确定所述外部查询列是否存在推算值;

当所述外部查询列存在推算值时,确定所述标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定。

在一些实施例中,所述根据所述外部查询信息,构造目标子过滤条件,包括:

基于所述外部查询列与所述外部查询列的值,构造所述目标子过滤条件。

在一些实施例中,所述将所述目标子过滤条件插入所述外部查询信息中,生成目标查询语句,包括:

将所述目标子过滤条件作为所述查询语句中的外部查询对应的子过滤条件,插入所述外部查询信息中;

基于已插入所述目标子过滤条件的所述外部查询信息,生成所述目标查询语句。

第二方面,本申请提供一种查询优化装置,该装置包括:

接收模块,用于接收查询语句,并确定所述查询语句中是否存在标量子查询;

判断模块,用于在所述查询语句中存在标量子查询时,确定所述标量子查询的过滤条件中是否存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定;

构造模块,用于若所述标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定,则根据外部查询信息,构造目标子过滤条件;

处理模块,用于将所述目标子过滤条件插入所述外部查询信息中,生成目标查询语句,并基于所述目标查询语句,在预设数据库中查找目标数据。

第三方面,本申请提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;

所述存储器用于存储计算机执行指令;

所述处理器用于执行所述存储器存储的计算机执行指令,以实现如第一方面提供的查询优化方法。

第四方面,本申请提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时,实现如第一方面提供的查询优化方法。

第五方面,本申请提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时,实现如第一方面提供的查询优化方法。

本申请提供的查询优化方法、装置及设备,如果查询语句的过滤条件中存在标量子查询,且该标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且该外部查询列的值已确定,则可以根据外部查询信息,构造目标子过滤条件,通过将该目标子过滤条件上推至外部查询的过滤条件中,可以有效减少外部查询的结果集,从而减少子计划的执行次数,提升数据库查询的效率。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。

图1为本申请实施例中提供的一种查询优化方法的步骤流程示意图;

图2为本申请实施例中提供的一种查询优化方法的另一步骤流程示意图;

图3为本申请实施例中提供的一种查询优化装置的程序模块示意图;

图4为本申请实施例提供的一种电子设备的硬件结构示意图。

通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

需要说明的是,本申请实施例中提供的查询优化方法、装置及设备可用于数据库查询技术领域,也可用于除数据库查询技术领域之外的任意领域,本申请对此不做限定。

以下对本申请实施例中涉及的部分术语进行解释:

子查询:在SQL查询中,子查询可以嵌套在另一个查询语句中,用于筛选、聚合、计算和连接数据。根据子查询返回的结果类型,可以将其分为四种不同类型:标量子查询、列子查询、行子查询和表子查询。

标量子查询:标量子查询返回的是单个值,可以作为查询语句中的一个常量使用。

过滤条件:指用于筛选数据的条件,通常在SQL语句的WHERE子句中指定。

外部查询:指包含子查询的查询,它使用子查询的结果作为其输入进行进一步的处理或筛选。

目前对于查询的目标列或者过滤条件中存在的标量子查询,往往都是作为子计划进行处理的,即在执行查询前,先生成执行计划,然后在执行时将外部查询的每一条记录带入到子计划中进行执行。然而这种查询方式,子计划的执行次数较大,从而会影响查询的效率。

面对上述技术问题,本申请实施例中提供了一种查询优化方法,对于查询语句的过滤条件中存在的标量子查询,如果标量子查询的过滤条件中引用了外部查询列,且指定了该外部查询列的具体值,或者能够推导出该外部查询列的具体值,则可将该外部查询列等于该具体值作为一个过滤条件上推至外部查询的过滤条件中。经过上推后,能有效减少外部查询的结果集,从而减少子查询的调用次数,提升查询效率。

以下通过具体实施例对本申请所示的技术方案进行详细说明。需要说明的是,以下几个实施例可以单独存在,也可以相互结合,对于相同或相似的内容,在不同的实施例中不再重复说明。

参照图1,图1为本申请实施例中提供的一种查询优化方法的步骤流程示意图,在本申请一些实施例中,上述查询优化方法包括:

S101、接收查询语句。

在一些实施方式中,当用户或应用程序发送查询请求时,接收器负责接收查询请求。该查询请求通常包括要执行的SQL语句以及其他相关信息,如查询条件、排序方式等。

S102、确定查询语句中是否存在标量子查询。若是,则继续执行S103,若否,则执行S108。

在一些实施方式中,在WHERE子句中,如果存在括号()包围的子查询,那么可能存在标量子查询,需要分析子查询的内容,了解其返回的数据类型和逻辑。其中,标量子查询通常使用逻辑运算符(如AND、OR)与主查询条件进行组合。因此,可以通过检查WHERE子句中是否存在逻辑运算符,以及这些运算符是否与子查询相结合,来确定查询语句中是否存在标量子查询。

另外,标量子查询通常返回布尔值(True或False),用于控制主查询的结果。因此,因此也可以通过查看子查询的返回数据类型是否为布尔值,来确定查询语句中是否存在标量子查询。

S103、确定标量子查询的过滤条件中是否存在引用外部查询列的子过滤条件。若是,则继续执行S104,若否,则执行S108。

其中,外部查询列是指在查询中作为子查询的列。这些列通常来自一个表,并在子查询中作为条件进行筛选。在主查询中,可以使用这些列来进一步筛选结果。

例如,假设有一个名为Customers的表,其中包含用户的姓名和年龄信息。若想要查询所有年龄大于30岁且姓为"Smith"的客户。则可以使用以下查询语句:

SELECT*FROM Customers WHERE Age>30AND LastName IN(SELECT LastNameFROM Customers WHERE Age>30);

在这个例子中,外部查询列是LastName,它来自Customers表。在子查询中,筛选出所有年龄大于30岁的用户,然后在主查询中使用IN运算符将这些结果作为条件进行筛选。

S104、确定外部查询列的值是否已确定。若是,则继续执行S105,若否,则执行S108。

S105、根据外部查询信息,构造目标子过滤条件。

其中,上述外部查询信息可以包括在进行外部查询时,查询所需的数据项以及查询条件等信息。示例性的,外部查询信息通常包括要查询的数据项、查询条件、排序方式、分页信息等。根据这些信息,外部查询可以按照指定的条件从外部数据源中筛选出符合要求的数据,并将结果返回给用户或应用程序。

S106、将目标子过滤条件插入外部查询信息中,生成目标查询语句。

示例性的,假设接收到的查询语句为:

explain select id1 from m1 where id2=(select id1 from m2 wherem2.id2=m1.id2 and m2.id2=10and m1.id3=20);

在上述这个查询语句中,表示从表m1中选择id1列,其中id2列的值等于子查询的结果。子查询是从表m2中选择id1列,其中m2.id2=m1.id2,并且m2.id2=10,m1.id3=20。

其中,上述查询语句中的过滤条件中存在标量子查询id2=subquery,该标量子查询中存在过滤条件m2.id2=m1.id2 and m2.id2=10and m1.id3=20,只有当标量子查询的过滤条件都满足时,外部查询的条件id2=subquery才会满足。

以上述查询语句为例,从子查询的AND条件子项:m2.id2=m1.id2,m2.id2=10,可推导出m1.id2=10,子项m1.id3=20则已经明确指定,因此条件m1.id2=10and m1.id3=20可推导出外部查询的过滤条件中,生成如下目标查询语句:

explain select id1 from m1 where id2=(select id1 from m2 wherem2.id2=m1.id2 and m2.id2=10and m1.id3=20)and m1.id2=10and m1.id3=20。

S107、执行目标查询语句。

在一些实施方式中,可以基于上述目标查询语句,在预设数据库中查找目标数据。

可以理解的是,在子查询中引用外部查询的列并指定具体值时,将这个具体值作为过滤条件上推到外部查询的过滤条件中,这样外部查询可以直接根据这个具体值进行筛选,而不需要执行子查询,从而可以减少子查询的执行次数。

S108、执行查询语句。

在一些实施方式中,可以基于上述查询语句,在预设数据库中查找目标数据。

本申请提供的查询优化方法,针对查询的过滤条件中存在的标量子查询,在满足一定条件的情况下,通过将标量子查询的过滤条件上推至外部查询中,能够有效减少外部查询的结果集,从而减少子计划的执行次数。

基于上述实施例中描述的内容,在本申请一些实施例中,在查询语句中存在标量子查询时,可以先获取标量子查询的过滤条件中的各个子过滤条件,以及查询语句中的外部查询信息;根据该外部查询信息,确定查询语句中的外部查询列,以及根据上述各个子过滤条件以及外部查询列,确定标量子查询的过滤条件中是否存在引用外部查询列的子过滤条件,且该外部查询列的值已确定。

在一些实施方式中,先确定各个子过滤条件中是否存在引用外部查询列的子过滤条件;若是,则确定外部查询列是否存在指定值。

当外部查询列存在指定值时,确定标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且外部查询列的值已确定。

当外部查询列不存在指定值时,根据各个子过滤条件之间的推算结果,确定外部查询列是否存在推算值;若是,则确定标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且外部查询列的值已确定。

在一些实施方式中,可以基于外部查询列与所述外部查询列的值,构造目标子过滤条件。将该目标子过滤条件作为查询语句中的外部查询对应的子过滤条件,插入外部查询信息中,即可生成目标查询语句。

参照图2,图2为本申请实施例中提供的一种查询优化方法的另一步骤流程示意图,在本申请一些实施例中,上述查询优化方法包括:

S201、接收查询语句。

S202、确定查询的过滤条件AND子项中是否存在标量子查询。若是,则继续执行S203,若否,则执行S209。

其中,过滤条件AND子项是一种在数据库查询中使用的条件表达式,用于连接多个条件,表示只有当所有条件都满足时,查询结果才被返回。

在SQL语句中,AND子项通常用于将多个条件组合在一起,这些条件可以是简单的列比较,也可以是更复杂的子查询。通过使用AND子项,可以确保查询结果只包含满足所有条件的行。

S203、获取标量子查询。

S204、确定标量子查询的过滤条件AND子项是否引用了外部查询列。若是,则继续执行S205,若否,则执行S209。

S205、确定上述外部查询列是否被指定具体值,或可推算出具体值。若是,则继续执行S206,若否,则执行S209。

S206、构造目标子过滤条件:外部查询列等于上述具体值。

S207、将目标子过滤条件插入外部查询的过滤条件AND子项中。

S208、执行优化后的查询语句。

S209、执行查询语句。

在本申请实施例中,若查询语句的过滤条件中存在标量子查询,且该标量子查询属于AND的子项,则确定该标量子查询的AND子项的过滤条件中是否引用了外部查询列,且指定了该外部查询列的具体值,或者能够通过其它AND子项条件推导出该外部查询列的具体值,若是,则将上述标量子查询中指定的外部查询列的具体值或者推导出来的具体值作为过滤条件上推到外部查询的AND子项中。经过上推后,能有效减少外部查询的结果集,从而减少子查询的调用次数,提升查询效率。

可以理解的是,假设接收到的查询语句为:

explain analyze select id1 from m1 where id2=(select id1 from m2where m2.id2=m1.id2 and m2.id2=10and m1.id3=20);

在采用上述查询优化方法对上述查询语句进行优化后,可以得到如下的查询语句:

explain analyze select id1 from m1 where id2=(select id1 from m2where m2.id2=m1.id2 and m2.id2=10and m1.id3=20)and m1.id2=10and m1.id3=20。

通过对比可知,在查询语句未优化前,外部查询的每一行的结果都会调用标量子查询,子查询会被执行多次,而在查询语句优化后,由于外部条件中没有满足条件的结果,因此标量子查询可以一次也未被执行,从而使执行效率显著的提高。

本申请提供的查询优化方法,如果查询语句的过滤条件中存在标量子查询,且该标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且该外部查询列的值已确定,则可以根据外部查询信息,构造目标子过滤条件,通过将该目标子过滤条件上推至外部查询的过滤条件中,可以有效减少外部查询的结果集,从而减少子计划的执行次数,提升数据库查询的效率。

基于上述实施例中描述的内容,本申请实施例中还提供一种查询优化装置,参照图3,图3为本申请实施例中提供的一种查询优化装置的程序模块示意图,在一些实施方式中,上述查询优化装置30包括:

接收模块301,用于接收查询语句,并确定所述查询语句中是否存在标量子查询。

判断模块302,用于在所述查询语句中存在标量子查询时,确定所述标量子查询的过滤条件中是否存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定。

构造模块303,用于若所述标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定,则根据外部查询信息,构造目标子过滤条件。

处理模块304,用于将所述目标子过滤条件插入所述外部查询信息中,生成目标查询语句,并基于所述目标查询语句,在预设数据库中查找出目标数据。

本申请提供的查询优化装置,如果查询语句的过滤条件中存在标量子查询,且该标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且该外部查询列的值已确定,则可以根据外部查询信息,构造目标子过滤条件,通过将该目标子过滤条件上推至外部查询的过滤条件中,可以有效减少外部查询的结果集,从而减少子计划的执行次数,提升数据库查询的效率。

在一些实施例中,所述确定所述标量子查询的过滤条件中是否存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定,包括:

获取所述标量子查询的过滤条件中的各个子过滤条件,以及所述查询语句中的所述外部查询信息;

根据所述外部查询信息,确定所述查询语句中的所述外部查询列;

根据所述各个子过滤条件,以及所述外部查询列,确定所述标量子查询的过滤条件中是否存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定。

在一些实施例中,所述根据所述各个子过滤条件,以及所述外部查询列,确定所述标量子查询的过滤条件中是否存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定,包括:

确定所述各个子过滤条件中是否存在引用所述外部查询列的子过滤条件;

当所述各个子过滤条件中存在引用所述外部查询列的子过滤条件时,确定所述外部查询列是否存在指定值;

当所述外部查询列存在指定值时,确定所述标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定。

在一些实施例中,还包括:

当所述外部查询列不存在指定值时,根据所述各个子过滤条件之间的推算结果,确定所述外部查询列是否存在推算值;

当所述外部查询列存在推算值时,确定所述标量子查询的过滤条件中存在引用外部查询列的子过滤条件,且所述外部查询列的值已确定。

在一些实施例中,所述根据所述外部查询信息,构造目标子过滤条件,包括:

基于所述外部查询列与所述外部查询列的值,构造所述目标子过滤条件。

在一些实施例中,所述将所述目标子过滤条件插入所述外部查询信息中,生成目标查询语句,包括:

将所述目标子过滤条件作为所述查询语句中的外部查询对应的子过滤条件,插入所述外部查询信息中;

基于已插入所述目标子过滤条件的所述外部查询信息,生成所述目标查询语句。

需要说明的是,本申请实施例中接收模块301、判断模块302、构造模块303以及处理模块304具体执行的内容可以参阅上述实施例中描述的查询优化方法中的各个步骤,此处不做赘述。

进一步的,基于上述实施例中所描述的内容,本申请实施例中还提供了一种电子设备,该电子设备包括至少一个处理器和存储器;其中,存储器存储计算机执行指令;上述至少一个处理器执行存储器存储的计算机执行指令,以实现如上述实施例中描述的查询优化方法中的各个步骤。

为了更好的理解本申请实施例,参照图4,图4为本申请实施例提供的一种电子设备的硬件结构示意图。

如图4所示,本实施例的电子设备40包括:处理器401以及存储器402;其中:

存储器402,用于存储计算机执行指令;

处理器401,用于执行存储器存储的计算机执行指令,以实现上述实施例中描述的查询优化方法中的各个步骤。

可选地,存储器402既可以是独立的,也可以跟处理器401集成在一起。

当存储器402独立设置时,该设备还包括总线403,用于连接所述存储器402和处理器401。

本申请实施例提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上实施例中描述的查询优化方法中的各个步骤。

本申请实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时,实现如上实施例中描述的查询优化方法中的各个步骤。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本申请各个实施例所述方法的部分步骤。

应理解,上述处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

存储器可能包含高速存储器,也可能还包括非易失性存储,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。

总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。

上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器,电可擦除可编程只读存储器,可擦除可编程只读存储器,可编程只读存储器,只读存储器,磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

技术分类

06120116551277