CN114416884B - 连接分区表的方法和装置 - Google Patents
连接分区表的方法和装置 Download PDFInfo
- Publication number
- CN114416884B CN114416884B CN202210308445.0A CN202210308445A CN114416884B CN 114416884 B CN114416884 B CN 114416884B CN 202210308445 A CN202210308445 A CN 202210308445A CN 114416884 B CN114416884 B CN 114416884B
- Authority
- CN
- China
- Prior art keywords
- partition
- result set
- connection
- partition table
- intelligent
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
Abstract
本公开披露了一种连接分区表的方法和装置。该方法包括:接收数据库操作语句,所述数据库操作语句包括第一分区表和第二分区表的连接操作,以及所述第一分区表的分区裁剪操作;基于所述数据库操作语句,对所述第一分区表进行分区裁剪,得到所述第一分区表对应的第一结果集;若所述第一结果集和所述第二分区表满足第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二分区表。
Description
技术领域
本公开涉及数据库技术领域,并且更为具体地,涉及一种连接分区表的方法和装置。
背景技术
数据库分区技术可以将数据表划分成逻辑或物理上独立的多个分区,其中,经过划分的数据表可以称为分区表。某些场景下,在对分区表进行连接的时候,可以使用智能分区连接(partition-wise join)技术来减少数据传输和需要连接的数据量,以提高连接速度,进而提升执行性能。
但是,使用智能分区连接技术来优化分区表的连接时,需要满足一定的条件,例如,待连接的两个分区表中任意一个的分区键上需要存在等值连接条件。如果有条件不满足就无法使用智能分区连接技术来优化分区表的连接,导致智能分区连接技术的应用场景受到限制。
发明内容
有鉴于此,本公开提供一种连接分区表的方法和装置,以扩展智能分区连接技术的应用场景。
第一方面,提供一种连接分区表的方法,包括:接收数据库操作语句,所述数据库操作语句包括第一分区表和第二分区表的连接操作,以及所述第一分区表的分区裁剪操作;基于所述数据库操作语句,对所述第一分区表进行分区裁剪,得到所述第一分区表对应的第一结果集;若所述第一结果集和所述第二分区表满足第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二分区表。
可选地,数据库操作语句还包括所述第二分区表的分区裁剪操作,所述方法还包括:基于所述数据库操作语句,对所述第二分区表进行分区裁剪,得到所述第二分区表对应的第二结果集;所述若所述第一结果集和所述第二分区表满足第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二分区表,包括:若所述第一结果集和所述第二结果集满足所述第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二结果集。
可选地,第一优化条件包括:待连接的两个分区表中至少一个的分区键上存在等值连接条件。
可选地,智能分区连接技术包括完全智能分区连接技术和部分智能分区连接技术,所述方法进一步包括:判断所述第一结果集和所述第二分区表是否满足第二优化条件,所述第二优化条件包括:待连接的两个分区表的分区方式相同,且所述待连接的两个分区表对应的分区键上存在等值连接条件,所述若所述第一结果集和所述第二分区表满足所述第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二分区表,包括:若所述第一结果集和所述第二分区表满足所述第二优化条件,使用所述完全智能分区连接技术来连接所述第一结果集和所述第二分区表;若所述第一结果集和所述第二分区表满足所述第一优化条件但不满足所述第二优化条件,使用所述部分智能分区连接技术来连接所述第一结果集和所述第二分区表。
可选地,待连接的两个分区表的分区方式相同包括:所述待连接的两个分区表的分区类型、分区数目、以及分区的边界值均相同。
可选地,待连接的两个分区表中至少一个为二级或多级分区表时,所述等值连接条件包括所述二级或多级分区表中的每一级分区键对应的等值连接条件。
可选地,数据库操作语句为SQL语句。
第二方面,提供一种连接分区表的装置,包括:接收模块,用于接收数据库操作语句,所述数据库操作语句包括第一分区表和第二分区表的连接操作,以及所述第一分区表的分区裁剪操作;第一分区裁剪模块,用于基于所述数据库操作语句,对所述第一分区表进行分区裁剪,得到所述第一分区表对应的第一结果集;连接模块,用于若所述第一结果集和所述第二分区表满足第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二分区表。
可选地,数据库操作语句还包括所述第二分区表的分区裁剪操作,所述装置还包括:第二分区裁剪模块,用于基于所述数据库操作语句,对所述第二分区表进行分区裁剪,得到所述第二分区表对应的第二结果集;所述连接模块用于:若所述第一结果集和所述第二结果集满足所述第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二结果集。
可选地,第一优化条件包括:待连接的两个分区表中至少一个的分区键上存在等值连接条件。
可选地,智能分区连接技术包括完全智能分区连接技术和部分智能分区连接技术,所述装置还包括:判断模块,用于判断所述第一结果集和所述第二分区表是否满足第二优化条件,所述第二优化条件包括:待连接的两个分区表的分区方式相同,且所述待连接的两个分区表对应的分区键上存在等值连接条件,所述连接模块进一步用于:若所述第一结果集和所述第二分区表满足所述第二优化条件,使用所述完全智能分区连接技术来连接所述第一结果集和所述第二分区表;若所述第一结果集和所述第二分区表满足所述第一优化条件但不满足所述第二优化条件,使用所述部分智能分区连接技术来连接所述第一结果集和所述第二分区表。
可选地,待连接的两个分区表的分区方式相同包括:所述待连接的两个分区表的分区类型、分区数目、以及分区的边界值均相同。
可选地,待连接的两个分区表中至少一个为二级或多级分区表时,所述等值连接条件包括所述二级或多级分区表中的每一级分区键对应的等值连接条件。
可选地,数据库操作语句为SQL语句。
第三方面,提供一种连接分区表的装置,包括:存储器,用于存储指令;处理器,用于执行存储器中存储的指令,以执行如第一方面所述的方法中的部分或全部步骤。
第四方面,提供一种计算机可读存储介质,其上存储有可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法中的部分或全部步骤。
第五方面,提供一种计算机程序产品,包括可执行代码,当所述可执行代码被执行时,能够实现如第一方面所述的方法中的部分或全部步骤。
本公开实施例中,当数据库操作语句中包括第一分区表的分区裁剪操作时,在确定是否能够使用智能分区连接技术来优化第一分区表和第二分区表的连接之前,先利用分区裁剪得到第一分区表对应的第一结果集,进而基于第一结果集确定是否能够使用智能分区连接技术。换句话说,本公开实施例将分区裁剪引入智能分区连接的可行性判断中,当第一结果集和第二分区表满足第一优化条件时,便可以使用智能分区连接技术进行分区表连接的优化,使得智能分区连接技术的应用场景得到扩展。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对本公开实施例中所需要使用的附图进行说明。
图1为本公开一实施例提供的连接分区表的方法的流程示意图。
图2为本公开一实施例提供的连接分区表的示例图。
图3为本公开另一实施例提供的连接分区表的示例图。
图4为本公开另一实施例提供的连接分区表的方法的流程示意图。
图5为本公开又一实施例提供的连接分区表的示例图。
图6为本公开又一实施例提供的连接分区表的方法的流程示意图。
图7为本公开一实施例提供的连接分区表的装置的结构示意图。
图8为本公开另一实施例提供的连接分区表的装置的结构示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本公开一部分实施例,而不是全部的实施例。
为了便于理解,先对本公开实施例涉及的一些相关技术知识进行介绍。以下相关技术作为可选方案与本公开实施例的技术方案可以进行任意结合,其均属于本公开实施例的保护范围。本公开实施例包括以下内容中的至少部分内容。
数据库分区及分区表
为了在特定的数据库操作中减少数据读写的总量以缩短响应时间,可以在数据库系统中采用数据库分区技术。数据库分区技术可以将数据表按照特定的规则划分成逻辑上或物理上独立的多个分区。需要说明的是,该多个分区并不是生成新的数据表,而是将数据表中的数据分摊到不同的硬盘、系统或是不同服务器存储介质中,实际上还是一张数据表。
在一些实施例中,将数据表按照特定的规则划分为多个分区,可以是指,按照分区键(partition key)将数据表划分为多个分区。分区键可以是指数据表中用于决定数据行属于哪个分区的一个或一组数据列,是对数据进行分区的判断依据。例如,某数据表可以按照日期列将数据表划分为多个分区,该日期列即为分区键,其可以将不同日期的数据分配至不同的分区中。
按照不同的划分规则,分区可以包括不同的分区类型。例如,分区可以包括水平分区和垂直分区。或者,分区可以包括范围(range)分区、列表(list)分区、散列(hash)分区、组合分区等,在一些实施例中,组合分区也可以称为复合分区。其中,range分区中的每个分区都由一个分区键值范围指定,例如,对于以日期列作为分区键的数据表,“2022年1月”这一分区可以包含分区键值为从“2022年1月1日”到“2022年1月31日”的行。list分区与range分区类似,区别在于每个分区都由一个分区键值列表(或称,离散值集合)指定,例如,对于以地区列作为分区键的数据表,“欧洲”这一分区可能包含值“英国”、“瑞士”等。hash分区可以是指将hash算法用于分区键来确定指定行所在的分区。组合分区可以包括多种,例如range-hash组合分区、range-list组合分区等。
经过数据库分区技术划分的数据表可以称为分区表(partition table)。在一些实施例中,分区表可以包括一级分区表、二级分区表和多级分区表。二级分区表可以理解为在一级分区表的基础上,按照新的分区键进行二级分区,形成二级分区表。换句话说,一级分区可以将一个分区表分为多个分区,二级分区则是在每个分区内按照另一个分区键再进行分区。多级分区表的概念类似于二级分区表,此处不再赘述。下面给出一个二级分区表的示例。
create table t1 (c1 int, c2 int, c3 int, c4 int)
partition by range (c1) subpartition by list (c2)
(
partition t1_p1 values less than (100)
(
subpartition t1_p1_sp1 values (1,2,3,4,5),
subpartition t1_p1_sp2 values (6,7,8,9,10)
),
partition t1_p2 values less than (200)
(
subpartition t1_p2_sp1 values (1,2,3,4,5),
subpartition t1_p2_sp2 values (6,7,8,9,10)
),
partition t1_p3 values less than (300)
(
subpartition t1_p3_sp1 values (1,2,3,4,5),
subpartition t1_p3_sp2 values (6,7,8,9,10)
)
).
可以看出,t1是以c1作为一级分区键,c2作为二级分区键的分区表。同时一级分区的类型是range分区,二级分区的类型是list分区。t1有三个一级分区,分别是t1_p1保存值域为(-∞,100)的值,t1_p2保存值域为[100,200)的值,t1_p3保存值域为[200,300)的值,每个一级分区中又按照c2分为两个二级分区,以t1_p1这个一级分区为例,又包括t1_p1_sp1和t1_p1_sp2两个二级分区。
连接操作(join)
在关系型数据库(如OceanBase数据库)中,数据库操作语句(例如,结构化查询语言(structured query language,SQL)查询语句)经常包含连接操作(join)。基于连接操作,可以将两个或多个数据表(如分区表)按照某个条件进行合并,形成新的结果集,该结果集例如可以是一张虚拟表(或称,逻辑表)。应该理解,用于进行连接操作的两个或多个数据表也可以称为连接表。基于连接操作形成的结果集,可以进行连接后的多种操作,例如实现数据的查询、增加、删除、更改等操作。
需要说明的是,数据库中的连接操作是针对两个数据表进行的,在需要连接多个数据表的情况下,可以将两个数据表连接后,将连接结果再和第三个数据表进行连接操作,以此类推。为了简化描述,后文的连接操作均以两个数据表之间的连接为例,多个数据表的连接可以理解为,两个数据表中的一个是其他数据表连接后形成的结果集。
在关系型数据库的应用中,连接操作可以给用户带来很大的灵活性。用户可以在任何时候增加新的数据类型,或者为不同实体创建新的数据表,之后可以通过连接操作进行多表联合查询、更改等。
连接操作一般是在一定的连接条件下进行的。常见的连接条件可以分为等值连接条件(即,连接条件中的关系是等值关系,如t1.c1=t2.c2)或非等值连接条件。连接条件可以是简单条件,也可以是复合条件。所谓复合条件,可以理解为是多个简单条件的组合,例如,可以采用如“和(and)”、“或(or)”等逻辑关系将多个简单条件进行组合,形成复合条件。
智能分区连接(partition-wise join)
某些场景下,在对分区表进行连接的时候,查询优化器(可以简称为优化器)可以使用智能分区连接(partition-wise join)技术来对分区表之间的连接进行优化。智能分区连接是一种分区表连接的优化技术,使用智能分区连接技术,可以将分区表之间的连接操作下压到对应的分区内部进行,将分区表之间的连接分解为匹配分区之间的连接,从而可以减少数据传输和需要连接的数据量,提高连接速度,进而提升执行性能。
具体地,使用智能分区连接技术进行分区表的连接优化时,优化器可以先针对两个表中的相应分区分别执行连接操作,例如哈希连接(hash join)、合并连接(merge join)或嵌套循环连接(nest loop join),然后将结果整合在一起(append)。其中,分区级别的哈希连接可以并行执行,并且分区中的数据量比整个分区表中的数据量少,执行性能也会更优。
智能分区连接可以包括完全智能分区连接(full partition-wise join)和部分智能分区连接(partial partition-wise join)。完全智能分区连接可以通过将两个分区表的分区一一对应地连接来达到减少数据传输和需要连接的数据量,以达到提高连接速度的目的。部分智能分区连接可以通过把连接操作一侧分区表的数据按照另一侧分区表的分区方式进行重分发,以此来减少数据传输和需要连接的数据量,以达到提高连接速度的目的。
分区裁剪(partition pruning)
分区裁剪可以是指,根据过滤条件确定分区表在数据库操作语句执行的过程中所涉及的分区,去除不需要的分区,以此来降低数据传输量,提升执行性能。换句话说,分区裁剪可以理解为仅取出分区表中的部分数据执行数据库相关的操作。作为一种实现方式,采用分区裁剪技术可以理解为是根据数据库操作语句中的from子句和where子句中的查询列的条件去除不需要的分区,提出需要的分区的过程。
示例性地,以数据库查询为例,分区表为t1,t1按照c1进行分区,查询列的过滤条件为c1<300,则可以采用分区裁剪技术去除t1中除c1<300分区外的其他分区,并提取出c1<300的分区,也就意味着本次数据库查询仅需要在c1<300的分区内进行扫描即可,从而可以有效减少查询数据量,提高查询效率。
如前文所述,在某些场景下可以使用智能分区连接技术来优化分区表的连接。但是,使用智能分区连接技术来优化分区表的连接时,需要满足一定的条件,如果有条件不满足就无法使用智能分区连接技术来进行优化。
作为一个示例,如果需要使用完全智能分区连接技术来优化分区表的连接时,则需要满足下列条件(或要求):
条件1:待连接的两个分区表的分区方式完全相同;
条件2:待连接的两个分区表对应的分区键上存在等值连接条件。
对于条件1,两个分区表的分区方式完全相同意味着,两个分区表的分区类型、分区数目、分区的边界值均相同。示例性地,两个分区表的类型相同可以是指两个分区表均为range分区表,或者两个分区表均为list分区表,又或者,当两个分区表均为组合分区表时,两个分区表的组合分区类型也应当一致,比如均为range-hash分区表。对于一级分区表而言,两个分区表的分区数目相同可以是指一级分区的数目相同;对于二级分区表而言,两个分区表的分区数目相同可以是指一级分区和二级分区的数目均相同。分区的边界值可以是指对应的分区的保存值域相同,例如,两个分区表分别包括两个分区,且两个分区的保存值域分别为[0,100)和[100,500)。
对于条件2,应该理解,两个分区表中任意一个分区表为两级或多级分区表时,等值连接条件包括每一级分区键的等值连接条件。示例性地,对于一级分区表而言,两个分区表对应的分区键上存在等值连接条件可以是指两个分区表的一级分区键上存在等值连接条件(t1.part_key=t2.part_key);对于二级分区表而言,两个分区表对应的分区键上存在等值连接条件可以是指两个分区表的一级分区键和二级分区键上均存在等值连接条件(t1.part_key=t2.part_key and t1.subpart_key=t2.subpart_key)。
作为另一个示例,如果需要使用部分智能分区连接技术来优化分区表的连接时,则需要满足下列条件:
条件2ʹ:待连接的两个分区表中至少一个的分区键上存在等值连接条件。
两个分区表中至少一个的分区键上存在等值连接条件可以是指两个分区表中的任意一个或者两个均存在等值连接条件。对于一级分区表来说,要求任意一个分区表的一级分区键上存在等值连接条件(t1.part_key=t2.any_key);对于二级分区表来说,要求任意一个分区表的一级分区键上存在等值连接条件,并且二级分区键上也存在等值连接条件(t1.part_key=t2.any_key and t1.subpart_key=t2.any_key)。
应该理解,当任意两个分区表满足条件2的时候一定会满足条件2ʹ。
可以看出,传统的智能分区连接存在比较严格的限制,如果有任意条件不满足就无法使用智能分区连接技术来进行优化,例如,当分区表的分区方式不完全相同时就不能使用完全智能分区连接技术进行优化;或者,当分区表为两级或多级分区表时,若分区键没有全部出现在连接条件中时就无法使用完全智能分区连接技术或者部分智能分区连接技术进行优化,从而导致智能分区连接技术的应用场景受到限制。
为了解决上述问题,本公开提供了一种连接分区表的方法和装置,可以扩展智能分区连接技术的应用场景。下面对本公开实施例进行详细描述。
图1为本公开一实施例提供的连接分区表的方法的流程示意图。图1的方法可以由数据库中的查询优化器执行。该数据库可以是普通数据库,也可以是分布式数据库,如OceanBase数据库等。该数据库的用户可以通过数据库操作语句对数据库进行操作,例如通过数据库操作语句对数据库进行查询、增加、删除、或更改等操作。这里提及的数据库操作语句例如可以是SQL语句。该数据库中可以存储有一个或多个数据集合。该数据集合通常表现为数据表(如分区表)的形式。
参见图1,在步骤S110,接收数据库操作语句。该数据库操作语句包括第一分区表和第二分区表的连接操作,以及第一分区表的分区裁剪操作。
数据库操作语句用于进行数据库操作,例如,数据库操作语句可以包括数据库查询(select)语句,对应地,对数据库进行操作包括对数据库进行查询;或者,数据库操作语句可以包括数据库更新(update)语句,对应地,对数据库进行操作包括对数据库进行更新,当然,本公开实施例并不限定于此,数据库操作语句还可以包括数据库插入(insert)、删除(delete)语句等,只要该数据库操作语句中包括连接操作和第一分区表的分区裁剪操作即可。
本公开实施例对连接操作的类型不做具体限定。在一些实施例中,该连接操作可以为内连接(inner join)操作、外连接(outer join)操作或交叉连接(cross join)操作等。不同的连接操作还可以再进行细分,例如内连接操作还可以包括等值连接操作、非等值连接操作、自然连接操作等;外连接操作还可以包括左连接操作、右连接操作、全连接操作等。
以SQL查询语句为例,连接操作可以在select语句的from子句或where子句中建立,其中,在from子句中指出连接时有助于将连接操作与where子句中的搜索条件(限制条件)区分开。
数据库操作语句中包括第一分区表的分区裁剪操作可以是指,数据库操作语句中包括对第一分区表进行分区裁剪的条件。例如,数据库操作语句中包括分区表t1的分区裁剪的条件“t1.c1<300”。
在一些实施例中,本公开实施例提及的分区裁剪的类型可以是静态分区裁剪。这是因为,是否使用智能分区连接技术进行连接的优化是在编译阶段(或称,优化阶段)决定的,因此,需要在编译阶段使得分区裁剪生效,而静态分区裁剪便发生在数据库操作语句的编译阶段。
作为一个示例,数据库操作语句SQL1的具体形式可以如下所示:
select * from t1,t2
where t1.c2=t2.c4
and t1.c1<100.
在上述示例中,from子句表示t1和t2的连接操作,该连接操作的连接条件为“t1.c2=t2.c4”。该数据库操作语句中还包括分区表t1的分区裁剪操作“t1.c1<100”。应该理解,在该示例中,分区表t1即为第一分区表。
在步骤S120,基于该数据库操作语句,对第一分区表进行分区裁剪,得到第一分区表对应的第一结果集。
基于分区裁剪,可以将第一分区表按照数据库操作语句中的分区裁剪条件进行裁剪,形成第一结果集。该第一结果集例如可以是一张虚拟表(或称,逻辑表)。在一些实施例中,第一结果集可以理解为第一分区表的子集,例如,第一结果集可以为第一分区表的真子集,或者第一结果集也可以为第一分区表。本公开实施例中,也可以将第一结果集称为第一分区表的等效分区表。
继续以数据库操作语句SQL1为例,根据第一分区表t1的分区裁剪条件“t1.c1<100”对t1进行分区裁剪后,得到第一结果集“t1_p1_sp1,t1_p1_sp2”。也就是说,后续进行第一分区表t1和第二分区表的连接时,第一分区表t1涉及的分区只有t1_p1_sp1和t1_p1_sp2。
在步骤S130,若第一结果集和第二分区表满足第一优化条件,使用智能分区连接技术来连接第一结果集和第二分区表。
第一优化条件用于判断是否可以使用智能分区连接技术来优化分区表的连接,第一优化条件可以为待连接的两个分区表中至少一个的分区键上存在等值连接条件。关于第一优化条件的具体内容,可以参见前文所述的条件2ʹ。
使用第一结果集和第二分区表判断能否使用智能分区连接技术,相当于将第一分区表和第二分区表的连接等效为:第一分区表裁剪后的第一结果集和第二分区表的连接。基于此,可以实现第一分区表和第二分区表的连接。
在一些实施例中,可以使用完全智能分区连接技术来连接第一结果集和第二分区表。在另一些实施例中,可以使用部分智能分区连接技术来连接第一结果集和第二分区表。后文将会对如何确定采用哪种智能分区连接技术进行详细介绍,此处暂不赘述。
本公开实施例中,当数据库操作语句中包括第一分区表的分区裁剪操作时,在确定是否能够使用智能分区连接技术来优化第一分区表和第二分区表的连接之前,先利用分区裁剪得到第一分区表对应的第一结果集,进而基于第一结果集确定是否能够使用智能分区连接技术。换句话说,本公开实施例将分区裁剪引入智能分区连接的可行性判断中,当第一结果集和第二分区表满足第一优化条件时,便可以使用智能分区连接技术进行分区表连接的优化,使得智能分区连接技术的应用场景得到扩展。
也就是说,在有些场景下,虽然两个分区表的分区方式并不完全相同,或者连接条件中并未包含分区表的全部分区键的等值连接条件,但是,对分区表进行分区裁剪后能够等效地满足智能分区连接的条件,这种情况下其实也可以使用智能分区连接技术来优化执行性能。
假设待连接的两个分区表为t1和t2,下面结合图2,给出第一分区表t1和第二分区表t2连接的一个示例。t1的创建过程可以参见前文,t2的创建过程参见下面示例:
create table t2 (c1 int, c2 int, c3 int, c4 int)
partition by range (c1) subpartition by list (c2)
(
partition t2_p1 values less than (100)
(
subpartition t2_p1_sp1 values (1,2,3,4,5),
subpartition t2_p1_sp2 values (6,7,8,9,10)
),
partition t2_p2 values less than (200)
(
subpartition t2_p2_sp1 values (1,2,3,4,5),
subpartition t2_p2_sp2 values (6,7,8,9,10)
),
partition t2_p3 values less than (300)
(
subpartition t2_p3_sp1 values (1,2,3,4,5),
subpartition t2_p3_sp2 values (6,7,8,9,10)
),
partition t2_p4 values less than (400)
(
subpartition t2_p4_sp1 values (1,2,3,4,5),
subpartition t2_p4_sp2 values (6,7,8,9,10)
)
).
可以看出,t1和t2都是以c1作为一级分区键,c2作为二级分区键的分区表,同时一级分区的类型都是range分区,二级分区的类型都是list分区。不同之处在于t1有三个一级分区,分别是t1_p1保存值域为(-∞,100)的值,t1_p2保存值域为[100,200)的值,t1_p3保存值域为[200,300)的值;而t2有四个一级分区,分别是t2_p1保存值域为(-∞,100)的值,t2_p2保存值域为[100,200)的值,t2_p3保存值域为[200,300)的值,t2_p4保存值域为[300,400)的值。t1和t2的二级分区的定义相同。
假设接收到的数据库操作语句SQL1为:
select * from t1,t2
where t1.c2=t2.c4
and t1.c1<100.
采用传统的方式判断能否使用智能分区连接时,对于SQL1语句,可以看出,该语句不满足条件2ʹ,因为连接条件中不包含t1的全部分区键,只有t1的二级分区键t1.c2,没有t1的一级分区键t1.c1。对于这种场景,相关技术中无法使用智能分区连接技术,而是采用把t2的数据广播到t1的每一个分区上的方式来进行连接。这种方式相比于使用智能分区连接技术,t2中的每一行需要发送给多个分区,因此需要传输更多数据,影响执行性能。采用传统的方式对应的执行计划如下所示。
==================================================================
|ID |OPERATOR |NAME |
------------------------------------------------------------------
|0|EXCHANGE IN DISTR | |
|1 | EXCHANGE OUT DISTR |:EX10001|
|2 | HASH JOIN | |
|3 | EXCHANGE IN DISTR | |
|4 | EXCHANGE OUT DISTR (BROADCAST) |:EX10000|
|5 | PX PARTITION ITERATOR | |
|6 | TABLE SCAN |T1 |
|7 | PX PARTITION ITERATOR | |
|8 | TABLE SCAN |T2 |
==================================================================
而采用本公开实施例提供的方法判断能否使用智能分区连接时,对于SQL1语句,可以看出,虽然连接条件中不包含t1的一级分区键t1.c1,但是存在一个分区裁剪条件t1.c1<100,所以可以通过分区裁剪操作对第一分区表t1进行分区裁剪,得到第一结果集。第一结果集包括分区t1_p1_sp1和t1_p1_sp2,也就是说,参与到SQL中的t1的分区只有t1_p1_sp1和t1_p1_sp2。因此,基于第一结果集和第二分区表判断是否满足第一优化条件时,显然当t1只涉及到一个一级分区的时候,我们可以认为在一级分区的层面上是没有分区的,t1在这个查询中只按照t1.c2分区。此时就满足了条件2',可以使用智能分区连接来优化执行性能,具体执行的概况可以参见图2。
该数据库操作语句SQL1对应的执行计划如下所示,从计划中可以看到t2是根据t1的分区方式做了数据重分发,没有做数据广播,减少了数据传输的量。
==================================================================
|ID |OPERATOR |NAME |
------------------------------------------------------------------
|0 |PX COORDINATOR | |
|1 | EXCHANGE OUT DISTR |:EX10001|
|2 | HASH JOIN | |
|3 | PX PARTITION ITERATOR | |
|4 | TABLE SCAN |T1 |
|5 | EXCHANGE IN DISTR | |
|6 | EXCHANGE OUT DISTR (PKEY) |:EX10000|
|7 | PX PARTITION ITERATOR | |
|8 | TABLE SCAN |T2 |
==================================================================
在一些实施例中,数据库操作语句还可以包括第二分区表的分区裁剪操作。当数据库操作语句还包括第二分区表的分区裁剪操作时,本公开实施例的方法还包括:基于数据库操作语句,对第二分区表进行分区裁剪,得到第二分区表对应的第二结果集。对应地,前文所述的步骤S130可以为:若第一结果集和第二结果集满足第一优化条件,使用智能分区连接技术来连接第一结果集和第二结果集。
也就是说,当数据库操作语句中同时包括第一分区表和第二分区表的分区裁剪操作时,可以基于数据库操作语句,分别对第一分区表和第二分区表进行分区裁剪,得到第一分区表对应的第一结果集以及第二分区表对应的第二结果集。关于对第二分区表进行分区裁剪得到第二结果集的具体过程,类似于对第一分区表进行分区裁剪得到第一结果集的过程,为了简洁,可以参见前文,此处不再赘述。
对第一分区表和第二分区表分别进行分区裁剪后,可以基于得到的第一结果集和第二结果集判断是否满足第一优化条件,若第一结果集和第二结果集满足第一优化条件时,使用智能分区连接技术来连接第一结果集和第二结果集。
使用第一结果集和第二结果集判断能否使用智能分区连接技术,相当于将第一分区表和第二分区表的连接等效为:第一分区表分区裁剪后的第一结果集和第二分区表分区裁剪后的第二结果集之间的连接。换句话说,对于第一分区表和第二分区表的连接能否使用智能分区连接技术的判断条件,可以放宽为:第一分区表和第二分区表分区裁剪后的第一结果集和第二结果集(等效的分区表)的分区键上存在等值连接条件。也就是说,前文所述的条件2'可以放宽为:两个分区表中至少一个分区裁剪后等效的分区表的分区键上存在等值连接条件。
下面结合图3,继续以分区表t1和t2为例,给出第一分区表t1和第二分区表t2连接的另一个示例。
假设接收到的数据库操作语句SQL2为:
select * from t1,t2
where t1.c1=t2.c1
and t1.c2=t2.c2
and t1.c1<300
and t2.c1<300.
采用传统的方式判断能否使用智能分区连接时,对于SQL2语句,可以看出,该语句不满足条件1,因为t1和t2的分区方式不完全相同(分区数目不同)。同时,该语句满足条件2,因为t1的一级分区键t1.c1和t2的一级分区键t2.c1上存在等值连接条件,t1的二级分区键t1.c2和t2的二级分区键t2.c2上存在等值连接条件。对于这种场景,相关技术中虽然可以使用智能分区连接技术,但只能使用部分智能分区连接技术,而无法使用完全分区智能连接技术,关于如何确定使用部分智能分区连接还是完全智能分区连接,可以参见后文,此处暂不赘述。相比于使用完全智能分区连接技术,使用部分智能分区连接技术进行优化时,对于t1中的每一行,会计算这一行的c1列能对应到t2表的哪个分区,然后将该行分发到t2对应的分区执行连接计算。这样在执行的时候对于每一行都会产生一次额外的计算分区和数据分发的开销,影响执行性能。采用传统的方式对应的执行计划如下所示。
==================================================================
|ID |OPERATOR |NAME |
------------------------------------------------------------------
|0 |EXCHANGE IN DISTR | |
|1 | EXCHANGE OUT DISTR |:EX10001|
|2 | HASH JOIN | |
|3 | EXCHANGE IN DISTR | |
|4 | EXCHANGE OUT DISTR (PKEY) |:EX10000|
|5 | PX PARTITION ITERATOR | |
|6 | TABLE SCAN |T1 |
|7 | PX PARTITION ITERATOR | |
|8 | TABLE SCAN |T2 |
==================================================================
而采用本公开实施例提供的方法判断能否使用智能分区连接时,对于SQL2语句,可以看出,虽然t1、t2两个分区表的分区方式不完全相同,但是因为SQL2中存在t1.c1<300和t2.c1<300的分区裁剪条件,所以可以通过分区裁剪操作对第一分区表t1和第二分区表t2分别进行分区裁剪,得到第一结果集和第二结果集。第一结果集包括分区t1_p1_sp1、t1_p1_sp2、t1_p2_sp1、t1_p2_sp2、t1_p3_sp1、t1_p3_sp2,第二结果集包括分区t2_p1_sp1、t2_p1_sp2、t2_p2_sp1、t2_p2_sp2、t2_p3_sp1、t2_p3_sp2。第一结果集和第二结果集中涉及的这些分区是一一对应的。也就是说t1_p1_sp1中的行只会跟t2_p1_sp1中的行连接成功,t1_p1_sp2中的行只会跟t2_p1_sp2中的行连接成功,其他分区的连接方式类似,具体可以参见图3。基于此,连接时可以直接让t1_p1_sp1与t2_p1_sp1连接,t1_p1_sp2与t2_p1_sp2连接,其他分区也是类似地一一对应连接,最后将每个子连接的结果汇总起来即可,具体执行的概况可以参见图3。
该数据库操作语句SQL2对应的执行计划如下所示,从计划中可以看到t1和t2两个分区表是直接连接的,不需要做数据的分区计算和重分发操作,减少了数据传输量。
==================================================================
|ID |OPERATOR |NAME |
------------------------------------------------------------------
|0 |PX COORDINATOR | |
|1 | EXCHANGE OUT DISTR |:EX10000|
|2 | PX PARTITION ITERATOR | |
|3 | HASH JOIN | |
|4 | TABLE SCAN |T1 |
|5 | TABLE SCAN |T2 |
==================================================================
如前文所述,智能分区连接技术可以分为完全智能连接技术和部分智能分区连接技术。基于此,在本公开实施例中,还可以基于第二优化条件进一步判断使用完全智能分区连接技术进行优化,还是使用部分智能分区连接技术进行优化。作为一种实现方式,可以采用图4所示的方法来确定具体使用哪种智能分区连接技术来连接两个分区表。
首先,判断待连接的两个分区表是否满足第一优化条件。若不满足第一优化条件,则不使用智能分区连接技术来进行优化;若满足第一优化条件,进一步判断待连接的两个分区表是否满足第二优化条件。若满足第二优化条件,则使用完全智能分区连接技术进行优化;若不满足第二优化条件,则使用部分智能分区连接技术进行优化。
应该理解,待连接的两个分区表是指实际参与判断条件(如第一优化条件,或第二优化条件)的分区表,例如,可以是指第一分区表和第二分区表,或者,可以是指第一结果集(第一分区表的等效分区表)和第二分区表;又或者,也可以是指第一结果集和第二结果集(第二分区表的等效分区表)。
作为一个示例,当待连接的两个分区表为第一结果集和第二分区表时,本公开实施例提供的方法可以进一步包括:判断第一结果集和第二分区表是否满足第二优化条件。前文所述的步骤S130可以包括:若第一结果集和第二分区表满足第二优化条件,使用完全智能分区连接技术来连接第一结果集和第二分区表;若第一结果集和第二分区表仅满足第一优化条件但不满足第二优化条件,使用部分智能分区连接技术来连接第一结果集和第二分区表。
作为另一个示例,当待连接的两个分区表为第一结果集和第二结果集时,本公开实施例提供的方法可以进一步包括:判断第一结果集和第二结果集是否满足第二优化条件。前文所述的步骤“若第一结果集和第二结果集满足第一优化条件,使用智能分区连接技术来连接第一结果集和第二结果集”可以包括:若第一结果集和第二结果集满足第二优化条件,使用完全智能分区连接技术来连接第一结果集和第二结果集;若第一结果集和第二结果集仅满足第一优化条件但不满足第二优化条件,使用部分智能分区连接技术来连接第一结果集和第二结果集。
需要说明的是,第二优化条件用于判断是否可以使用完全智能分区连接技术来优化分区表的连接,第二优化条件可以为:待连接的两个分区表的分区方式相同,且待连接的两个分区表对应的分区键上存在等值连接条件。
应该理解,分区方式相同可以是指,待连接的两个分区表的分区类型、分区数目、分区的边界值均相同。在一些实施例中,分区方式相同还可以包括:待连接的两个分区表的分区级数相同,例如,均为一级分区,或者均为二级分区。在一些实施例中,分区方式相同还可以包括:待连接的两个分区表的分区键的数据类型、分区键的数目相同等,例如,分区键均为int型数据,或者分区键均为char型数据等。关于第二优化条件的其他具体内容,可以参见前文所述的条件1和条件2,此处不再赘述。
需要说明的是,本公开实施例对第一优化条件和第二优化条件的执行顺序并不做具体限定。示例性地,可以先判断是否满足第一优化条件,再判断是否满足第二优化条件;或者,也可以先判断是否满足第二优化条件,再判断是否满足第一优化条件。作为一种实现方式,当先判断是否满足第一优化条件时,判断结果为不满足第一优化条件时,无需再判断第二优化条件,这是因为不满足第一优化条件的情况下,必然不满足第二优化条件(可以参见图4所示的实施例)。作为另一种实现方式,当先判断是否满足第二优化条件时,判断结果为满足第二优化条件时,无需再判断第一优化条件,这是因为满足第二优化条件的情况下,必然满足第一优化条件(可以参见后文提供的图6所示的实施例)。
应该理解,使用第一结果集和第二结果集判断能否使用完全智能分区连接技术,相当于将第一分区表和第二分区表的连接等效为:第一分区表分区裁剪后的第一结果集和第二分区表分区裁剪后的第二结果集之间能否使用完全智能分区连接。换句话说,对于第一分区表和第二分区表的连接能否使用完全智能分区连接技术的判断条件,可以放宽为:第一分区表和第二分区表分区裁剪后的第一结果集和第二结果集(等效的分区表)的分区方式相同(或称,第一分区表和第二分区表分区裁剪后等效的分区方式相同),且第一分区表和第二分区表分区裁剪后的第一结果集和第二结果集对应的分区键上存在等值连接条件。也就是说,前文所述的条件1可以放宽为:两个分区表分区裁剪后等效的分区方式相同,前文所述的条件2可以放宽为:两个分区表分区裁剪后等效的分区表对应的分区键上存在等值连接条件。
在一些实施例中,当待连接的两个分区表中至少一个为二级或多级分区表时,等值连接条件包括二级或多级分区表中的每一级分区键对应的等值连接条件。例如,对于二级分区表而言,要求待连接的两个分区表的一级分区键上存在等值连接条件,并且二级分区键上也存在等值连接条件。
下面结合图5,继续以分区表t1和t2为例,给出第一分区表t1和第二分区表t2连接的又一个示例。
假设接收到的数据库操作语句SQL3为:
select * from t1,t2
where t1.c2=t2.c2
and t1.c1<100
and t2.c1<100.
采用传统的方式判断能否使用智能分区连接时,对于SQL3语句,可以看出,该语句不满足条件2ʹ,因为连接条件中不包含t1的全部分区键,只有t1的二级分区键t1.c2,没有t1的一级分区键t1.c1。对于这种场景,相关技术中无法使用智能分区连接技术,而是可以采用把t2的数据广播到t1的每一个分区上的方式来进行连接。这种方式相比于使用智能分区连接技术,t2中的每一行需要发送给多个分区,因此需要传输更多数据,影响执行性能。采用传统的方式对应的执行计划如下所示。
==================================================================
|ID |OPERATOR |NAME |
------------------------------------------------------------------
|0 |EXCHANGE IN DISTR | |
|1 | EXCHANGE OUT DISTR |:EX10001|
|2 | HASH JOIN | |
|3 | EXCHANGE IN DISTR | |
|4 | EXCHANGE OUT DISTR (BROADCAST) |:EX10000|
|5 | PX PARTITION ITERATOR | |
|6 | TABLE SCAN |T1 |
|7 | PX PARTITION ITERATOR | |
|8 | TABLE SCAN |T2 |
==================================================================
而采用本公开实施例提供的方法判断能否使用智能分区连接时,对于SQL3语句,可以看出,虽然连接条件中不包含t1的一级分区键t1.c1,但是存在分区裁剪条件t1.c1<100和t2.c1<100,所以可以通过分区裁剪操作对第一分区表t1和第二分区表t2分别进行分区裁剪,得到第一分区表t1对应的第一结果集,以及第二分区表t2对应的第二结果集。第一结果集包括分区t1_p1_sp1和t1_p1_sp2,第二结果集包括分区t2_p1_sp1和t2_p1_sp2,也就是说,参与到SQL中的t1的分区只有t1_p1_sp1和t1_p1_sp2,t2的分区只有t2_p1_sp1和t2_p1_sp2。因此,我们基于第一结果集和第二结果集判断是否满足第一优化条件时,显然当t1和t2均只涉及到一个一级分区的时候,我们可以认为在一级分区的层面上是没有分区的,t1在这个查询中只按照t1.c2分区。此时就满足了条件2',可以使用智能分区连接来优化执行性能,具体执行的概况可以参见图3。进一步地,还可以基于第一结果集和第二结果集判断是否满足第二优化条件,显然当t1的分区只有t1_p1_sp1和t1_p1_sp2,t2的分区只有t2_p1_sp1和t2_p1_sp2时,第一结果集和第二结果集是满足第二优化条件的,那么进一步地,可以使用完全智能连接技术来优化执行性能。
该数据库操作语句SQL3对应的执行计划如下所示,从计划中可以看到t1和t2是直接进行连接的,不需要进行数据的分区计算和重分发操作,减少了数据传输。
==================================================================
|ID |OPERATOR |NAME |
------------------------------------------------------------------
|0 |PX COORDINATOR | |
|1 | EXCHANGE OUT DISTR |:EX10000|
|2 | PX PARTITION ITERATOR | |
|3 | HASH JOIN | |
|4 | TABLE SCAN |T1 |
|5 | TABLE SCAN |T2 |
==================================================================
下面结合一个具体示例,对本公开实施例提供的连接分区表的方法进行介绍。
图6为本公开另一实施例提供的连接分区表的方法的流程示意图。如图6所示,需要对第一分区表和第二分区表进行连接操作时,先基于数据库操作语句中的分区裁剪条件对第一分区表和/或第二分区表进行分区裁剪,得到第一分区表对应的第一结果集,和/或,第二分区表对应的第二结果集。
假设上述分区裁剪操作是针对第一分区表和第二分区表的,那么可以基于第一结果集和第二结果集,判断两者是否满足第二优化条件。如果第一结果集和第二结果集满足第二优化条件,则使用完全智能分区连接技术来连接第一结果集和第二结果集,从而实现第一分区表和第二分区表的连接。如果第一结果集和第二结果集不满足第二优化条件,则进一步判断两者是否满足第一优化条件。如果第一结果集和第二结果集满足第一优化条件,则使用部分智能分区连接技术来连接第一结果集和第二结果集,实现第一分区表和第二分区表的连接;如果第一结果集和第二结果集不满足第一优化条件,则不使用智能分区连接技术,而是例如采用把第二分区表的数据广播到第一分区表的每个分区上的方式来进行连接。
上文结合图1至图6,详细描述了本公开的方法实施例,下面结合图7至图8,详细描述本公开的装置实施例。应理解,方法实施例的描述与装置实施例的描述相互对应,因此,未详细描述的部分可以参见前面方法实施例。
图7为本公开一个实施例提供的连接分区表的装置的结构示意图。图7的装置700可以包括接收模块710、第一分区裁剪模块720、以及连接模块730。
接收模块710可以用于接收数据库操作语句,该数据库操作语句包括第一分区表和第二分区表的连接操作,以及第一分区表的分区裁剪操作。
第一分区裁剪模块720可以用于基于数据库操作语句,对第一分区表进行分区裁剪,得到第一分区表对应的第一结果集。
连接模块730可以用于若第一结果集和第二分区表满足第一优化条件,使用智能分区连接技术来连接第一结果集和第二分区表。
可选地,数据库操作语句还包括第二分区表的分区裁剪操作,装置700还包括第二分区裁剪模块。第二分区裁剪模块可以用于基于数据库操作语句,对第二分区表进行分区裁剪,得到第二分区表对应的第二结果集;连接模块730可以进一步用于:若第一结果集和第二结果集满足第一优化条件,使用智能分区连接技术来连接第一结果集和第二结果集。
可选地,第一优化条件包括:待连接的两个分区表中至少一个的分区键上存在等值连接条件。
可选地,智能分区连接技术包括完全智能分区连接技术和部分智能分区连接技术,装置700可以进一步包括判断模块。判断模块可以用于判断第一结果集和第二分区表是否满足第二优化条件,第二优化条件包括:待连接的两个分区表的分区方式相同,且待连接的两个分区表对应的分区键上存在等值连接条件,连接模块730可以进一步用于:若第一结果集和第二分区表满足第二优化条件,使用完全智能分区连接技术来连接第一结果集和第二分区表;若第一结果集和第二分区表满足第一优化条件但不满足第二优化条件,使用部分智能分区连接技术来连接第一结果集和第二分区表。
可选地,待连接的两个分区表的分区方式相同包括:待连接的两个分区表的分区类型、分区数目、以及分区的边界值均相同。
可选地,待连接的两个分区表中至少一个为二级或多级分区表时,等值连接条件包括二级或多级分区表中的每一级分区键对应的等值连接条件。
可选地,数据库操作语句为SQL语句。
图8为本公开另一实施例提供的连接分区表的装置的结构示意图。图8所示的连接分区表的装置800可以包括存储器810和处理器820,存储器810可以用于存储指令。处理器820可以用于执行存储器810中存储的指令,以实现前文描述的各个方法中的步骤。在一些实施例中,该装置800还可以包括网络接口830,处理器820与外部设备的数据交换可以通过该网络接口830实现。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其他任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如数字视频光盘(Digital Video Disc,DVD))、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
本领域普通技术人员可以意识到,结合本公开实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (11)
1.一种连接分区表的方法,包括:
接收数据库操作语句,所述数据库操作语句包括第一分区表和第二分区表的连接操作,以及所述第一分区表的分区裁剪操作;
基于所述数据库操作语句,对所述第一分区表进行分区裁剪,得到所述第一分区表对应的第一结果集;
若所述第一结果集和所述第二分区表满足第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二分区表,所述第一优化条件包括:待连接的两个分区表中至少一个的分区键上存在等值连接条件;
其中,所述数据库操作语句还包括所述第二分区表的分区裁剪操作,所述方法还包括:
基于所述数据库操作语句,对所述第二分区表进行分区裁剪,得到所述第二分区表对应的第二结果集;
所述若所述第一结果集和所述第二分区表满足第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二分区表,包括:
若所述第一结果集和所述第二结果集满足所述第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二结果集。
2.根据权利要求1所述的方法,所述智能分区连接技术包括完全智能分区连接技术和部分智能分区连接技术,所述方法进一步包括:
判断所述第一结果集和所述第二分区表是否满足第二优化条件,所述第二优化条件包括:待连接的两个分区表的分区方式相同,且所述待连接的两个分区表对应的分区键上存在等值连接条件,
所述若所述第一结果集和所述第二分区表满足所述第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二分区表,包括:
若所述第一结果集和所述第二分区表满足所述第二优化条件,使用所述完全智能分区连接技术来连接所述第一结果集和所述第二分区表;
若所述第一结果集和所述第二分区表满足所述第一优化条件但不满足所述第二优化条件,使用所述部分智能分区连接技术来连接所述第一结果集和所述第二分区表。
3.根据权利要求2所述的方法,所述待连接的两个分区表的分区方式相同包括:所述待连接的两个分区表的分区类型、分区数目、以及分区的边界值均相同。
4.根据权利要求1所述的方法,所述待连接的两个分区表中至少一个为二级或多级分区表时,所述等值连接条件包括所述二级或多级分区表中的每一级分区键对应的等值连接条件。
5.根据权利要求1所述的方法,所述数据库操作语句为SQL语句。
6.一种连接分区表的装置,包括:
接收模块,用于接收数据库操作语句,所述数据库操作语句包括第一分区表和第二分区表的连接操作,以及所述第一分区表的分区裁剪操作;
第一分区裁剪模块,用于基于所述数据库操作语句,对所述第一分区表进行分区裁剪,得到所述第一分区表对应的第一结果集;
连接模块,用于若所述第一结果集和所述第二分区表满足第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二分区表,所述第一优化条件包括:待连接的两个分区表中至少一个的分区键上存在等值连接条件;
其中,所述数据库操作语句还包括所述第二分区表的分区裁剪操作,所述装置还包括:
第二分区裁剪模块,用于基于所述数据库操作语句,对所述第二分区表进行分区裁剪,得到所述第二分区表对应的第二结果集;
所述连接模块用于:
若所述第一结果集和所述第二结果集满足所述第一优化条件,使用智能分区连接技术来连接所述第一结果集和所述第二结果集。
7.根据权利要求6所述的装置,所述智能分区连接技术包括完全智能分区连接技术和部分智能分区连接技术,所述装置还包括:
判断模块,用于判断所述第一结果集和所述第二分区表是否满足第二优化条件,所述第二优化条件包括:待连接的两个分区表的分区方式相同,且所述待连接的两个分区表对应的分区键上存在等值连接条件,
所述连接模块进一步用于:
若所述第一结果集和所述第二分区表满足所述第二优化条件,使用所述完全智能分区连接技术来连接所述第一结果集和所述第二分区表;
若所述第一结果集和所述第二分区表满足所述第一优化条件但不满足所述第二优化条件,使用所述部分智能分区连接技术来连接所述第一结果集和所述第二分区表。
8.根据权利要求7所述的装置,所述待连接的两个分区表的分区方式相同包括:所述待连接的两个分区表的分区类型、分区数目、以及分区的边界值均相同。
9.根据权利要求6所述的装置,所述待连接的两个分区表中至少一个为二级或多级分区表时,所述等值连接条件包括所述二级或多级分区表中的每一级分区键对应的等值连接条件。
10.根据权利要求6所述的装置,所述数据库操作语句为SQL语句。
11.一种连接分区表的装置,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器被配置为执行所述可执行代码,以实现权利要求1-5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210308445.0A CN114416884B (zh) | 2022-03-28 | 2022-03-28 | 连接分区表的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210308445.0A CN114416884B (zh) | 2022-03-28 | 2022-03-28 | 连接分区表的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114416884A CN114416884A (zh) | 2022-04-29 |
CN114416884B true CN114416884B (zh) | 2022-06-14 |
Family
ID=81262973
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210308445.0A Active CN114416884B (zh) | 2022-03-28 | 2022-03-28 | 连接分区表的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114416884B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116775698B (zh) * | 2023-08-23 | 2023-11-24 | 本原数据(北京)信息技术有限公司 | 数据库的分区裁剪方法和装置、计算机设备、存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103838770A (zh) * | 2012-11-26 | 2014-06-04 | 中国移动通信集团北京有限公司 | 一种数据逻辑分区的方法和系统 |
CN108959510A (zh) * | 2018-06-27 | 2018-12-07 | 阿里巴巴集团控股有限公司 | 一种分布式数据库的分区级连接方法和装置 |
CN109710643A (zh) * | 2018-12-20 | 2019-05-03 | 上海达梦数据库有限公司 | 外连接管理方法、装置、服务器及存储介质 |
CN110019337A (zh) * | 2017-11-02 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 确定数据库中有效分区的方法、装置和系统 |
CN111352950A (zh) * | 2020-03-04 | 2020-06-30 | 上海达梦数据库有限公司 | 数据库表等值连接的优化方法、装置、服务器及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101866561A (zh) * | 2010-06-11 | 2010-10-20 | 哈尔滨工程大学 | 可调整式多元变量渐近寻优算法的智能组卷装置及方法 |
CN102254035A (zh) * | 2011-08-09 | 2011-11-23 | 广东电网公司电力科学研究院 | 关系数据库测试方法及测试系统 |
US9881036B2 (en) * | 2014-12-01 | 2018-01-30 | International Business Machines Corporation | Avoid double counting of mapped database data |
US9619210B2 (en) * | 2015-05-14 | 2017-04-11 | Walleye Software, LLC | Parsing and compiling data system queries |
-
2022
- 2022-03-28 CN CN202210308445.0A patent/CN114416884B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103838770A (zh) * | 2012-11-26 | 2014-06-04 | 中国移动通信集团北京有限公司 | 一种数据逻辑分区的方法和系统 |
CN110019337A (zh) * | 2017-11-02 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 确定数据库中有效分区的方法、装置和系统 |
CN108959510A (zh) * | 2018-06-27 | 2018-12-07 | 阿里巴巴集团控股有限公司 | 一种分布式数据库的分区级连接方法和装置 |
CN109710643A (zh) * | 2018-12-20 | 2019-05-03 | 上海达梦数据库有限公司 | 外连接管理方法、装置、服务器及存储介质 |
CN111352950A (zh) * | 2020-03-04 | 2020-06-30 | 上海达梦数据库有限公司 | 数据库表等值连接的优化方法、装置、服务器及存储介质 |
Non-Patent Citations (1)
Title |
---|
高锦涛 等.分布式数据库下基于剪枝的并行合并连接策略.《软件学报》.2018,第30卷(第11期),3364-3381. * |
Also Published As
Publication number | Publication date |
---|---|
CN114416884A (zh) | 2022-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10963428B2 (en) | Multi-range and runtime pruning | |
CN107818115B (zh) | 一种处理数据表的方法及装置 | |
Yu et al. | Distributed query processing | |
Simitsis et al. | State-space optimization of ETL workflows | |
US6795821B2 (en) | Database systems, methods and computer program products including primary key and super key indexes for use with partitioned tables | |
US8396852B2 (en) | Evaluating execution plan changes after a wakeup threshold time | |
WO2020135613A1 (zh) | 数据查询处理方法、装置及系统、计算机可读存储介质 | |
JP7438603B2 (ja) | トランザクション処理方法、装置、コンピュータデバイス及びコンピュータプログラム | |
US20090248616A1 (en) | Indexing technique to deal with data skew | |
US10534797B2 (en) | Synchronized updates across multiple database partitions | |
CN101916280A (zh) | 并行计算系统及按查询内容进行负载均衡的方法 | |
CN109885585B (zh) | 支持存储过程、触发器与视图的分布式数据库系统和方法 | |
WO2016191995A1 (zh) | 一种分布式数据库中关联表分区的方法和设备 | |
US20190005092A1 (en) | Query optimization using propagated data distinctness | |
US20200320216A1 (en) | Systems and methods for determining database permissions | |
EP3567491A1 (en) | Workload aware data placement for join-based query processing in a cluster | |
CN109299101B (zh) | 数据检索方法、装置、服务器和存储介质 | |
CN114416884B (zh) | 连接分区表的方法和装置 | |
CN114090695A (zh) | 分布式数据库的查询优化的方法和装置 | |
US8396858B2 (en) | Adding entries to an index based on use of the index | |
US7693845B2 (en) | Database systems, methods and computer program products using type based selective foreign key association to represent multiple but exclusive relationships in relational databases | |
CN108073641B (zh) | 查询数据表的方法和装置 | |
CN104573112A (zh) | Oltp集群数据库中页面查询方法及数据处理节点 | |
CN111949315A (zh) | 用于区块链账本数据的管理装置和方法 | |
CN114490724B (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 |