CN116775698A - 数据库的分区裁剪方法和装置、计算机设备、存储介质 - Google Patents
数据库的分区裁剪方法和装置、计算机设备、存储介质 Download PDFInfo
- Publication number
- CN116775698A CN116775698A CN202311062436.9A CN202311062436A CN116775698A CN 116775698 A CN116775698 A CN 116775698A CN 202311062436 A CN202311062436 A CN 202311062436A CN 116775698 A CN116775698 A CN 116775698A
- Authority
- CN
- China
- Prior art keywords
- partition
- data
- query
- expression
- target
- 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.)
- Granted
Links
- 238000005192 partition Methods 0.000 title claims abstract description 617
- 238000000034 method Methods 0.000 title claims abstract description 62
- 230000014509 gene expression Effects 0.000 claims abstract description 270
- 238000012216 screening Methods 0.000 claims abstract description 21
- 238000007405 data analysis Methods 0.000 claims abstract description 14
- 230000003068 static effect Effects 0.000 claims description 34
- 238000004590 computer program Methods 0.000 claims description 11
- 238000004364 calculation method Methods 0.000 claims description 9
- 238000004891 communication Methods 0.000 description 11
- 238000004458 analytical method Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 238000000638 solvent extraction Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 238000007781 pre-processing Methods 0.000 description 4
- 238000013138 pruning Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 238000009966 trimming Methods 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据库的分区裁剪方法和装置、计算机设备、存储介质,属于数据库技术领域。该方法包括:获取目标分区表和目标约束条件数据;目标分区表包括候选分区;对目标约束条件数据进行条件数据解析,得到第一表达式数据、第一比较运算符和第二表达式数据;根据第一表达式数据和第二表达式数据进行裁剪状态判断,确定第一裁剪标志数据;根据第一裁剪标志数据对候选分区进行分区筛选,得到目标分区链表数据;目标分区链表数据包括扫描分区名称;根据扫描分区名称对目标分区表进行分区扫描,得到目标扫描分区,目标扫描分区用于表示目标查询语句进行数据查询的扫描范围。本申请实施例有效提高数据库的分区裁剪性能。
Description
技术领域
本申请涉及数据库技术领域,尤其涉及一种数据库的分区裁剪方法和装置、计算机设备、存储介质。
背景技术
在数据库的日常应用中,对于数据量比较大时通常采用分区表进行数据存储,即分区表根据分区键的范围将数据保存在不同的分区中。分区键是数据库中用于表示分区表的一列或多列的关键属性,能够决定数据将如何分布在不同的分区中。在分区表的查询过程中,可以通过分区裁剪的方法来快速获取目标分区。分区裁剪(Partition Pruning)用于在数据库分区查询中只选择特定分区的数据,而不必扫描所有分区,可以提高查询性能并减少资源消耗。
然而,分区裁剪方法通常是根据查询中的约束条件,确定分区键的约束范围,然后依次判断分区表中各个分区的范围是否和约束条件中的分区范围是否有交集。如果没有交集则说明当前分区的全部数据不满足约束条件,可以直接裁剪掉后续不需要扫描。而实际应用中,查询的约束条件中往往不是一个确定的范围,通常包含外部参数(如绑定变量的执行方式)或动态变化(即约束条件包含子查询)。在这些场景下,相关技术的分区裁剪方法不能确定分区键的约束范围,则不能对分区进行裁剪,从而需要扫描所有的分区,导致数据查询的整体性能较差。因此,如何提供一种能够在包含不确定范围的约束条件的查询场景下,有效提高数据库的分区裁剪性能,成为了亟待解决的技术问题。
发明内容
本申请实施例的主要目的在于提出了一种数据库的分区裁剪方法和装置、计算机设备、存储介质,能够在包含不确定范围的约束条件的查询场景下,有效提高数据库的分区裁剪性能。
为实现上述目的,本申请实施例的第一方面提出了一种数据库的分区裁剪方法,所述方法包括:
获取目标查询语句的目标分区表和目标约束条件数据;所述目标分区表包括候选分区;
对所述目标约束条件数据进行条件数据解析,得到第一表达式数据、第一比较运算符和第二表达式数据,所述第一表达式数据和所述第二表达式数据为所述第一比较运算符两侧的数据;
根据所述第一表达式数据和所述第二表达式数据进行裁剪状态判断,确定第一裁剪标志数据;
根据所述第一裁剪标志数据对所述候选分区进行分区筛选,得到目标分区链表数据;所述目标分区链表数据包括扫描分区名称;
根据所述扫描分区名称对所述目标分区表进行分区扫描,得到目标扫描分区,所述目标扫描分区用于表示所述目标查询语句进行数据查询的扫描范围。
在一些实施例中,所述根据所述第一表达式数据和所述第二表达式数据进行裁剪状态判断,确定第一裁剪标志数据,包括:
对所述第一表达式数据进行表达式类型判断,确定第一表达式类型;
对所述第二表达式数据进行表达式类型判断,确定第二表达式类型;
根据所述第一表达式类型和所述第二表达式类型确定所述第一裁剪标志数据。
在一些实施例中,所述第一裁剪标志数据包括动态裁剪标志,所述根据所述第一裁剪标志数据对所述候选分区进行分区筛选,得到目标分区链表数据,包括:
当所述第一裁剪标志数据为所述动态裁剪标志,获取初始分区链表数据;
根据所述第一表达式类型和所述第二表达式类型确定子查询表达式数据;所述子查询表达式数据为所述第一表达式数据或所述第二表达式数据;
根据所述初始分区链表数据对所述子查询表达式数据进行表达式计算,确定子查询分区数据;
根据所述子查询分区数据和所述第一比较运算符对所述候选分区进行分区选择,确定所述扫描分区名称;
根据所述扫描分区名称生成所述目标分区链表数据。
在一些实施例中,所述根据所述初始分区链表数据对所述子查询表达式数据进行表达式计算,确定子查询分区数据,包括:
根据所述初始分区链表数据获取所述子查询表达式的子查询分区表和子查询约束条件数据;
对所述子查询约束条件数据进行条件数据解析,得到第三表达式数据、第二比较运算符和第四表达式数据,所述第三表达式数据和所述第四表达式数据为所述第二比较运算符两侧的数据;
根据所述第三表达式数据和所述第四表达式数据对所述子查询分区表进行分区筛选,得到子查询分区链表数据;所述子查询分区链表数据包括子查询分区名称;
根据所述子查询分区名称对所述子查询分区表进行分区扫描,得到子查询分区数据,所述子查询分区数据用于表示所述子查询表达式进行数据查询的扫描范围。
在一些实施例中,所述根据所述子查询分区数据和所述第一比较运算符对所述候选分区进行分区选择,确定所述扫描分区名称,包括:
根据所述子查询分区数据从所述第一表达式数据和所述第二表达式数据中确定分区键数据;所述分区键数据包括候选查询数据;
对所述子查询分区数据进行分区扫描,得到子查询扫描数据;
根据所述第一比较运算符对所述候选查询数据和所述子查询扫描数据进行数值比较,得到数值比较结果;
根据所述数值比较结果对所述候选分区进行分区选择,确定所述扫描分区名称。
在一些实施例中,所述第一裁剪标志数据还包括静态裁剪标志,所述根据所述第一裁剪标志数据对所述候选分区进行分区筛选,得到目标分区链表数据,还包括:
当所述第一裁剪标志数据为所述静态裁剪标志,根据所述第一表达式类型和所述第二表达式类型确定静态约束数据;所述静态约束数据为所述第一表达式数据或所述第二表达式数据;
根据所述静态约束数据和所述第一比较运算符对所述目标分区表进行分区选择,确定所述扫描分区名称;
根据所述扫描分区名称生成所述目标分区链表数据。
在一些实施例中,所述第一裁剪标志数据还包括不裁剪标志,所述根据所述第一裁剪标志数据对所述候选分区进行分区筛选,得到目标分区链表数据,还包括:
当所述第一裁剪标志数据为所述不裁剪标志,根据目标分区表的全部所述候选分区确定所述扫描分区名称;
根据所述扫描分区名称生成所述目标分区链表数据。
为实现上述目的,本申请实施例的第二方面提出了一种数据库的分区裁剪装置,所述装置包括:
获取模块,用于获取目标查询语句的目标分区表和目标约束条件数据;所述目标分区表包括候选分区;
数据解析模块,用于对所述目标约束条件数据进行条件数据解析,得到第一表达式数据、第一比较运算符和第二表达式数据,所述第一表达式数据和所述第二表达式数据为所述第一比较运算符两侧的数据;
状态判断模块,用于根据所述第一表达式数据和所述第二表达式数据进行裁剪状态判断,确定第一裁剪标志数据;
分区筛选模块,用于根据所述第一裁剪标志数据对所述候选分区进行分区筛选,得到目标分区链表数据;所述目标分区链表数据包括扫描分区名称;
分区扫描模块,用于根据所述扫描分区名称对所述目标分区表进行分区扫描,得到目标扫描分区,所述目标扫描分区用于表示所述目标查询语句进行数据查询的扫描范围。
为实现上述目的,本申请实施例的第三方面提出了一种计算机设备,包括:
至少一个存储器;
至少一个处理器;
至少一个计算机程序;
所述至少一个计算机程序被存储在所述至少一个存储器中,所述至少一个处理器执行所述至少一个计算机程序以实现上述第一方面所述的数据库的分区裁剪方法。
为实现上述目的,本申请实施例的第四方面提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于使计算机执行上述第一方面所述的数据库的分区裁剪方法。
本申请实施例提出的一种数据库的分区裁剪方法和装置、计算机设备、存储介质,首先,获取目标查询语句的目标分区表和目标约束条件数据,该目标分区表包括候选分区。对目标约束条件数据进行条件数据解析,得到第一表达式数据、第一比较运算符和第二表达式数据,第一表达式数据和第二表达式数据为第一比较运算符两侧的数据。然后,根据第一表达式数据和第二表达式数据进行裁剪状态判断,确定第一裁剪标志数据。根据第一裁剪标志数据对候选分区进行分区筛选,得到目标分区链表数据,该目标分区链表数据包括扫描分区名称;根据扫描分区名称对目标分区表进行分区扫描,得到目标扫描分区,该目标扫描分区用于表示目标查询语句进行数据查询的扫描范围。本申请实施例能够在包含不确定范围的约束条件的查询场景下,有效提高数据库的分区裁剪性能。
附图说明
图1是本申请实施例提供的数据库的分区裁剪方法的一个流程图;
图2是图1中的步骤S130的流程图;
图3是图1中的步骤S140的第一个流程图;
图4是图3中的步骤S330的流程图;
图5是图3中的步骤S340的流程图;
图6是图1中的步骤S140的第二个流程图;
图7是图1中的步骤S140的第三个流程图;
图8是本申请实施例提供的数据库的分区裁剪方法的一个流程示意图;
图9是本申请实施例提供的数据库的分区裁剪装置的结构示意图;
图10是本申请实施例提供的计算机设备的硬件结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
需要说明的是,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
首先,对本申请中涉及的若干名词进行解析:
分区表:是数据库表按照一定的规则划分成的多个较小的分区。每个分区可以单独进行管理和维护。分区表可以提高查询性能、简化数据维护、优化数据存储等方面的操作。
分区裁剪(Partition Pruning):是一种用于在查询中只选择特定分区的数据,而不必扫描所有分区的技术。分区裁剪可以提高查询性能并减少资源消耗。
子查询:是一个嵌套在主查询中的查询语句,它可以作为主查询的约束条件的一部分,用于限制主查询的查询结果或者作为过滤条件。例如,主查询为从table1表中选择column1和column2两列的数据。约束条件使用了子查询,子查询从table2表中选择column4列的数据,并根据给定的条件进行筛选。主查询的结果将仅包含满足子查询条件的数据。
在数据库的日常应用中,对于数据量比较大时通常采用分区表进行数据存储,即分区表根据分区键的范围将数据保存在不同的分区中。分区键是数据库中用于表示分区表的一列或多列的关键属性,能够决定数据将如何分布在不同的分区中。在分区表的查询过程中,可以通过分区裁剪的方法来快速获取目标分区。分区裁剪(Partition Pruning)用于在数据库分区查询中只选择特定分区的数据,而不必扫描所有分区,可以提高查询性能并减少资源消耗。
然而,分区裁剪方法通常是根据查询中的约束条件,确定分区键的约束范围,然后依次判断分区表中各个分区的范围是否和约束条件中的分区范围是否有交集。如果没有交集则说明当前分区的全部数据不满足约束条件,可以直接裁剪掉后续不需要扫描。而实际应用中,查询的约束条件中往往不是一个确定的范围,通常包含外部参数(如绑定变量的执行方式)或动态变化(即约束条件包含子查询)。对于约束条件的一侧不是确定的,而为外部参数(如绑定变量的执行方式)或动态变化的表达式,相关技术无法对其进行分区裁剪,通常需要对分区表的全部分区进行扫描,导致数据查询的性能较差。
例如,当约束条件的一侧为绑定变量的执行方式,tt01表为分区表,a为分区键。“PREPARE ps(int) as SELECT * FROM tt01 WHERE a>$1;EXECUTE ps(100);”,这个语句表示先使用PREPARE语句创建了一个名为ps的预处理语句,该语句接受一个整数类型的参数。在这个示例中,预处理语句的目的是从tt01表中选取满足条件a大于变量$1的行。$1表示预处理语句中的第一个参数。然后,使用EXECUTE语句执行了ps预处理语句,并传递了参数100。在执行预处理语句后,将参数值100传递给其中的$1变量。并且,将执行结果返回满足条件的行。
在这些场景下,相关技术的分区裁剪方法不能确定分区键的约束范围,则不能对分区进行裁剪,从而需要扫描所有的分区,导致数据查询的整体性能较差。因此,如何提供一种能够在包含不确定范围的约束条件的查询场景下,有效提高数据库的分区裁剪性能,成为了亟待解决的技术问题。
基于此,本申请实施例提供了一种数据库的分区裁剪方法和装置、计算机设备、存储介质,能够提高对数据库的查询效率。
本申请实施例提供的数据库的分区裁剪方法可应用于终端中,也可应用于服务器端中,还可以是运行于终端或服务器端中的软件。在一些实施例中,终端可以是智能手机、平板电脑、笔记本电脑、台式计算机等;服务器端可以配置成独立的物理服务器,也可以配置成多个物理服务器构成的服务器集群或者分布式系统,还可以配置成提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)以及大数据和人工智能平台等基础云计算服务的云服务器;软件可以是实现数据库的分区裁剪方法的应用等,但并不局限于以上形式。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络个人计算机(Personal Computer,PC)、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
请参阅图1,图1是本申请实施例提供的数据库的分区裁剪方法的一个可选的流程图。在本申请的一些实施例中,图1中的方法可以具体包括但不限于步骤S110至步骤S150,下面结合图1对这五个步骤进行详细介绍。
步骤S110,获取目标查询语句的目标分区表和目标约束条件数据;目标分区表包括候选分区;
步骤S120,对目标约束条件数据进行条件数据解析,得到第一表达式数据、第一比较运算符和第二表达式数据,第一表达式数据和第二表达式数据为第一比较运算符两侧的数据;
步骤S130,根据第一表达式数据和第二表达式数据进行裁剪状态判断,确定第一裁剪标志数据;
步骤S140,根据第一裁剪标志数据对候选分区进行分区筛选,得到目标分区链表数据;目标分区链表数据包括扫描分区名称;
步骤S150,根据扫描分区名称对目标分区表进行分区扫描,得到目标扫描分区,目标扫描分区用于表示目标查询语句进行数据查询的扫描范围。
在一些实施例的步骤S110至步骤S150中,首先,获取目标查询语句的目标分区表和目标约束条件数据,该目标分区表包括候选分区。对目标约束条件数据进行条件数据解析,得到第一表达式数据、第一比较运算符和第二表达式数据,第一表达式数据和第二表达式数据为第一比较运算符两侧的数据。然后,根据第一表达式数据和第二表达式数据进行裁剪状态判断,确定第一裁剪标志数据。根据第一裁剪标志数据对候选分区进行分区筛选,得到目标分区链表数据,该目标分区链表数据包括扫描分区名称;根据扫描分区名称对目标分区表进行分区扫描,得到目标扫描分区,该目标扫描分区用于表示目标查询语句进行数据查询的扫描范围。本申请实施例能够在包含不确定范围的约束条件的查询场景下,有效提高数据库的分区裁剪性能。
需要说明的是,本申请实施例提供的数据库的分区裁剪方法可以应用于客户端或服务端,且调用端也可以为客户端或服务端,在此不作具体限定。
在一些实施例的步骤S110中,目标查询语句是指在数据库中待查询的语句。目标分区表是指目标查询语句中进行数据查询需要用到的分区表。目标约束条件数据是指目标查询语句用于查询数据的过滤条件。候选分区是指目标分区表中的一个子表,它包含了根据分区规则划分出的一部分数据。每个候选分区都有一个唯一的标识符,并且可以有自己独立的存储设置、索引和约束等。
需要说明的是,目标分区表对候选分区的划分方式不作具体限定。例如,目标分区表的划分方式包括:范围分区,按照某个列的范围进行分区,如按照时间范围进行分区,将不同时间段的数据存储在不同的分区中;列表分区,按照某个列的具体取值进行分区,例如按照地区进行分区,将不同地区的数据存储在不同的分区中;哈希分区:根据某个列的哈希值进行分区,将具有相同哈希值的数据存储在同一个分区中等。
示例性的,当目标查询语句为“SELECT * FROM tt01 WHERE a>(SELECT a FROMtt02 WHERE a>50 LIMIT 1”,整体性的,这个目标查询语句的意思是从表tt01中选择所有满足条件“a>(SELECT a FROM tt02 WHERE a>50 LIMIT 1)”的记录,即从表tt02中选择满足条件“a>50”的第一条记录作为比较的值,将其与表tt01中的字段a进行比较,并将大于子查询的结果作为符合条件的查询结果。其中,目标分区表为tt01,tt01中的字段a所包含的范围即为候选分区。目标约束条件数据为“a>(SELECT a FROM tt02 WHERE a>50 LIMIT1)”。如果子查询的结果为空,那么整个查询语句将返回空结果集。
在一些实施例的步骤S120中,由于相关技术的分区裁剪方法对查询的约束条件有严格的限制,即要求约束条件的一侧为查询的字段名称,另一侧必须是常量或者常量表达式。如果分区表的一侧不是确定的,即为动态变化的外部参数或者子查询,则不能进行分区裁剪,需要对全部分区进行扫描。为了实现在约束条件为动态变化时,也能进行分区裁剪,本申请实施例首先利用查询优化器对目标约束条件数据进行条件数据解析,确定目标约束条件数据中的第一表达式数据、第一比较运算符和第二表达式数据。第一表达式数据可以是指目标分区表中需要查询的分区键数据。第二表达式数据可以是指查询第一表达式数据的约束数据。且第一表达式数据和第二表达式数据的具体位置不作具体限定。第一比较运算符是指约束第一表达式数据和第二表达式数据之间关系的数据,如=、==、>、<、>=、<=、<>、!=、!>、!<等。
例如,目标约束条件数据为“a>(SELECT a FROM tt02 WHERE a>50 LIMIT 1)”,则第一表达式数据为“a”,第一比较运算符为“>”,第二表达式数据为动态变化的子查询语句“SELECT a FROM tt02 WHERE a>50 LIMIT 1”。又如,目标查询语句为“SELECT * FROMtt02 WHERE a>ANY(SELECT a FROM tt01 WHERE tt01.a = tt02.a)”,其中,目标约束条件数据为“a>ANY(SELECT a FROM tt01 WHERE tt01.a = tt02.a)”,第一表达式数据为“a”,第一比较运算符为“>”,第二表达式数据为动态变化的子查询语句“ANY(SELECT a FROMtt01 WHERE tt01.a = tt02.a)”。
需要说明的是,本申请实施例的条件数据解析的方法包括但不限于以下至少一种:词法分析(Lexical Analysis),该过程将输入的语句分解为一个个的词法单元(Tokens),比如关键字、标识符、运算符、常量等;语法分析(Syntax Analysis),根据SQL语句的语法规则,将词法单元组合成语法树(Parse Tree)或抽象语法树(Abstract SyntaxTree,AST);语义分析(Semantic Analysis),对语法树或AST进行语义检查,确保SQL语句的合法性,且语义分析包括类型检查、约束检查、引用检查等。
需要说明的是,本申请实施例的分区裁剪方法包括查询优化器阶段和执行器阶段。本申请实施例的查询优化器(Query Optimizer)负责解析语句并确定最佳的查询计划,以提高查询性能。在优化查询计划的过程中,查询优化器可能会对计划进行裁剪,即剔除一些不必要的操作或路径,以减少查询的执行时间和资源消耗。因此,本申请先根据对目标约束条件数据进行解析和校验,从而确定目标分区表在之后的执行器上的裁剪状态。
在一些实施例的步骤S130中,第一裁剪标志数据用于表示目标分区表在优化器的裁剪状态。根据第一表达式数据和第二表达式数据进行裁剪状态判断,以确定是否在查询优化器阶段对目标分区表进行分区裁剪。
请参阅图2,图2是本申请实施例提供的步骤S130的一个可选的流程图。在本申请的一些实施例中,步骤S130具体包括但不限于步骤S210至步骤S230,下面结合图2对这三个步骤进行详细介绍。
步骤S210,对第一表达式数据进行表达式类型判断,确定第一表达式类型;
步骤S220,对第二表达式数据进行表达式类型判断,确定第二表达式类型;
步骤S230,根据第一表达式类型和第二表达式类型确定第一裁剪标志数据。
在一些实施例的步骤S210中,为了确定是否能够在查询优化器阶段对目标分区表进行分区裁剪,本申请实施例需要先对第一表达式数据进行表达式类型判断,即判断该第一表达式数据中的分区键是否为目标分区表中已存在的分区键。第一表达式类型包括分区键存在类型和分区键不存在类型。分区键存在类型表示第一表达式数据中的分区键为目标分区表中已存在的分区键。分区键不存在类型表示第一表达式数据中的分区键为目标分区表中不存在的分区键。例如,第一表达式数据为b,而b列不是目标分区表中的列,则第一表达式类型为分区键不存在类型。
在一些实施例的步骤S220中,对第二表达式数据进行表达式类型判断,确定目标约束条件数据是否为动态变化的表达式。第二表达式类型包括静态表达式类型、动态表达式类型。其中,静态表达式类型表示第二表达式数据为一个确定的值、或者常量表达式(如6+6,abs(12))等。动态表达式类型表示第二表达式数据为一个动态变化的外部参数或者子查询语句等。例如,目标约束条件数据“a>12”中的第二表达式数据为12,则对应的第二表达式类型为静态表达式类型。又如,目标约束条件数据“a>(SELECT c FROM tt02 WHERE c<13LIMIT 1)”中的第二表达式数据为“SELECT c FROM tt02 WHERE c<13 LIMIT 1”,则对应的第二表达式类型为动态表达式类型。
在一些实施例的步骤S230中,第一裁剪标志数据包括动态裁剪标志、静态裁剪标志和不裁剪标志。根据第一表达式类型和第二表达式类型确定第一裁剪标志数据。具体地,当第一表达式类型为分区键存在类型且第二表达式类型为静态表达式类型,则第一裁剪标志数据为静态裁剪标志。当第一表达式类型为分区键存在类型且第二表达式类型为动态表达式类型,则第一裁剪标志数据为动态裁剪标志。当第一表达式类型为分区键不存在类型,则第一裁剪标志数据为不裁剪标志。
本申请实施例先在查询执行器对第一表达式数据和第二表达式数据进行表达式类型校验,并根据校验结果确定在查询优化器上进行静态裁剪,还是在执行器上进行动态裁剪,或者不能进行裁剪,能够适用于约束条件为动态变化的分区裁剪场景,并提高了分区表的查询性能。
在一些实施例的步骤S140中,在确定第一裁剪标志数据后,本申请实施例将根据第一裁剪标志数据对候选分区进行分区筛选,以确定执行器进行数据查询时扫描的目标分区链表。扫描分区名称是指执行器需要扫描时的分区名称。
请参阅图3,图3是本申请实施例提供的步骤S140的一个可选的流程图。在本申请的一些实施例中,步骤S140具体包括但不限于步骤S310至步骤S350,下面结合图3对这五个步骤进行详细介绍。
步骤S310,当第一裁剪标志数据为动态裁剪标志,获取初始分区链表数据;
步骤S320,根据第一表达式类型和第二表达式类型确定子查询表达式数据;子查询表达式数据为第一表达式数据或第二表达式数据;
步骤S330,根据初始分区链表数据对子查询表达式数据进行表达式计算,确定子查询分区数据;
步骤S340,根据子查询分区数据和第一比较运算符对候选分区进行分区选择,确定扫描分区名称;
步骤S350,根据扫描分区名称生成目标分区链表数据。
在一些实施例的步骤S310中,当第一裁剪标志数据为动态裁剪标志,则查询优化器先根据目标分区表构建初始分区链表数据,并将该初始分区链表数据发送到执行器。这时的初始分区链表数据包含目标分区表的全部分区。
在一些实施例的步骤S320中,根据第一表达式类型和第二表达式类型确定为动态变化的子查询表达式数据。子查询表达式数据为第一表达式数据或第二表达式数据。例如,当第一表达式数据为动态变化的,将第一表达式数据作为子查询表达式数据,当第二表达式数据为动态变化的,则将第二表达式数据作为子查询表达式数据。
在一些实施例的步骤S330中,执行器根据初始分区链表数据对子查询表达式数据进行表达式计算,确定子查询分区数据。子查询分区数据为子查询表达式数据的有效分区范围。
在一些实施例的步骤S340中,在确定了子查询分区数据的有效分区范围后,根据子查询分区数据和第一比较运算符对候选分区进行分区选择,从而确定整个目标约束条件数据对应的有效分区的扫描分区名称。因此,根据子查询分区数据和第一比较运算符的分区选择,能够实现动态变化的约束条件对无效分区的过滤,以保证在后续的分区扫描时只扫描有效的分区。
在一些实施例的步骤S350中,在确定了扫描分区名称,生成目标分区链表数据。该目标分区链表数据是指执行器进行分区扫描的有效分区的名称链表。
需要说明的是,查询优化器会将需要扫描的分区名组成链表,传递到执行器,告诉执行器后续具体需要扫描哪些分区。但是对于第一裁剪标志数据为动态裁剪标志,则需要生成包含全部分区的目标分区链表数据。然后,执行器对子查询表达式数据进行表达式计算,以再次确定有效的扫描分区。
示例性的,根据如下语句,分区表prune_tt01包含了四个分区(p1、p2、p3、p4),a列为分区键。其中p1分区的有效范围为(INT_MIN,5),p2分区的有效范围为[5,10),p3分区的有效范围为[10,15),p4分区的有效范围为[15,INT_MAX)。
CREATE TABLE prune_tt01(a int, b int) PARTITION BY RANGE(a)
(
PARTITION p1 VALUES LESS THAN(5),
PARTITION p2 VALUES LESS THAN(10),
PARTITION p3 VALUES LESS THAN(15),
PARTITION p4 VALUES LESS THAN(MAXVALUE)
);
CREATE TALBE tt02(c int, d int);
SELECT * FROM prune_tt01 WHERE a>(SELECT c FROM tt02 WHERE c<13 LIMIT1);
根据示例中的语句可以得到,目标查询语句为“SELECT * FROM prune_tt01WHERE a>(SELECT c FROM tt02 WHERE c<13 LIMIT 1)”。其中,第一表达式数据为a为分区键,第二表达式数据为一个子查询语句“SELECT c FROM tt02 WHERE c<13 LIMIT 1”。通过对第一表达式数据和第二表达式数据的表达式类型判断,可以确定第一裁剪标志数据为动态裁剪标志。因此,在查询优化器阶段是不能获得子查询语句的执行结果,此时将包含分区表的全部四个分区(p1,p2,p3,p4)的初始分区链表数据传递到执行器,并设置标志位为动态裁剪标志。在执行器的Partition Iterator算子上,先根据校验结果判断是否为动态裁剪标志,如果为动态裁剪标志,对子查询表达式数据进行表达式计算,得到子查询分区数据,即确定分区约束的有效范围。根据子查询分区数据和第一比较运算符对候选分区进行分区选择,确定扫描分区名称。之后,根据扫描分区名称生成目标分区链表数据,该目标分区链表数据过滤掉了无效的分区,便于后续只扫描有效的分区。
请参阅图4,图4是本申请实施例提供的步骤S330的一个可选的流程图。在本申请的一些实施例中,步骤S330具体包括但不限于步骤S410至步骤S440,下面结合图4对这四个步骤进行详细介绍。
步骤S410,根据初始分区链表数据获取子查询表达式的子查询分区表和子查询约束条件数据;
步骤S420,对子查询约束条件数据进行条件数据解析,得到第三表达式数据、第二比较运算符和第四表达式数据,第三表达式数据和第四表达式数据为第二比较运算符两侧的数据;
步骤S430,根据第三表达式数据和第四表达式数据对子查询分区表进行分区筛选,得到子查询分区链表数据;子查询分区链表数据包括子查询分区名称;
步骤S440,根据子查询分区名称对子查询分区表进行分区扫描,得到子查询分区数据,子查询分区数据用于表示子查询表达式进行数据查询的扫描范围。
在一些实施例的步骤S410至步骤S440中,当第一裁剪标志数据为动态裁剪标志,执行器会对子查询表达式数据进行表达式计算,得到子查询分区数据,即确定分区约束的有效范围。具体地,执行器根据扫描算子对初始分区链表数据进行扫描,获取子查询表达式的子查询分区表和子查询约束条件数据。子查询分区表为子查询表达式数据中与目标分区表相同定义的分区表。然后,对子查询约束条件数据进行条件数据解析,得到第三表达式数据、第二比较运算符和第四表达式数据,第三表达式数据和第四表达式数据为第二比较运算符两侧的数据。其中,第三表达式数据是指子查询分区表中需要查询的分区键数据。第四表达式数据是指查询第三表达式数据的约束数据。第二比较运算符是指约束第三表达式数据和第四表达式数据之间关系的数据。之后,根据第三表达式数据和第四表达式数据对子查询分区表进行分区筛选,得到子查询分区链表数据;子查询分区链表数据包括子查询分区名称。并根据子查询分区名称对子查询分区表进行分区扫描,得到子查询分区数据,子查询分区数据用于表示子查询表达式进行数据查询的扫描范围。
需要说明的时,第三表达式数据可参考上述第一表达式数据,第四表达式数据可参考上述第四表达书数据,第二比较运算符可参考上述第一比较运算符,只是应用与子查询表达式数据对应的语句,在此不再赘述。
需要说明的是,执行器所采用的扫描算子可以为Partition Iterator算子、SeqScan算子等,具体使用哪些算子,以及算子的实现方式和优化策略,可能会因数据库系统的不同而有所差异,在此不作具体限定。
需要说明的是,OpenGauss现有的技术中,只能在优化器上进行裁剪,如果约束条件是动态变化的,优化器是阶段是不能进行裁剪的,这种场景OpenGauss不裁剪,需要扫描全量分区的。因此,本申请实施例可以针对这种不能在优化器上进行裁剪的场景,在执行器上先计算动态变化的约束条件的值,然后进行分区裁剪,最后只扫描裁剪之后的分区。
需要说明的是,对于包含子查询表达式的场景,本申请实施例可以将子查询多次执行,即本申请可以对分区表扫描多次时,实现对分区表进行多次裁剪。相比相关技术中对包含子查询时是不支持进行裁剪的技术,本申请可以避免每次执行过程中,都需要进行全分区扫描,可以有效提高分区裁剪的效率和性能。
请参阅图5,图5是本申请实施例提供的步骤S340的一个可选的流程图。在本申请的一些实施例中,步骤S340具体包括但不限于步骤S510至步骤S540,下面结合图5对这四个步骤进行详细介绍。
步骤S510,根据子查询分区数据从第一表达式数据和第二表达式数据中确定分区键数据;分区键数据包括候选查询数据;
步骤S520,对子查询分区数据进行分区扫描,得到子查询扫描数据;
步骤S530,根据第一比较运算符对候选查询数据和子查询扫描数据进行数值比较,得到数值比较结果;
步骤S540,根据数值比较结果对候选分区进行分区选择,确定扫描分区名称。
在一些实施例的步骤S510中,在确定子查询分区数据后,由于第一表达式数据或第二表达式数据为表示需要查询的分区键数据。根据子查询分区数据从第一表达式数据和第二表达式数据中确定分区键数据;分区键数据包括候选查询数据。例如,目标约束条件数据为“a>(SELECT a FROM tt02 WHERE a>50 LIMIT 1)”,当第一表达式数据为“a”,则从第一表达式数据中包括一个分区键数据“a”,则此时的“a”就表示候选查询数据对应的字段。因此,此时的第二表达式数据为非分区键的一侧表达式数据。
在一些实施例的步骤S520中,对子查询分区数据进行分区扫描,得到子查询扫描数据。其中,子查询扫描数据用于表示子查询表达式数据经过分区裁剪后的分区数据。
在一些实施例的步骤S530步骤S540中,为了确定主查询的分区裁剪范围,根据第一比较运算符对候选查询数据和子查询扫描数据进行数值比较,以确定在子查询表达式数据裁剪后的分区中满足裁剪的有效分区范围。之后,根据数值比较结果对候选分区进行分区选择,确定目标查询语句的主查询对应的扫描分区名称。
请参阅图6,图6是本申请实施例提供的步骤S140的另一个可选的流程图。在本申请的一些实施例中,步骤S140具体还包括但不限于步骤S610至步骤S630,下面结合图6对这三个步骤进行详细介绍。
步骤S610,当第一裁剪标志数据为静态裁剪标志,根据第一表达式类型和第二表达式类型确定静态约束数据;静态约束数据为第一表达式数据或第二表达式数据;
步骤S620,根据静态约束数据和第一比较运算符对目标分区表进行分区选择,确定扫描分区名称;
步骤S630,根据扫描分区名称生成目标分区链表数据。
在一些实施例的步骤S610中,当第一裁剪标志数据为静态裁剪标志,根据第一表达式类型和第二表达式类型确定静态约束数据,该静态约束数据为第一表达式数据或第二表达式数据。该静态约束数据用于表示非分区键的表达式数据。例如,目标查询语句为“SELECT * FROM prune_tt01 WHERE a>12”,第一表达式数据为分区键数据a,第二表达式数据即静态约束数据为“12”。这时的目标约束条件数据中的一侧是分区键a列,另外一侧是确定的值,第一裁剪标志数据为静态裁剪标志。
在一些实施例的步骤S620中,根据静态约束数据和第一比较运算符对目标分区表进行分区选择,确定扫描分区名称。例如,对于上述示例,分区表prune_tt01包含了四个分区(p1、p2、p3、p4),a列为分区键。其中p1分区的有效范围为(INT_MIN,5),p2分区的有效范围为[5,10),p3分区的有效范围为[10,15),p4分区的有效范围为[15,INT_MAX)。因此,对于目标分区约束条件“a>12”,通过比较可以确定分区p1和p2中的数据肯定不满足约束条件,可以直接将其裁剪掉。并且,可以确定扫描分区名称为p3和p4,并设置标志位为静态裁剪标志。
在一些实施例的步骤S630中,在确定扫描分区名称后,将扫描分区名称组成链表,即生成目标分区链表数据,以告诉执行器具体可以扫描哪些分区。查询优化器将目标分区链表数据和裁剪标志数据都发送到执行器。执行器可以采用Partition Iterator算子对目标分区链表数据中对应的分区进行扫描,得到目标扫描分区。
请参阅图7,图7是本申请实施例提供的步骤S140的另一个可选的流程图。在本申请的一些实施例中,步骤S140具体还包括但不限于步骤S710至步骤S720,下面结合图7对这两个步骤进行详细介绍。
步骤S710,当第一裁剪标志数据为不裁剪标志,根据目标分区表的全部候选分区确定扫描分区名称;
步骤S720,根据扫描分区名称生成目标分区链表数据。
在一些实施例的步骤S710和步骤S720中,如果动态裁剪标志和静态裁剪标志对应的条件都不满足,则第一裁剪标志数据为不裁剪标志。例如,查询的约束条件为b>12, 其中表达式的一侧为b列不是分区列,不能进行任何裁剪。此时需要将第一裁剪标志数据和目标分区表的四个分区(p1,p2,p3,p4)全部传递到执行层。具体地,将目标分区表的全部候选分区的名称作为扫描分区名称。然后,根据扫描分区名称进行链表生成,得到目标分区链表数据。
在一些实施例的步骤S150中,执行器在接收到目标分区链表数据后,根据目标分区链表数据中的扫描分区名称对目标分区表进行分区扫描,实现了对目标分区表的分区裁剪,提升了分区表的查询性能。
本申请实施例通过将查询优化器上的静态裁剪和执行器的Partition Iterator算子上的动态裁剪协同配合,通过两次裁剪确保对分区表的大多数场景均能进行分区裁剪,提升了分区表的查询性能。
示例性的,请参阅图8,图8为本申请实施例提供的分区裁剪方法的一个整体示例示意图。
步骤S810,定义分区表prune_tt01的参数;其中,分区表prune_tt01包含了四个分区(p1、p2、p3、p4),a列为分区键。其中,p1分区的有效范围为(INT_MIN, 5),INT_MIN表示整型数据类型(int)的最小值。在大多数编程语言中,int类型的取值范围通常是从-2147483648(-2^31)到2147483647(2^31-1),其中-2147483648即为INTMIN。p2分区的有效范围为[5,10),p3分区的有效范围为[10,15),p4分区的有效范围为[15,INT_MAX),2147483647即为INTMAX。
步骤S820,将目标查询语句输入查询优化器,并确定目标分区表和目标约束条件数据;
步骤S830,查询优化器对目标约束条件数据进行裁剪状态判断,确定第一裁剪标志数据;当第一裁剪标志数据为静态裁剪标志,执行步骤S841;当第一裁剪标志数据为动态裁剪标志,执行步骤S842;当第一裁剪标志数据为不裁剪标志,执行步骤S843;
步骤S841,查询优化器对目标约束条件数据中非分区键的表达式数据进行计算,确定目标分区链表数据,执行步骤S851;例如,目标约束条件数据“a>12”,这时的初始分区链表数据中包含的扫描分区名称为p3,p4;
步骤S842,查询优化器根据目标分区表中的全部候选分区的名称构成初始分区链表数据,执行步骤S853;例如,目标约束条件数据“a>(SELECT c FROM tt02 WHERE c<13LIMIT 1)”,这时的初始分区链表数据中包含的扫描分区名称为p1,p2,p3,p4;
步骤S843,查询优化器根据目标分区表中的全部候选分区的名称构成目标分区链表数据,执行步骤S856;例如,目标约束条件数据“b>12”,b列不是分区列,这时的初始分区链表数据中包含的扫描分区名称为p1,p2,p3,p4;
步骤S851,执行器接收目标分区链表数据和静态裁剪标志,并调用PartitionIterator算子;
步骤S852,根据扫描分区名称对目标分区表进行分区扫描,确定目标扫描分区,如p3,p4;之后,执行步骤S858;
步骤S853,执行器接收初始分区链表数据和动态裁剪标志,并调用PartitionIterator算子;
步骤S854,对子查询约束条件数据进行分区裁剪,得到子查询分区数据;并根据子查询分区数据对候选分区进行分区选择,得到动态裁剪的目标分区链表数据,如p1,p3;
步骤S855,根据扫描分区名称对目标分区表进行分区扫描,确定目标扫描分区,如p1,p3;之后,执行步骤S858;
步骤S856,执行器接收目标分区链表数据和不裁剪标志,并调用PartitionIterator算子;
步骤S857,根据扫描分区名称对目标分区表进行分区扫描,确定目标扫描分区,如p1,p2,p3,p4;
步骤S858,分区裁剪结束。
本申请实施例所提供的一种数据库的分区裁剪装置,先根据对目标约束条件数据进行解析和校验,确定目标分区表在之后的执行器上的裁剪状态。然后,根据裁剪状态采用不同的方式进行分区裁剪。本申请实施例对分区约束条件要求低,约束条件为动态变化时,也能进行分区裁剪,极大的扩展了分区裁剪的适用场景,整体提升了分区表的查询性能。并且,本申请实施例可以对分区表扫描多次,可以对分区表进行多次裁剪,极大地提升了分区表的查询性能。因此,本申请实施例即使在不能确定分区键的约束范围的条件下,即约束条件中包括外部参数或动态变化的表达式时,也可以较好的实现对分区的扫描,有效提高数据库的分区裁剪性能。
请参阅图9,图9是本申请实施例提供的数据库的分区裁剪装置的结构示意图,该装置可以实现上述实施例的数据库的分区裁剪方法,该装置包括获取模块910、数据解析模块920、状态判断模块930、分区筛选模块940和分区扫描模块950。
获取模块910,用于获取目标查询语句的目标分区表和目标约束条件数据;目标分区表包括候选分区;
数据解析模块920,用于对目标约束条件数据进行条件数据解析,得到第一表达式数据、第一比较运算符和第二表达式数据,第一表达式数据和第二表达式数据为第一比较运算符两侧的数据;
状态判断模块930,用于根据第一表达式数据和第二表达式数据进行裁剪状态判断,确定第一裁剪标志数据;
分区筛选模块940,用于根据第一裁剪标志数据对候选分区进行分区筛选,得到目标分区链表数据;目标分区链表数据包括扫描分区名称;
分区扫描模块950,用于根据扫描分区名称对目标分区表进行分区扫描,得到目标扫描分区,目标扫描分区用于表示目标查询语句进行数据查询的扫描范围。
需要说明的是,本申请实施例的数据库的分区裁剪装置用于实现上述实施例的数据库的分区裁剪方法,本申请实施例的数据库的分区裁剪装置与前述的数据库的分区裁剪方法相对应,具体的处理过程请参照前述的数据库的分区裁剪方法,在此不再赘述。
本申请实施例还提供了一种计算机设备,该计算机设备包括:至少一个存储器,至少一个处理器,至少一个计算机程序,至少一个计算机程序被存储在至少一个存储器中,至少一个处理器执行至少一个计算机程序以实现上述实施例中任一种的数据库的分区裁剪方法。该计算机设备可以为包括平板电脑、车载电脑等任意智能终端。
请参阅图10,图10示意了另一实施例的一种计算机设备的硬件结构,该计算机设备包括:
处理器1010,可以采用通用的中央处理器(Central Processing Unit,CPU)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请实施例所提供的技术方案;
存储器1020,可以采用只读存储器(Read Only Memory,ROM)、静态存储设备、动态存储设备或者随机存取存储器(Random Access Memory,RAM)等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行本申请实施例的数据库的分区裁剪方法;
输入/输出接口1030,用于实现信息输入及输出;
通信接口1040,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信;
总线1050,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息;
其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,计算机程序用于使计算机执行上述实施例中数据库的分区裁剪方法。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本申请实施例描述的实施例是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本领域技术人员可以理解的是,图中示出的技术方案并不构成对本申请实施例的限定,可以包括比图示更多或更少的步骤,或者组合某些步骤,或者不同的步骤。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例的方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序的介质。
以上参阅附图说明了本申请实施例的优选实施例,并非因此局限本申请实施例的权利范围。本领域技术人员不脱离本申请实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本申请实施例的权利范围之内。
Claims (10)
1.一种数据库的分区裁剪方法,其特征在于,所述方法包括:
获取目标查询语句的目标分区表和目标约束条件数据;所述目标分区表包括候选分区;
对所述目标约束条件数据进行条件数据解析,得到第一表达式数据、第一比较运算符和第二表达式数据,所述第一表达式数据和所述第二表达式数据为所述第一比较运算符两侧的数据;
根据所述第一表达式数据和所述第二表达式数据进行裁剪状态判断,确定第一裁剪标志数据;
根据所述第一裁剪标志数据对所述候选分区进行分区筛选,得到目标分区链表数据;所述目标分区链表数据包括扫描分区名称;
根据所述扫描分区名称对所述目标分区表进行分区扫描,得到目标扫描分区,所述目标扫描分区用于表示所述目标查询语句进行数据查询的扫描范围。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一表达式数据和所述第二表达式数据进行裁剪状态判断,确定第一裁剪标志数据,包括:
对所述第一表达式数据进行表达式类型判断,确定第一表达式类型;
对所述第二表达式数据进行表达式类型判断,确定第二表达式类型;
根据所述第一表达式类型和所述第二表达式类型确定所述第一裁剪标志数据。
3.根据权利要求2所述的方法,其特征在于,所述第一裁剪标志数据包括动态裁剪标志,所述根据所述第一裁剪标志数据对所述候选分区进行分区筛选,得到目标分区链表数据,包括:
当所述第一裁剪标志数据为所述动态裁剪标志,获取初始分区链表数据;
根据所述第一表达式类型和所述第二表达式类型确定子查询表达式数据;所述子查询表达式数据为所述第一表达式数据或所述第二表达式数据;
根据所述初始分区链表数据对所述子查询表达式数据进行表达式计算,确定子查询分区数据;
根据所述子查询分区数据和所述第一比较运算符对所述候选分区进行分区选择,确定所述扫描分区名称;
根据所述扫描分区名称生成所述目标分区链表数据。
4.根据权利要求3所述的方法,其特征在于,所述根据所述初始分区链表数据对所述子查询表达式数据进行表达式计算,确定子查询分区数据,包括:
根据所述初始分区链表数据获取所述子查询表达式的子查询分区表和子查询约束条件数据;
对所述子查询约束条件数据进行条件数据解析,得到第三表达式数据、第二比较运算符和第四表达式数据,所述第三表达式数据和所述第四表达式数据为所述第二比较运算符两侧的数据;
根据所述第三表达式数据和所述第四表达式数据对所述子查询分区表进行分区筛选,得到子查询分区链表数据;所述子查询分区链表数据包括子查询分区名称;
根据所述子查询分区名称对所述子查询分区表进行分区扫描,得到子查询分区数据,所述子查询分区数据用于表示所述子查询表达式进行数据查询的扫描范围。
5.根据权利要求3所述的方法,其特征在于,所述根据所述子查询分区数据和所述第一比较运算符对所述候选分区进行分区选择,确定所述扫描分区名称,包括:
根据所述子查询分区数据从所述第一表达式数据和所述第二表达式数据中确定分区键数据;所述分区键数据包括候选查询数据;
对所述子查询分区数据进行分区扫描,得到子查询扫描数据;
根据所述第一比较运算符对所述候选查询数据和所述子查询扫描数据进行数值比较,得到数值比较结果;
根据所述数值比较结果对所述候选分区进行分区选择,确定所述扫描分区名称。
6.根据权利要求2所述的方法,其特征在于,所述第一裁剪标志数据还包括静态裁剪标志,所述根据所述第一裁剪标志数据对所述候选分区进行分区筛选,得到目标分区链表数据,还包括:
当所述第一裁剪标志数据为所述静态裁剪标志,根据所述第一表达式类型和所述第二表达式类型确定静态约束数据;所述静态约束数据为所述第一表达式数据或所述第二表达式数据;
根据所述静态约束数据和所述第一比较运算符对所述目标分区表进行分区选择,确定所述扫描分区名称;
根据所述扫描分区名称生成所述目标分区链表数据。
7.根据权利要求2所述的方法,其特征在于,所述第一裁剪标志数据还包括不裁剪标志,所述根据所述第一裁剪标志数据对所述候选分区进行分区筛选,得到目标分区链表数据,还包括:
当所述第一裁剪标志数据为所述不裁剪标志,根据目标分区表的全部所述候选分区确定所述扫描分区名称;
根据所述扫描分区名称生成所述目标分区链表数据。
8.一种数据库的分区裁剪装置,其特征在于,所述装置包括:
获取模块,用于获取目标查询语句的目标分区表和目标约束条件数据;所述目标分区表包括候选分区;
数据解析模块,用于对所述目标约束条件数据进行条件数据解析,得到第一表达式数据、第一比较运算符和第二表达式数据,所述第一表达式数据和所述第二表达式数据为所述第一比较运算符两侧的数据;
状态判断模块,用于根据所述第一表达式数据和所述第二表达式数据进行裁剪状态判断,确定第一裁剪标志数据;
分区筛选模块,用于根据所述第一裁剪标志数据对所述候选分区进行分区筛选,得到目标分区链表数据;所述目标分区链表数据包括扫描分区名称;
分区扫描模块,用于根据所述扫描分区名称对所述目标分区表进行分区扫描,得到目标扫描分区,所述目标扫描分区用于表示所述目标查询语句进行数据查询的扫描范围。
9.一种计算机设备,其特征在于,包括:
至少一个存储器;
至少一个处理器;
至少一个计算机程序;
所述至少一个计算机程序被存储在所述至少一个存储器中,所述至少一个处理器执行所述至少一个计算机程序以实现:
如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序用于使计算机执行:
如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311062436.9A CN116775698B (zh) | 2023-08-23 | 2023-08-23 | 数据库的分区裁剪方法和装置、计算机设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311062436.9A CN116775698B (zh) | 2023-08-23 | 2023-08-23 | 数据库的分区裁剪方法和装置、计算机设备、存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116775698A true CN116775698A (zh) | 2023-09-19 |
CN116775698B CN116775698B (zh) | 2023-11-24 |
Family
ID=87989854
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311062436.9A Active CN116775698B (zh) | 2023-08-23 | 2023-08-23 | 数据库的分区裁剪方法和装置、计算机设备、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116775698B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120117065A1 (en) * | 2010-11-05 | 2012-05-10 | Microsoft Corporation | Automated partitioning in parallel database systems |
CN109815241A (zh) * | 2019-01-31 | 2019-05-28 | 上海达梦数据库有限公司 | 数据查询方法、装置、设备和存储介质 |
CN110019238A (zh) * | 2017-12-29 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 多维度范围分区裁剪的方法、装置和存储介质 |
CN114090617A (zh) * | 2021-11-30 | 2022-02-25 | 上海达梦数据库有限公司 | 一种计划执行方法、装置、数据库节点及介质 |
CN114416884A (zh) * | 2022-03-28 | 2022-04-29 | 北京奥星贝斯科技有限公司 | 连接分区表的方法和装置 |
-
2023
- 2023-08-23 CN CN202311062436.9A patent/CN116775698B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120117065A1 (en) * | 2010-11-05 | 2012-05-10 | Microsoft Corporation | Automated partitioning in parallel database systems |
CN110019238A (zh) * | 2017-12-29 | 2019-07-16 | 阿里巴巴集团控股有限公司 | 多维度范围分区裁剪的方法、装置和存储介质 |
CN109815241A (zh) * | 2019-01-31 | 2019-05-28 | 上海达梦数据库有限公司 | 数据查询方法、装置、设备和存储介质 |
CN114090617A (zh) * | 2021-11-30 | 2022-02-25 | 上海达梦数据库有限公司 | 一种计划执行方法、装置、数据库节点及介质 |
CN114416884A (zh) * | 2022-03-28 | 2022-04-29 | 北京奥星贝斯科技有限公司 | 连接分区表的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116775698B (zh) | 2023-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11068439B2 (en) | Unsupervised method for enriching RDF data sources from denormalized data | |
JP4437918B2 (ja) | 選択的に情報を検索しその後その情報の表示を可能にする装置および方法 | |
US8560731B2 (en) | Subscription-based dynamic content optimization | |
CN107515878B (zh) | 一种数据索引的管理方法及装置 | |
EP3968178A1 (en) | Log parsing method and device, server and storage medium | |
CN106294695A (zh) | 一种面向实时大数据搜索引擎的实现方法 | |
US20060179036A1 (en) | Methods and systems for displaying matching business objects | |
EP2583195B1 (en) | Method and server for handling database queries | |
KR20070062408A (ko) | 의미적 그리고 기능적 관계에 따라 포털 페이지상의포틀릿의 자동적 배치를 위한 시스템 | |
CN109815283A (zh) | 一种异构数据源可视化查询方法 | |
CN111858760B (zh) | 一种异构数据库的数据处理方法及装置 | |
CN112015722A (zh) | 数据库管理方法、数据血缘分析方法以及相关装置 | |
CN114356971A (zh) | 数据处理方法、装置以及系统 | |
CN109117426B (zh) | 分布式数据库查询方法、装置、设备及存储介质 | |
CN110502532A (zh) | 远程数据库对象的优化方法、装置、设备和存储介质 | |
CN102654879B (zh) | 搜索方法及装置 | |
CN112541119B (zh) | 一种高效节源的小型推荐系统 | |
CN116775698B (zh) | 数据库的分区裁剪方法和装置、计算机设备、存储介质 | |
CN116561337A (zh) | 网络攻击知识图谱生成方法、装置、电子设备及存储介质 | |
CN115687717A (zh) | Grok表达式获取方法、装置、设备及计算机可读存储介质 | |
CN113868138A (zh) | 测试数据的获取方法、系统、设备及存储介质 | |
CN110162574B (zh) | 数据重分布方式的确定方法、装置、服务器及存储介质 | |
CN113656438A (zh) | 数据树的数据查询方法及装置 | |
US11288329B2 (en) | Method for obtaining intersection of plurality of documents and document server | |
CN111125108A (zh) | 基于Lucene的HBASE二级索引方法、装置及计算机设备 |
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 |