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

数据查询方法、装置、电子设备及存储介质

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


数据查询方法、装置、电子设备及存储介质

技术领域

本申请涉及分布式数据库技术领域,尤其涉及一种数据查询方法、装置、电子设备及存储介质。

背景技术

随着经济和科技的发展,传统的集中式数据库越来越难以满足数据量日益增长的需要。为适应数字经济的发展,具有高并发、高性能和高可用等特性的分布式数据库应运而生。在分布式数据库中使用最频繁的操作之一就是数据查询。由于分布式数据库要实现数据节点间的数据关联,会增加额外的通信时间和存储空间,因而在分布式环境下,优化数据查询效率显得尤为重要。

然而在现有技术中,在分布式数据库中进行数据查询时,通常是按照查询语句原有的执行逻辑查询数据表,当先查询的数据表较大时,会导致整个查询语句在执行时需要占用较大的通信时间和存储空间,使得查询效率较低,且资源消耗较大。

发明内容

本申请提供了一种数据查询方法、装置、电子设备及存储介质,以解决现有技术中在分布式数据库中进行数据查询时查询效率较低,且资源消耗较大的问题。

第一方面,本申请提供了一种数据查询方法,所述方法包括:

获取目标查询语句,其中,所述目标查询语句关联分布式数据库中的多个数据表;

根据所述目标查询语句的类型,确定所述目标查询语句是否满足预设的执行条件,其中,不同类型的所述目标查询语句对应的所述预设的执行条件不同;

在所述目标查询语句满足所述预设的执行条件的情况下,依次查询第一数据表和剩余数据表中的数据,并根据查询得到的数据确定所述目标查询语句的目标查询结果,其中,所述第一数据表为所述多个数据表中数据量最小的数据表,所述剩余数据表为所述多个数据表中除第一数据表之外剩余的其他数据表。

进一步地,所述目标查询语句包括主查询语句和嵌套在所述主查询语句中的子查询语句;

所述根据所述目标查询语句的类型,确定所述目标查询语句是否满足预设的执行条件,包括:

在所述目标查询语句的类型为第一查询类型的情况下,确定所述第一数据表是否与所述主查询语句关联;

在所述第一数据表与所述主查询语句关联的情况下,确定所述目标查询语句满足所述预设的执行条件。

进一步地,所述目标查询语句包括主查询语句和嵌套在所述主查询语句中的子查询语句;

所述根据所述目标查询语句的类型,确定所述目标查询语句是否满足预设的执行条件,包括:

在所述目标查询语句的类型为第二查询类型或第三查询类型的情况下,确定所述第一数据表是否与所述主查询语句关联,或者所述第一数据表是否与所述子查询语句关联;

在所述第一数据表与所述主查询语句关联,或者所述第一数据表与所述子查询语句关联的情况下,确定所述目标查询语句满足所述预设的执行条件。

进一步地,所述方法还包括:

在所述目标查询语句的类型为所述第三查询类型的情况下,确定所述目标查询语句的关联连接类型,其中,所述关联连接类型包括内连接类型、左连接类型、右连接类型和全连接类型;

在所述关联连接类型为所述内连接类型的情况下,所述第一数据表为与所述主查询语句关联的任一数据表或者与所述子查询语句关联的任一数据表;

在所述关联连接类型为所述左连接类型,且所述子查询语句与所述主查询语句中的左表关联的情况下,所述第一数据表为所述主查询语句中的左表;

在所述关联连接类型为所述左连接类型,且所述子查询语句与所述主查询语句中的右表关联的情况下,所述第一数据表为所述主查询语句中的右表,或者所述子查询语句关联的任一数据表;

在所述关联连接类型为所述右连接类型,且所述子查询语句与所述主查询语句中的右表关联的情况下,所述第一数据表为所述主查询语句中的右表;

在所述关联连接类型为所述右连接类型,且所述子查询语句与所述主查询语句中的左表关联的情况下,所述第一数据表为所述主查询语句中的左表,或者所述子查询语句关联的任一数据表;

在所述关联连接类型为所述全连接类型的情况下,所述第一数据表为与所述主查询语句关联的任一数据表。

进一步地,所述依次查询第一数据表和剩余数据表中的数据,并根据查询得到的数据确定所述目标查询语句的目标查询结果,包括:

向存放所述第一数据表的数据节点发送第一数据查询请求,得到第一中间结果,其中,所述第一数据查询请求用于请求对所述第一数据表进行查询;

基于所述第一中间结果,向存放所述剩余数据表的数据节点发送第二数据查询请求,得到第二中间结果,其中,所述第二数据查询请求用于请求对所述剩余数据表进行查询;

根据所述第一中间结果和所述第二中间结果,确定所述目标查询语句的目标查询结果。

进一步地,所述基于所述第一中间结果,向存放所述剩余数据表的数据节点发送第二数据查询请求,得到第二中间结果,包括:

在所述目标查询语句包括多个子查询语句,且所述第一数据表与任一所述子查询语句关联的情况下,基于所述第一中间结果,向存放第二数据表的数据节点发送第三数据查询请求,得到第三中间结果,其中,所述第二数据表为所述剩余数据表中与所述第一数据表位于同一子查询语句中的数据表,所述第三数据查询请求用于请求对所述第二数据表进行查询;

基于所述第三中间结果,向存放第三数据表的数据节点发送第四数据查询请求,得到所述第二中间结果,其中,所述第三数据表为所述剩余数据表中与所述第一数据表位于不同子查询语句中的数据表,所述第四数据查询请求用于请求对所述第三数据表进行查询。

进一步地,在所述依次查询第一数据表和剩余数据表中的数据,并根据查询得到的数据确定所述目标查询语句的目标查询结果之后,所述方法还包括:

将所述目标查询语句的目标查询结果进行输出并显示。

第二方面,本申请提供了一种数据查询装置,所述装置包括:

获取模块,用于获取目标查询语句,其中,所述目标查询语句关联分布式数据库中的多个数据表;

第一确定模块,用于根据所述目标查询语句的类型,确定所述目标查询语句是否满足预设的执行条件,其中,不同类型的所述目标查询语句对应的所述预设的执行条件不同;

第二确定模块,用于在所述目标查询语句满足所述预设的执行条件的情况下,依次查询第一数据表和剩余数据表中的数据,并根据查询得到的数据确定所述目标查询语句的目标查询结果,其中,所述第一数据表为所述多个数据表中数据量最小的数据表,所述剩余数据表为所述多个数据表中除第一数据表之外剩余的其他数据表。

第三方面,本申请提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现上述任一项所述的数据查询方法的步骤。

第四方面,本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的数据查询方法的步骤。

本申请实施例提供的上述技术方案与现有技术相比具有如下优点:本申请实施例提供的该方法,通过获取目标查询语句,其中,所述目标查询语句关联分布式数据库中的多个数据表;根据所述目标查询语句的类型,确定所述目标查询语句是否满足预设的执行条件,其中,不同类型的所述目标查询语句对应的所述预设的执行条件不同;在所述目标查询语句满足所述预设的执行条件的情况下,依次查询第一数据表和剩余数据表中的数据,并根据查询得到的数据确定所述目标查询语句的目标查询结果,其中,所述第一数据表为所述多个数据表中数据量最小的数据表,所述剩余数据表为所述多个数据表中除第一数据表之外剩余的其他数据表。通过上述方式,在需要对分布式数据库中的多个数据表进行数据查询,且目标查询语句满足预设的执行条件时,可以优先查询数据量最小的第一数据表,再查询数据量较大的剩余数据表,由此可以降低查询过程整体的通信时间和存储空间,从而使得查询效率有所提高,且资源消耗有所降低。

附图说明

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

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。

图1为本申请实施例提供的一种数据查询方法的流程示意图;

图2为本申请实施例提供的一种数据查询装置的结构示意图;

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

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本发明。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。

参见图1,图1为本申请实施例提供的一种数据查询方法的流程示意图。如图1所示,该数据查询方法包括如下步骤:

步骤101、获取目标查询语句,其中,目标查询语句关联分布式数据库中的多个数据表。

需要说明的是,本申请实施例提供的数据查询方法可用于数据库、分布式数据库、中间件、分布式中间件、分布式存储等领域。为方便理解,后续实施例以分布式数据库为例进行说明。

具体地,上述目标查询语句是指对分布式数据库中的数据进行查询的语句,该目标查询语句可以关联分布式数据库中的多个数据表,通过对多个数据表的数据查询结果,从而分析得到目标查询语句最终的查询结果。

目标查询语句的获取方式,可以通过接收用户的输入操作获取,也可以通过接收数据查询请求,从数据查询请求中解析获取,本申请实施例不做具体限定。

步骤102、根据目标查询语句的类型,确定目标查询语句是否满足预设的执行条件,其中,不同类型的目标查询语句对应的预设的执行条件不同。

具体地,上述目标查询语句的类型可以包括但不限于第一查询类型(如包含SELECT LIST子查询语句的查询类型)、第二查询类型(如包含WHERE子查询语句的查询类型)和第三查询类型(如包含ON子查询语句的查询类型)等。由于不同类型的目标查询语句对应的预设的执行条件不同,因而需要根据目标查询语句的类型,确定目标查询语句对应的预设的执行条件,并确定目标查询语句是否满足该预设的执行条件。如果目标查询语句满足该预设的执行条件,则执行步骤103;如果目标查询语句不满足该预设的执行条件,则按照原有的执行逻辑查询数据表,获取查询结果。

步骤103、在目标查询语句满足预设的执行条件的情况下,依次查询第一数据表和剩余数据表中的数据,并根据查询得到的数据确定目标查询语句的目标查询结果,其中,第一数据表为多个数据表中数据量最小的数据表,剩余数据表为多个数据表中除第一数据表之外剩余的其他数据表。

在该步骤中,当目标查询语句满足预设的执行条件时,可以优先查询该目标查询语句关联的多个数据表中数据量最小的第一数据表,以获取到第一数据表中的数据,再查询多个数据表中数据量较大的其他剩余数据表,最终得到目标查询语句的目标查询结果。

在本实施例中,在需要对分布式数据库中的多个数据表进行数据查询,且目标查询语句满足预设的执行条件时,可以优先查询数据量最小的第一数据表,再查询数据量较大的剩余数据表,由此可以降低查询过程整体的通信时间和存储空间,从而使得查询效率有所提高,且资源消耗有所降低。

进一步地,目标查询语句包括主查询语句和嵌套在主查询语句中的子查询语句;

上述步骤102、根据目标查询语句的类型,确定目标查询语句是否满足预设的执行条件,具体包括:

在目标查询语句的类型为第一查询类型的情况下,确定第一数据表是否与主查询语句关联;

在第一数据表与主查询语句关联的情况下,确定目标查询语句满足预设的执行条件。

具体地,上述第一查询类型可以理解为主查询语句中嵌套的子查询语句为SELECTLIST子查询语句的查询类型。

在一实施例中,当目标查询语句的类型为第一查询类型时,可以确定第一数据表是否与主查询语句关联,如果第一数据表与主查询语句关联,则可以确定目标查询语句满足预设的执行条件;如果第一数据表不与主查询语句关联,则可以确定目标查询语句不满足预设的执行条件。

例如,假设目标查询语句为select t1.*,(select b from t2 where t2.a=t1.a)from t1,且t1表为小表(即第一数据表),t2表为大表。由此可见,在该目标查询语句中,第一数据表t1与主查询语句关联,因而该目标查询语句满足预设的执行条件。此时,该目标查询语句的执行逻辑如下:

步骤1、查询t1表,下发数据节点查询语句:select*from t1;

步骤2、利用关联条件和步骤1中查到的t1表数据,查询需要的t2表数据,下发数据节点查询语句:select*from t2 where t2.a in(t1表字段a数据);

步骤3、计算子查询,输出结果。

在该举例中,t1和t2是等值关联,当然其他非等值关联关系也可采用类似方法,核心还是减少t2表查询的数据,在此不再赘述。假设t1表为大表,t2表为小表(即第一数据表),则第一数据表t2不与主查询语句关联,因而此时该目标查询语句不满足预设的执行条件。

在本实施例中,对于第一查询类型的目标查询语句,因为目标查询语句的结果集行数由主查询决定,所以只能将第一数据表与主查询语句关联,以主查询结果驱动子查询,即小表驱动大表,以此降低查询过程整体的通信时间和存储空间。

进一步地,目标查询语句包括主查询语句和嵌套在主查询语句中的子查询语句;

上述步骤102、根据目标查询语句的类型,确定目标查询语句是否满足预设的执行条件,具体包括:

在目标查询语句的类型为第二查询类型或第三查询类型的情况下,确定第一数据表是否与主查询语句关联,或者第一数据表是否与子查询语句关联;

在第一数据表与主查询语句关联,或者第一数据表与子查询语句关联的情况下,确定目标查询语句满足预设的执行条件。

具体地,上述第二查询类型可以理解为主查询语句中嵌套的子查询语句为WHERE子查询语句的查询类型。上述第三查询类型可以理解为主查询语句中嵌套的子查询语句为ON子查询语句的查询类型。

在一实施例中,当目标查询语句的类型为第二查询类型或第三查询类型时,可以确定第一数据表是否与主查询语句关联,或者第一数据表是否与子查询语句关联,如果确定第一数据表与主查询语句关联,或者第一数据表与子查询语句关联,则可以确定目标查询语句满足预设的执行条件;如果第一数据表既不与主查询语句关联,也不与子查询语句关联,则可以确定目标查询语句不满足预设的执行条件。

例如,假设第二查询类型的目标查询语句为select*from t1 where exists(select b from t2 where t1.a=t2.a),且t1表为小表(即第一数据表),t2表为大表。由此可见,在该目标查询语句中,第一数据表t1与主查询语句关联,因而该目标查询语句满足预设的执行条件。此时,该目标查询语句的执行逻辑如下:

步骤1、查询t1表,下发数据节点查询语句:select*from t1;

步骤2、利用关联条件和步骤1中查到的t1表数据,查询需要的t2表数据,下发数据节点查询语句:select*from t2 where t2.a in(t1表字段a数据);

步骤3、计算exists子查询,输出结果。

继续基于该举例进行说明,假设t1表为大表,t2表为小表(即第一数据表),则在该目标查询语句中,第一数据表t2与子查询语句关联,因而该目标查询语句满足预设的执行条件。此时,该目标查询语句的执行逻辑如下:

步骤1、查询t2表,下发数据节点查询语句:select a from t2;

步骤2、利用关联条件和步骤1中查到的t2表数据,查询需要的t1表数据,下发数据节点查询语句:select*from t1 where t1.a in(t2表字段a数据);

步骤3、将步骤2中查询到的数据直接作为结果输出。

又例如,假设第三查询类型的目标查询语句为select*from t1join t2 on t1.a=t2.a and exists(select c from t3 where t3.b=t1.b)。由于是inner join(即内连接类型),on条件可以放到where条件中。所以该目标查询语句的执行逻辑与上述举例中的第二查询类型的目标查询语句相同,在此不再赘述。

在本实施例中,对于第二查询类型或者第三查询类型的目标查询语句,支持内外双向驱动,即若第一数据表与子查询语句关联,则先子查询后主查询,利用子查询过滤主查询或分批过滤主查询。若第一数据表与主查询语句关联,则先主查询后子查询,利用主查询过滤子查询或分批过滤子查询。这样可以实现小表驱动大表,有效降低查询过程整体的通信时间和存储空间。

进一步地,该方法还包括:

在目标查询语句的类型为第三查询类型的情况下,确定目标查询语句的关联连接类型,其中,关联连接类型包括内连接类型、左连接类型、右连接类型和全连接类型;

在关联连接类型为内连接类型的情况下,第一数据表为与主查询语句关联的任一数据表或者与子查询语句关联的任一数据表;

在关联连接类型为左连接类型,且子查询语句与主查询语句中的左表关联的情况下,第一数据表为主查询语句中的左表;

在关联连接类型为左连接类型,且子查询语句与主查询语句中的右表关联的情况下,第一数据表为主查询语句中的右表,或者子查询语句关联的任一数据表;

在关联连接类型为右连接类型,且子查询语句与主查询语句中的右表关联的情况下,第一数据表为主查询语句中的右表;

在关联连接类型为右连接类型,且子查询语句与主查询语句中的左表关联的情况下,第一数据表为主查询语句中的左表,或者子查询语句关联的任一数据表;

在关联连接类型为全连接类型的情况下,第一数据表为与主查询语句关联的任一数据表。

在一实施例中,第三查询类型的目标查询语句的关联连接类型可以包括内连接类型、左连接类型、右连接类型和全连接类型。其中,内连接是指inner join,只返回两个表中联结字段相等的行;左联接是指left join,返回包括左表中的所有记录和右表中联结字段相等的记录;右联接是指right join,返回包括右表中的所有记录和左表中联结字段相等的记录;全连接是指full join,返回左表和右表中的所有记录。对于不同的关联连接类型,第一数据表位置存在差异。

具体而言,当关联连接类型为内连接类型时,第一数据表可以为与主查询语句关联的任一数据表或者与子查询语句关联的任一数据表,具体可参见目标查询语句为第二查询类型中的举例,在此不再赘述。

当关联连接类型为左连接类型,且子查询语句与主查询语句中的左表关联时,第一数据表为主查询语句中的左表。

例如,假设目标查询语句为select*from t1 left join t2 on t1.a=t2.a andexists(select c from t3 where t3.b=t1.b),且t1为小表(即第一数据表),t2和t3为大表。此时,该目标查询语句的执行逻辑如下:

步骤1、查询t1表,下发数据节点查询语句:select*from t1;

步骤2、利用关联条件和步骤1中查到的t1表数据,查询需要的t2表数据,下发数据节点查询语句:select*from t2 where t1.a in(t1表字段a数据);

步骤3、利用查询到的t1表数据和关联条件,查询需要的t3表数据,下发数据节点查询语句:select*from t3 where t3.b in(t1表字段b数据);

步骤4、计算left join和子查询,输出结果。

又例如,假设目标查询语句为select*from t1 left join t2 on t1.a=t2.aand exists(select c from t3 where t2.b=t3.b),且t1为小表(即第一数据表),t2和t3为大表。此时,该目标查询语句的执行逻辑如下:

步骤1、查询t1表,下发数据节点查询语句:select*from t1;

步骤2、利用关联条件和步骤1中查到的t1表数据,查询需要的t2表数据,下发数据节点查询语句:select*from t2 where t1.a in(t1表字段a数据);

步骤3、利用查询到的t2表数据和关联条件,查询需要的t3表数据,下发数据节点查询语句:select b from t3 where t3.b in(t2表字段b数据);

步骤4、计算left join和子查询,输出结果。

需要说明的是,left join表示该目标查询语句的关联连接类型为左连接类型,其中,t1为左表,t2为右表。由于子查询位于left join的on条件中,且子查询语句与主查询语句中的左表关联,只能用主查询驱动子查询;反之,查询结果发生错误。所以,在本举例中第一数据表为主查询语句中的左表,即t1表必须为小表。若条件不成立,则不能使用本申请提供的数据查询方法进行优化。

当关联连接类型为左连接类型,且子查询语句与主查询语句中的右表关联时,第一数据表为主查询语句中的右表,或者子查询语句关联的任一数据表。

例如,假设目标查询语句为select*from t1 left join t2 on t1.a=t2.a andexists(select c from t3 where t2.b=t3.b),且t1为大表,t2为大表,t3为小表(即第一数据表),此时,该目标查询语句的执行逻辑如下:

步骤1、查询t1表,下发数据节点查询语句:select*from t1;

步骤2、查询t3表,下发数据节点查询语句:select*from t3;

步骤3、利用查询到的t3表数据和关联条件,查询需要的t2表数据,下发数据节点查询语句:select*from t2 where t2.b in(t3表字段b数据);

步骤4、计算left join和子查询,输出结果。

需要说明的是,left join表示该目标查询语句的关联连接类型为左连接类型,其中,t1为左表,t2为右表。由于子查询位于left join的on条件中,且子查询和left join右表关联,此时既可用右表过滤子查询,也可用子查询过滤右表。所以,在本举例中第一数据表为主查询语句中的t2表,当然,还可以将子查询语句中的t3表作为第一数据表进行数据查询。

同理,当子查询位于right join的on条件中,且子查询和right join右表关联时,只能用主查询驱动子查询。反之,查询结果发生错误。所以,在关联连接类型为右连接类型,且子查询语句与主查询语句中的右表关联时,第一数据表为主查询语句中的右表。若条件不成立,则不能使用本专利中的方法优化。

同理,子查询位于right join的on条件中,且子查询和right join左表关联,此时既可用左表过滤子查询,也可用子查询过滤左表。所以,在关联连接类型为右连接类型,且子查询语句与主查询语句中的左表关联时,第一数据表为主查询语句中的左表,或者子查询语句关联的任一数据表。

当关联连接类型为全连接类型时,由于只能以主查询驱动子查询,所以第一数据表为与主查询语句关联的任一数据表。

在本实施例中,可以根据第三查询类型的目标查询语句的关联连接类型,进一步判断第一数据表是否为主查询语句或者子查询语句中对应的数据表,进一步判断第三查询类型的目标查询语句是否满足预设的执行条件,从而保证查询结果的准确性。

进一步地,上述步骤103、依次查询第一数据表和剩余数据表中的数据,并根据查询得到的数据确定目标查询语句的目标查询结果,具体包括:

向存放第一数据表的数据节点发送第一数据查询请求,得到第一中间结果,其中,第一数据查询请求用于请求对第一数据表进行查询;

基于第一中间结果,向存放剩余数据表的数据节点发送第二数据查询请求,得到第二中间结果,其中,第二数据查询请求用于请求对剩余数据表进行查询;

根据第一中间结果和第二中间结果,确定目标查询语句的目标查询结果。

在一实施例中,当目标查询语句满足预设的执行条件时,可以先向存放第一数据表的数据节点发送第一数据查询请求,得到第一中间结果,再基于该第一中间结果,向存放剩余数据表的数据节点发送第二数据查询请求,得到第二中间结果,进而根据第一中间结果和第二中间结果,确定出目标查询语句的目标查询结果。这样,通过优先查询数据量最小的第一数据表,再查询数据量较大的剩余数据表,由此可以降低查询过程整体的通信时间和存储空间,从而使得查询效率有所提高,且资源消耗有所降低。

进一步地,上述步骤、基于第一中间结果,向存放剩余数据表的数据节点发送第二数据查询请求,得到第二中间结果,具体包括:

在目标查询语句包括多个子查询语句,且第一数据表与任一子查询语句关联的情况下,基于第一中间结果,向存放第二数据表的数据节点发送第三数据查询请求,得到第三中间结果,其中,第二数据表为剩余数据表中与第一数据表位于同一子查询语句中的数据表,第三数据查询请求用于请求对第二数据表进行查询;

基于第三中间结果,向存放第三数据表的数据节点发送第四数据查询请求,得到第二中间结果,其中,第三数据表为剩余数据表中与第一数据表位于不同子查询语句中的数据表,第四数据查询请求用于请求对第三数据表进行查询。

在一实施例中,当目标查询语句包括多个子查询语句,且第一数据表与任一子查询语句关联时,在向存放第一数据表的数据节点发送第一数据查询请求,得到第一中间结果之后,可以基于第一中间结果,向存放与第一数据表位于同一子查询语句中的第二数据表的数据节点发送第三数据查询请求,得到第三中间结果,再基于第三中间结果,向存放与第一数据表位于不同子查询语句中的第三数据表的数据节点发送第四数据查询请求,得到第二中间结果。需要说明的是,此处的第二数据表和第三数据表可以表示一个数据表,也可以表示多个数据表,在此不做限定。

例如,假设目标查询语句为select*from t1 where exists(select c from t2where t1.a=t2.a)and exists(select c from t3where t3.b=t1.b),且t1为大表,t2为小表(即第一数据表),t3为大表。由此可见,在该目标查询语句中,存在2个子查询语句,且第一数据表t2在第一个子查询语句中与t1表关联,因而在查询完t2表后,先查询t1表,再查询t3表。

此时,该目标查询语句的执行逻辑如下:

步骤1、查询t2表,下发数据节点查询语句:select*from t2;

步骤2、利用关联条件和步骤1中查到的t2表数据,查询需要的t1表数据,下发数据节点查询语句:select*from t1 where t1.a in(t2表字段a数据);

步骤3、利用查询到的t1表数据和关联条件,查询需要的t3表数据,下发数据节点查询语句:select*from t3 where t3.b in(t1表字段b数据);

步骤4、计算子查询,输出结果。

这样,既可以有效提高查询效率,有可以有效保证查询结果的准确性。

进一步地,在上述步骤103、依次查询第一数据表和剩余数据表中的数据,并根据查询得到的数据确定目标查询语句的目标查询结果之后,该方法还包括:

将目标查询语句的目标查询结果进行输出并显示。

在一实施例中,在依次查询第一数据表和剩余数据表中的数据,并根据查询得到的数据确定目标查询语句的目标查询结果之后,还可以将目标查询语句的目标查询结果进行输出并显示,方便用户查询,以及利用该目标查询结果进行后续计算。

参见图2,图2为本申请实施例提供的一种数据查询装置的结构示意图。如图2所示,该数据查询装置200可以包括:

获取模块201,用于获取目标查询语句,其中,目标查询语句关联分布式数据库中的多个数据表;

第一确定模块202,用于根据目标查询语句的类型,确定目标查询语句是否满足预设的执行条件,其中,不同类型的目标查询语句对应的预设的执行条件不同;

第二确定模块203,用于在目标查询语句满足预设的执行条件的情况下,依次查询第一数据表和剩余数据表中的数据,并根据查询得到的数据确定目标查询语句的目标查询结果,其中,第一数据表为多个数据表中数据量最小的数据表,剩余数据表为多个数据表中除第一数据表之外剩余的其他数据表。

进一步地,目标查询语句包括主查询语句和嵌套在主查询语句中的子查询语句;第一确定模块202包括:

第一确定子模块,用于在目标查询语句的类型为第一查询类型的情况下,确定第一数据表是否与主查询语句关联;

第二确定子模块,用于在第一数据表与主查询语句关联的情况下,确定目标查询语句满足预设的执行条件。

进一步地,目标查询语句包括主查询语句和嵌套在主查询语句中的子查询语句;第一确定模块202还包括:

第三确定子模块,用于在目标查询语句的类型为第二查询类型或第三查询类型的情况下,确定第一数据表是否与主查询语句关联,或者第一数据表是否与子查询语句关联;

第四确定子模块,用于在第一数据表与主查询语句关联,或者第一数据表与子查询语句关联的情况下,确定目标查询语句满足预设的执行条件。

进一步地,在目标查询语句的类型为第三查询类型的情况下,确定目标查询语句的关联连接类型,其中,关联连接类型包括内连接类型、左连接类型、右连接类型和全连接类型;

在关联连接类型为内连接类型的情况下,第一数据表为与主查询语句关联的任一数据表或者与子查询语句关联的任一数据表;

在关联连接类型为左连接类型,且子查询语句与主查询语句中的左表关联的情况下,第一数据表为主查询语句中的左表;

在关联连接类型为左连接类型,且子查询语句与主查询语句中的右表关联的情况下,第一数据表为主查询语句中的右表,或者子查询语句关联的任一数据表;

在关联连接类型为右连接类型,且子查询语句与主查询语句中的右表关联的情况下,第一数据表为主查询语句中的右表;

在关联连接类型为右连接类型,且子查询语句与主查询语句中的左表关联的情况下,第一数据表为主查询语句中的左表,或者子查询语句关联的任一数据表;

在关联连接类型为全连接类型的情况下,第一数据表为与主查询语句关联的任一数据表。

进一步地,第二确定模块203包括:

第一发送子模块,用于向存放第一数据表的数据节点发送第一数据查询请求,得到第一中间结果,其中,第一数据查询请求用于请求对第一数据表进行查询;

第二发送子模块,用于基于第一中间结果,向存放剩余数据表的数据节点发送第二数据查询请求,得到第二中间结果,其中,第二数据查询请求用于请求对剩余数据表进行查询;

第五确定子模块,用于根据第一中间结果和第二中间结果,确定目标查询语句的目标查询结果。

进一步地,第二发送子模块包括:

第一发送单元,用于在目标查询语句包括多个子查询语句,且第一数据表与任一子查询语句关联的情况下,基于第一中间结果,向存放第二数据表的数据节点发送第三数据查询请求,得到第三中间结果,其中,第二数据表为剩余数据表中与第一数据表位于同一子查询语句中的数据表,第三数据查询请求用于请求对第二数据表进行查询;

第二发送单元,用于基于第三中间结果,向存放第三数据表的数据节点发送第四数据查询请求,得到第二中间结果,其中,第三数据表为剩余数据表中与第一数据表位于不同子查询语句中的数据表,第四数据查询请求用于请求对第三数据表进行查询。

进一步地,该装置200还包括:

输出与显示模块,用于将目标查询语句的目标查询结果进行输出并显示。

需要说明的是,该装置200可以实现上述任一项的数据查询方法的步骤,且能达到相同的技术效果,在此不再赘述。

如图3所示,本申请实施例还提供了一种电子设备,包括处理器311、通信接口312、存储器313和通信总线314,其中,处理器311,通信接口312,存储器313通过通信总线314完成相互间的通信;

存储器313,用于存放计算机程序;

在本申请一个实施例中,处理器311,用于执行存储器313上所存放的程序时,实现前述任意一个方法实施例提供的数据查询方法,包括:

获取目标查询语句,其中,目标查询语句关联分布式数据库中的多个数据表;

根据目标查询语句的类型,确定目标查询语句是否满足预设的执行条件,其中,不同类型的目标查询语句对应的预设的执行条件不同;

在目标查询语句满足预设的执行条件的情况下,依次查询第一数据表和剩余数据表中的数据,并根据查询得到的数据确定目标查询语句的目标查询结果,其中,第一数据表为多个数据表中数据量最小的数据表,剩余数据表为多个数据表中除第一数据表之外剩余的其他数据表。

本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如前述任意一个方法实施例提供的数据查询方法的步骤。

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

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

应理解的是,文中使用的术语仅出于描述特定示例实施方式的目的,而无意于进行限制。除非上下文另外明确地指出,否则如文中使用的单数形式“一”、“一个”以及“所述”也可以表示包括复数形式。术语“包括”、“包含”、“含有”以及“具有”是包含性的,并且因此指明所陈述的特征、步骤、操作、元件和/或部件的存在,但并不排除存在或者添加一个或多个其它特征、步骤、操作、元件、部件、和/或它们的组合。文中描述的方法步骤、过程、以及操作不解释为必须要求它们以所描述或说明的特定顺序执行,除非明确指出执行顺序。还应当理解,可以使用另外或者替代的步骤。

以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。

技术分类

06120116570993