CN117708169A - 数据库查询优化方法、装置、电子设备及存储介质 - Google Patents
数据库查询优化方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117708169A CN117708169A CN202311800168.6A CN202311800168A CN117708169A CN 117708169 A CN117708169 A CN 117708169A CN 202311800168 A CN202311800168 A CN 202311800168A CN 117708169 A CN117708169 A CN 117708169A
- Authority
- CN
- China
- Prior art keywords
- data table
- connection
- data
- filtering
- database
- 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
- 238000000034 method Methods 0.000 title claims abstract description 55
- 238000005457 optimization Methods 0.000 title claims abstract description 43
- 238000001914 filtration Methods 0.000 claims abstract description 169
- 238000012545 processing Methods 0.000 claims abstract description 24
- 238000004364 calculation method Methods 0.000 claims abstract description 18
- 238000004590 computer program Methods 0.000 claims description 7
- 230000005540 biological transmission Effects 0.000 abstract description 13
- 239000000523 sample Substances 0.000 description 17
- 230000000694 effects Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 10
- 230000006870 function Effects 0.000 description 6
- 238000004422 calculation algorithm Methods 0.000 description 5
- 238000004891 communication Methods 0.000 description 5
- 230000008707 rearrangement Effects 0.000 description 4
- 238000010276 construction Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013481 data capture Methods 0.000 description 1
- 238000011156 evaluation 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
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本请涉及一种数据库查询优化方法、装置、电子设备及存储介质,所述方法包括:响应于查询请求,获取数据库中待查询的第一数据表和第二数据表之间的连接规则;利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表;判断所述目标连接数据表是否符合过滤条件;在所述目标连接数据表满足过滤条件的情况下,对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表;从更新后的目标连接数据表中获取与所述查询请求对应的查询结果。通过提前过滤掉那些不会命中join的输入数据,大幅减少join中的数据传输和计算,提高整体的执行效率。
Description
技术领域
本申请涉及数据库查询领域,尤其涉及一种数据库查询优化方法、装置、电子设备及存储介质。
背景技术
在大数据时代,对海量数据的数据分析越来越重视,涉及的业务场景也越来越复杂,数据量也是越来越大,在分析类查询中,如果返回在查询引擎中的数据量十分庞大甚至过亿的话,不仅在数据传输方面有很大的压力,而且对程序的资源消耗也十分巨大。如果大表之间(或大表与小表)的join通常使用Hash Join实现,这通常也是查询的性能瓶颈之一,因此如何优化join的查询性能也是计算引擎的重点。动态过滤作为一种常用的优化手段,其基本原理是通过在join的probe端提前过滤掉那些不会命中join的输入数据来大幅减少join中的数据传输和计算,从而减少整体的执行时间。
然而,当前判断是否需要加入动态过滤流程的时候,往往是简单通过人工控制的时长限制是否执行动态过滤,有的时候很难达到想要优化的效果。而且当前的大多数系统中动态过滤所需要的算子都是在优化器的CBO阶段之后插入进物理执行计划的。
因而,亟需研发一种数据库查询优化方法设备解决上述存在的一个或多个问题。
发明内容
鉴于此,为解决上述技术问题或部分技术问题,本发明实施例提供一种数据库查询优化方法、装置、电子设备及存储介质。
第一方面,本申请提供了一种数据库查询优化方法,所述方法包括:
响应于查询请求,获取数据库中待查询的第一数据表和第二数据表之间的连接规则;
利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表;
判断所述目标连接数据表是否符合过滤条件,所述过滤条件包括第一过滤条件和第二过滤条件;
在所述目标连接数据表满足过滤条件的情况下,对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表;
从更新后的目标连接数据表中获取与所述查询请求对应的查询结果。
在一个可能的实施方式中,所述获取数据库中待查询的第一数据表和第二数据表之间的连接规则,包括:
获取数据库的查询顺序以及数据库中第一数据表和第二数据表的数据量;
根据数据库的查询顺序和所述第一数据表和第二数据表的数据量得到所述第一数据表和第二数据表之间的连接规则,其中,所述连接规则对应的连接顺序与所述数据库的查询顺序一致。
在一个可能的实施方式中,所述利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表,包括:
根据所述连接规则得到所述第一数据表和第二数据表的连接顺序;
利用所述第一数据表和第二数据表的连接顺序采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表,其中,所述第一数据表的数据量小于第二数据表。
在一个可能的实施方式中,所述判断所述目标连接数据表是否符合过滤条件,包括:
获取所述目标连接数据表中第一数据表和第二数据表的数据量,分别作为第一数据量和第二数据量;
判断所述第一数据量与第二数据量的比值是否小于第一阈值;
在所述第一数据量与第二数据量的比值小于第一阈值的情况下,所述连接数据表符合第一过滤条件;
在所述目标连接数据表符合第一过滤条件的情况下,获取所述目标连接数据表中第一数据表与所述第二数据表的关联字段;
判断所述关联字段是否为所述目标连接数据表的索引字段;
在所述关联字段为索引字段的情况下,所述连接数据表符合第二过滤条件。
在一个可能的实施方式中,所述对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表,包括:
根据所述第一数据表生成过滤规则;
根据所述过滤规则对所述第二数据表进行过滤处理得到第三数据表;
获取所述第三数据表和第一数据表的连接规则;
根据所述连接规则采用哈希连接的方式对所述第三数据表和第一数据表进行连接处理得到新的连接数据表,完成所述目标连接数据表的更新。
在一个可能的实施方式中,所述从更新后的目标连接数据表中获取与所述查询请求对应的查询结果,包括:
将更新后的目标连接数据表作为第一连接数据表;
获取第一连接数据表以及数据库中其余连接数据表的执行代价;
根据所述执行代价获取所述第一连接数据表以及数据库中其余连接数据表的查询顺序,并根据所述查询顺序从数据库中获取与所述查询请求对应的查询结果。
在一个可能的实施方式中,所述执行代价包括CPU执行代价与内存执行代价;
所述CPU执行代价的计算公式包括:
C1=W1*M1+W2*M2;
其中,所述C1为CPU执行代价,所述W1为第一数据表的权重,所述M1为第一数据量,所述W2为第二数据表的权重,所述M2为第二数据量;
所述内存代价的计算公式包括:
C2=M1*N1;
其中,所述C2为内存执行代价,所述M1为第一数据量,所述N1为第一数据表中一行数据的数据量。
第二方面,本申请提供了一种数据库查询优化装置,所述装置包括:
获取模块,用于获取数据库中待查询的第一数据表和第二数据表之间的连接规则;
连接模块,用于利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表;
判断模块,用于判断所述目标连接数据表是否符合过滤条件;
过滤模块,用于在所述目标连接数据表满足过滤条件的情况下,对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表;
查询模块,用于从更新后的目标连接数据表中获取与所述查询请求对应的查询结果。
第三方面,本申请提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面任一项实施例所述的磁盘资源管理方法的步骤。
第四方面,本申请提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面任一项实施例所述的磁盘资源管理方法的步骤。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:本申请实施例提供的方法在多表关联查询时,在join的驱动表数据量比较小,命中率较低,将build端在生成hash table时同时生成动态过滤,通过join的关联条件将probe端提前过滤掉那些不会命中join的输入数据,大幅减少join中的数据传输和计算,提高整体的执行效率。并在加入动态过滤流程上,计算动态过滤之后的执行计划代价,进行JOIN重新优化,得到整个执行计划树的最优路径
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1为本申请实施例提供的一种数据库查询优化方法的流程示意图;
图2为本申请实施例提供的另一种数据库查询优化方法的流程示意图;
图3为本申请实施例提供的又一种数据库查询优化方法的流程示意图;
图4为本申请实施例提供的一种数据库查询优化方法的效果示意图;
图5为本申请实施例提供的一种数据库查询优化方法的另一种效果示意图。
图6为本申请实施例提供的一种数据库查询优化方法的再一种效果示意图。
图7为本申请实施例提供的一种数据库查询优化装置的结构示意图;
图8为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本发明。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。
现有技术中判断是否需要加入动态过滤流程的时候,往往是简单通过人工控制的时长限制是否执行动态过滤,有的时候很难达到想要优化的效果。而且当前的大多数系统中动态过滤所需要的算子都是在优化器的CBO阶段之后插入进物理执行计划的,使用的是一种基于规则的优化方法。然而我们通常可以验证出如果将动态过滤对执行计划所带来的影响在CBO阶段纳入考虑,则能更进一步地优化执行计划。
在分布式sql查询引擎中,多表关联查询是十分常见的操作,在join的驱动表数据量比较小,命中率较低的join,可以将build侧生成动态过滤,通过join的关联条件将probe端提前过滤掉那些不会命中join的输入数据来大幅减少join中的数据传输和计算,从而减少整体的执行时间。而考虑过滤后的数据量可能影响整个CBO计算的结果,可以通过join重排而达到整体执行计划的优化。
为了解决现有技术中很难达到想要优化的效果。而且当前的大多数系统中动态过滤所需要的算子都是在优化器的CBO阶段之后插入进物理执行计划的技术问题,本申请提供了一种数据库查询优化方法、装置、电子设备及存储介质,能实现将build端在生成hashtable时同时生成动态过滤,通过join的关联条件将probe端提前过滤掉那些不会命中join的输入数据,可以大幅减少join中的数据传输和计算,提高整体的执行效率。并在加入动态过滤流程上,进行整个执行计划树重新考虑基于CBO代价计算的join重排优化。
图1为本申请实施例提供的一种数据库查询优化方法的流程示意图,如图1所示,该方法具体包括:
S101、响应于查询请求,获取数据库中待查询的第一数据表和第二数据表之间的连接规则;
Hash Join是利用hash函数来实现和加速数据库中join操作的算法,主要包括构建哈希表和进行连接,在实践的过程中,需要针对等值join所需的等值比较,数据库系统会选择和优化hash函数,使其能够快速缩小需要和一个键值进行等值比较的其他键值的数量或范围,从而实现了通过减少计算量、内外存访问量等手段来降低join算法的执行开销。
在本实施例中,在进行Hash Join计算时会在右表构建一个Hash Table,左表流式地通过右表的Hash Table从而得出Join结果。首先获取数据库在待查询的第一数据表和第二数据表的数据表内数据的情况,从而判断第一数据表与第二数据表中由那个数据表作为Hash Join计算过程中的右表,进一步获取第一数据表和第二数据表之间的连接规则。
S102、利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表;
Hash Join连接对象是两个数据表,首先选择出其中一个“小表”。这里的小表,就是参与连接操作的数据集合数据量小。对连接列字段的所有数据值,进行Hash函数操作,经过Hash处理过的小表连接列,连同数据一起存放到Oracle PGA空间中。PGA中存在一块空间为hash_area,专门存放此类数据。并且,依据不同的Hash函数值,进行划分Bucket操作。每个Bucket中包括所有相同hash函数值的小表数据。同时建立Hash键值对应位图,之后对进行Hash连接大表数据连接列依次读取,并且将每个Hash值进行Bucket匹配,定位到适当的Bucket上。
需要说明的是,本申请中将数据存储至Oracle PGA空间,并在PGA中存在一块空间为hash_area,专门存放此类数据,以及依据不同的Hash函数值,进行划分Bucket操作仅为举例说明,在具体实施时,数据表的存储空间并不局限于Oracle PGA空间,适用于多种数据库系统。
在本实施例中,build侧(右表)为构建侧,这个表的内容以join条件使用列作为键,构建一个散列查询表。probe侧(左表)为探测侧,一旦散列查找表构建完成,就会使用探测侧表的行去构建侧的散列表中以常数时间查找匹配的行,利用连接规则从第一数据表与第二数据表确定“小表”以及“小表”的位置后,将第一数据表与第二数据表连接得到目标连接数据表。
S103、判断所述目标连接数据表是否符合过滤条件,所述过滤条件包括第一过滤条件和第二过滤条件;
动态过滤就是利用了右表的Hash Table构建阶段去做一些额外的事情。在右表生成Hash Table的时,同时生成一个基于Hash Table数据的一个过滤条件,然后下推到左表的数据扫描节点。通过这样的方式,可以在运行时进行数据过滤。可以通过在join的probe端提前过滤掉那些不会命中join的输入数据来大幅减少join中的数据传输和计算。
在本实施例中,通过probe端的数据量的大小、dynamicfilter的大小以及过滤比例等对动态过滤的代价进行估算,判断所述目标连接数据表是否符合过滤条件。
需要说明书的是,本申请中的第二过滤条件仅在考虑数据库查询性能优化的情况下作为数据表的过滤条件,具体的过滤条件可根据数据库查询需求进行调整。
S104、在所述目标连接数据表满足过滤条件的情况下,对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表;
在本实施例中,在目标连接数据表满足过滤条件时,利用过滤条件进行数据过滤,过滤掉不会命中的join,并根据过滤的数据更新所述目标连接数据表,使得更新后的目标连接数据表优先选择小表join,再选择大表,避免大表造成多次网络shuffle传输。
S105、从更新后的目标连接数据表中获取与所述查询请求对应的查询结果。
加入动态过滤之后,从更新后的目标连接数据表中计算出最优代价的执行路径获取查询结果,由于提前过滤掉了不会命中join的输入数据,因此在获取与查询请求对应的数据时,大大减少了join中数据的传输与计算,提高数据库查询的效率。
本发明实施例提供的数据库查询优化方法,在接收到查询请求时,获取数据库中待查询的第一数据表和第二数据表之间的连接规则,然后利用连接规则采用哈希连接的方式对第一数据表和第二数据表进行连接处理,得到目标连接数据表,进一步判断所述目标连接数据表是否符合过滤条件,在目标连接数据表满足过滤条件的情况下,对目标连接数据表进行过滤处理,并根据过滤结果更新目标连接数据表,从更新后的目标连接数据表中获取与查询请求对应的查询结果。通过详细的统计信息来计算动态过滤的代价,自动判别关联表是否存在于小表,以及build端和probe端数据是否适用于动态过滤,并在动态过滤时在join的probe端提前过滤掉那些不会命中join的输入数据来大幅减少join中的数据传输和计算,从而减少整体的执行时间。
在本发明实施例的一可选方案中,所述获取数据库中待查询的第一数据表和第二数据表之间的连接规则,包括:
获取数据库的查询顺序以及数据库中第一数据表和第二数据表的数据量;
在本实施例中,建立某些表的某些字段的直方图信息,并获取直方图信息select*frominformationschema.columnstatistics,存入内存,并作为元数据的一部分维护直方图信息,用cronExp的方式,定义直方图定时刷新策略。
根据数据库的查询顺序和所述第一数据表和第二数据表的数据量得到所述第一数据表和第二数据表之间的连接规则,其中,所述连接规则对应的连接顺序与所述数据库的查询顺序一致。
Join操作时,会选择小表先join,然后是大表,以避免大表造成多次网络shuffle传输,那就可以将可以产生动态过滤的表先进行join。
在本实施例中,首先判断数据库的查询顺序,然后根据查询顺序确定小表的位置,进一步获取第一数据表与第二数据表的数据量,根据数据库查询顺序对应的小表的位置,确定第一数据表与第二数据表的连接顺序,将该连接顺序作为两表相连的连接规则。
在本发明实施例的一可选方案中,所述利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表,包括:
根据所述连接规则得到所述第一数据表和第二数据表的连接顺序;
利用所述第一数据表和第二数据表的连接顺序采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表,其中,所述第一数据表的数据量小于第二数据表。
在本实施例中,在第一数据表与第二数据表连接处理前,获取第一数据表与第二数据表之间的连接顺序,然后根据连接顺序,采用哈希连接的方式,将两个数据表连接为目标连接数据表。
例如,第一数据表的数据量小于第二数据表,在数据库查询时,优先对右表进行查询,根据先选小表再选大表的规则,将第一数据表的位置设定为第二数据表的右表,采用哈希连接的方式,将上述两个数据表连接为目标连接数据表。
图2为本申请实施例提供的另一种数据库查询优化方法的流程示意图,如图2所示,该方法具体包括:
S201、获取所述目标连接数据表中第一数据表和第二数据表的数据量,分别作为第一数据量和第二数据量;
S202、判断所述第一数据量与第二数据量的比值是否小于第一阈值;
S203、在所述第一数据量与第二数据量的比值小于第一阈值的情况下,所述连接数据表符合第一过滤条件;
进行动态过滤的过程中,当第一数据量与第二数量之间的数据量差值越小,动态过滤的代价越大;在动态过滤前,会估计小表与大表之间的数据量比例,作为动态过滤的过滤比例,当过滤比大于一定的阈值,才考虑加入动态过滤;
S204、在所述目标连接数据表符合第一过滤条件的情况下,获取所述目标连接数据表中第一数据表与所述第二数据表的关联字段;
S205、判断所述关联字段是否为所述目标连接数据表的索引字段;
进行动态过滤的过程中,需保证第一数据表与第二数据表之间的关联字段,分别为第一数据表与第二数据表的索引字段。
S206、在所述关联字段为索引字段的情况下,所述连接数据表符合第二过滤条件。
在本实施例中,在动态过滤前会判断关联字段是否为索引字段,在不是索引字段的情况下需根据动态过滤的效果重新考虑是否加入动态过滤。
此外,在是否满足过滤条件的判断过程中还会考虑,probe端的数据量的大小和dynamicfilter的大小的因素,例如如果probe端的数据量过小,可能无法弥补probe端获取数据源是等待动态过滤收集数据的时间,达不到具体的过滤优化效果;dynamicfilter的大小,取决于build表的数据量,对于通过in表达式将build离散数据下推到probe的方式,dynamicfilter数据量过大的话,对于db节点查询数据源有一定的压力,也会占用过多的内存。所以对dynamicfilter大小设置一定的限制;此上仅为举例说明,具体动态过滤代价的估算与数据库查询过程中的数据量与查询精度等因素有关。
本发明实施例提供的数据库查询优化方法,在动态过滤前考虑动态过滤之后的数据量产生的代价,判断目标链接数据表中的第一数据表与第二数据表是否满足过滤条件,实现动态过滤在数据库查询优化过程中的有效性。
在本发明实施例的一可选方案中,所述对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表,包括:
根据所述第一数据表生成过滤规则;
在本实施例中,在第一数据表生成Hash Table的时,同时生成一个基于HashTable数据的一个过滤条件,然后下推到第二数据表的数据扫描节点。通过这样的方式,可以在运行时进行数据过滤。可以通过在join的probe端提前过滤掉那些不会命中join的输入数据来大幅减少join中的数据传输和计算。
根据所述过滤规则对所述第二数据表进行过滤处理得到第三数据表;
获取所述第三数据表和第一数据表的连接规则;
根据所述连接规则采用哈希连接的方式对所述第三数据表和第一数据表进行连接处理得到新的连接数据表,完成所述目标连接数据表的更新。
在本实施例中,获取第三数据表的数据量,将第三数据表与第一数据表的数据量进行比较,重新根据数据库的查询方向得到链接顺序,并采用哈希连接的方式对第三数据表和第一数据表进行连接处理得到新的连接数据表,实现连接数据表的更新,实现数据库的查询优化。
在本发明实施例的一可选方案中,所述从更新后的目标连接数据表中获取与所述查询请求对应的查询结果,包括:
图3为本申请实施例提供的又一种数据库查询优化方法的流程示意图,如图3所示,该方法具体包括:
S301、将更新后的目标连接数据表作为第一连接数据表;
S302、获取第一连接数据表以及数据库中其余连接数据表的执行代价;
S303、根据所述执行代价获取所述第一连接数据表以及数据库中其余连接数据表的查询顺序,并根据所述查询顺序从数据库中获取与所述查询请求对应的查询结果。
join的顺序影响着具体join算法的效率,决定了join的执行效率,比如Hash Join算法,在右表构建一个Hash Table,左表流式地通过右表的Hash Table来匹配从而得出Join结果。假设建立哈希表的代价很大,且随数据量线性递增,那么我们总希望更小的数据集在右边的构建表。CBO主要核心在于评估一条给定执行计划树的实际代价,基于CBO的join重排则是从中选取最小代价的执行计划的优化过程。
本发明实施例提供的数据库查询优化方法,对于考虑动态过滤的情况,需要将真正意义上的小表,即当存在某表数据量较小或者带有where条件过滤查询此表某范围的数据量后,build和probe表的过滤比例达到满足动态过滤条件的阈值。如果满足加入动态过滤的场景,则需要将考虑动态过滤之后再进行CBO的优化。直接将动态过滤加入到CBO中去,而对于叶子节点的评估,则可以考虑动态过滤之后的数据量产生的代价。则会引起优化器更有效实现。这是由于现有的优化器的CBO阶段大多基于动态规划的算法,如果将动态过滤放入CBO中,则子计划的最优解依赖于查询计划中父节点下推的filter的组合和runtimefilter应用到的表的方式,将提升更大性能。
在本实施例中,通过获取数据库中所有数据表动态过滤后的执行代价,将数据库中数据表进行重新排序,最终得到整个执行计划树的最优路径。
在本发明实施例的一可选方案中,所述执行代价包括CPU执行代价与内存执行代价;
所述CPU执行代价的计算公式包括:
C1=W1*M1+W2*M2;
其中,所述C1为CPU执行代价,所述W1为第一数据表的权重,所述M1为第一数据量,所述W2为第二数据表的权重,所述M2为第二数据量;
所述内存代价的计算公式包括:
C2=M1*N1;
其中,所述C2为内存执行代价,所述M1为第一数据量,所述N1为第一数据表中一行数据的数据量。
代价计算需要考虑cpu、内存、网络的代价,而cpu和内存的代价则与build侧和probe侧(第一数据表与第二数据表)的数据量成正相关。基于CBO计算的join顺序重排优化,则会选择小表先join,然后是大表,以避免大表造成多次网络shuffle传输。满足动态过滤的join情况,会减小此节点的cpu和内存的代价,并可以导致这部分join子节点的重排,可以将产生动态过滤的表先进行join并将结果作为上一层join的构建侧。
图4为本申请实施例提供的一种数据库查询优化方法的效果示意图,如图4所示,Table B在where条件过后只有少量的记录行数,TableA作为数据大表,可以提前考虑过滤掉不匹配的记录,则通过TableB的id记录来过滤,避免了A表的全量数据抓取。
图5为本申请实施例提供的另一种数据库查询优化方法的效果示意图,如图5所示,如果TableA本身带有where字段的过滤,过滤后为小表。首先获取过滤后TableA的数据量,在考虑动态过滤的代价,以及join reorder后的join代价。
图6为本申请实施例提供的再一种数据库查询优化方法的效果示意图,如图6所示,如果TableC本身带有where字段的过滤,过滤后为小表。首先获取过滤后TableC的数据量,再考虑动态过滤的代价,而A和C优先join会获取更少的结果集,则join reorder优化需考虑动态过滤后的join代价。
图7为本申请实施例提供的一种数据库查询优化装置的结构示意图,如图7所示,该装置具体包括:
获取模块401,用于获取数据库中待查询的第一数据表和第二数据表之间的连接规则;
连接模块402,用于利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表;
判断模块403,用于判断所述目标连接数据表是否符合过滤条件;
过滤模块404,用于在所述目标连接数据表满足过滤条件的情况下,对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表;
查询模块405,用于从更新后的目标连接数据表中获取与所述查询请求对应的查询结果。
在一个可能的实施方式中,所述获取模块401具体用于获取数据库的查询顺序以及数据库中第一数据表和第二数据表的数据量;根据数据库的查询顺序和所述第一数据表和第二数据表的数据量得到所述第一数据表和第二数据表之间的连接规则,其中,所述连接规则对应的连接顺序与所述数据库的查询顺序一致。
在一个可能的实施方式中,所述连接模块402具体用于根据所述连接规则得到所述第一数据表和第二数据表的连接顺序;利用所述第一数据表和第二数据表的连接顺序采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表,其中,所述第一数据表的数据量小于第二数据表。
在一个可能的实施方式中,所述判断模块403具体用于获取所述目标连接数据表中第一数据表和第二数据表的数据量,分别作为第一数据量和第二数据量;根据所述第一数据量和第二数据量判断所述目标连接数据表是否符合第一过滤条件;在所述目标连接数据表符合第一过滤条件的情况下,获取所述目标连接数据表中第一数据表与所述第二数据表的关联字段;根据所述关联字段判断所述目标连接数据表是否符合第二过滤条件。
在一个可能的实施方式中,所述判断模块403还具体用于判断所述第一数据量与第二数据量的比值是否小于第一阈值;在所述第一数据量与第二数据量的比值小于第一阈值的情况下,所述连接数据表符合第一过滤条件。
在一个可能的实施方式中,所述判断模块403还具体用于判断所述关联字段是否为所述目标连接数据表的索引字段;在所述关联字段为索引字段的情况下,所述连接数据表符合第二过滤条件。
在一个可能的实施方式中,所述过滤模块404具体用于根据所述第一数据表生成过滤规则;根据所述过滤规则对所述第二数据表进行过滤处理得到第三数据表;获取所述第三数据表和第一数据表的连接规则;根据所述连接规则采用哈希连接的方式对所述第三数据表和第一数据表进行连接处理得到新的连接数据表,完成所述目标连接数据表的更新。
本实施例提供的数据库查询优化装置可以是如图7中所示的数据库查询优化装置,可执行如图1-6中数据库查询优化方法的所有步骤,进而实现图1-6所示数据库查询优化的技术效果,具体请参照图1-6相关描述,为简洁描述,在此不作赘述。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
图8为本申请实施例提供的一种电子设备的结构示意图,如图8所示,本申请实施例提供了一种电子设备,包括处理器501、通信接口502、存储器503和通信总线504,其中,处理器501,通信接口502,存储器503通过通信总线504完成相互间的通信;存储器503,用于存放计算机程序;处理器501,用于执行存储器503上所存放的程序时,实现前述任意一个方法实施例提供的数据库查询优化方法的步骤:
响应于查询请求,获取数据库中待查询的第一数据表和第二数据表之间的连接规则;
利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表;
判断所述目标连接数据表是否符合过滤条件;
在所述目标连接数据表满足过滤条件的情况下,对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表;
从更新后的目标连接数据表中获取与所述查询请求对应的查询结果。
在一个可能的实施方式中,所述获取数据库中待查询的第一数据表和第二数据表之间的连接规则,包括:
获取数据库的查询顺序以及数据库中第一数据表和第二数据表的数据量;
根据数据库的查询顺序和所述第一数据表和第二数据表的数据量得到所述第一数据表和第二数据表之间的连接规则,其中,所述连接规则对应的连接顺序与所述数据库的查询顺序一致。
在一个可能的实施方式中,所述利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表,包括:
根据所述连接规则得到所述第一数据表和第二数据表的连接顺序;
利用所述第一数据表和第二数据表的连接顺序采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表,其中,所述第一数据表的数据量小于第二数据表。
在一个可能的实施方式中,所述判断所述目标连接数据表是否符合过滤条件,包括:
获取所述目标连接数据表中第一数据表和第二数据表的数据量,分别作为第一数据量和第二数据量;
根据所述第一数据量和第二数据量判断所述目标连接数据表是否符合第一过滤条件;
在所述目标连接数据表符合第一过滤条件的情况下,获取所述目标连接数据表中第一数据表与所述第二数据表的关联字段;
根据所述关联字段判断所述目标连接数据表是否符合第二过滤条件。
在一个可能的实施方式中,所述根据所述第一数据量和第二数据量判断所述目标连接数据表是否符合第一过滤条件,包括:
判断所述第一数据量与第二数据量的比值是否小于第一阈值;
在所述第一数据量与第二数据量的比值小于第一阈值的情况下,所述连接数据表符合第一过滤条件。
在一个可能的实施方式中,所述根据所述关联字段判断所述目标连接数据表是否符合第二过滤条件,包括:
判断所述关联字段是否为所述目标连接数据表的索引字段;
在所述关联字段为索引字段的情况下,所述连接数据表符合第二过滤条件。
在一个可能的实施方式中,所述对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表,包括:
根据所述第一数据表生成过滤规则;
根据所述过滤规则对所述第二数据表进行过滤处理得到第三数据表;
获取所述第三数据表和第一数据表的连接规则;
根据所述连接规则采用哈希连接的方式对所述第三数据表和第一数据表进行连接处理得到新的连接数据表,完成所述目标连接数据表的更新。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
应理解的是,文中使用的术语仅出于描述特定示例实施方式的目的,而无意于进行限制。除非上下文另外明确地指出,否则如文中使用的单数形式“一”、“一个”以及“所述”也可以表示包括复数形式。术语“包括”、“包含”、“含有”以及“具有”是包含性的,并且因此指明所陈述的特征、步骤、操作、元件和/或部件的存在,但并不排除存在或者添加一个或多个其它特征、步骤、操作、元件、部件、和/或它们的组合。文中描述的方法步骤、过程、以及操作不解释为必须要求它们以所描述或说明的特定顺序执行,除非明确指出执行顺序。还应当理解,可以使用另外或者替代的步骤。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种数据库查询优化方法,其特征在于,包括:
响应于查询请求,获取数据库中待查询的第一数据表和第二数据表之间的连接规则;
利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表;
判断所述目标连接数据表是否符合过滤条件,所述过滤条件包括第一过滤条件和第二过滤条件;
在所述目标连接数据表满足过滤条件的情况下,对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表;
从更新后的目标连接数据表中获取与所述查询请求对应的查询结果。
2.根据权利要求1所述的方法,其特征在于,所述获取数据库中待查询的第一数据表和第二数据表之间的连接规则,包括:
获取数据库的查询顺序以及数据库中第一数据表和第二数据表的数据量;
根据数据库的查询顺序和所述第一数据表和第二数据表的数据量得到所述第一数据表和第二数据表之间的连接规则,其中,所述连接规则对应的连接顺序与所述数据库的查询顺序一致。
3.根据权利要求1所述的方法,其特征在于,所述利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表,包括:
根据所述连接规则得到所述第一数据表和第二数据表的连接顺序;
利用所述第一数据表和第二数据表的连接顺序采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表,其中,所述第一数据表的数据量小于第二数据表。
4.根据权利要求1所述的方法,其特征在于,所述判断所述目标连接数据表是否符合过滤条件,包括:
获取所述目标连接数据表中第一数据表和第二数据表的数据量,分别作为第一数据量和第二数据量;
判断所述第一数据量与第二数据量的比值是否小于第一阈值;
在所述第一数据量与第二数据量的比值小于第一阈值的情况下,所述连接数据表符合第一过滤条件;
在所述目标连接数据表符合第一过滤条件的情况下,获取所述目标连接数据表中第一数据表与所述第二数据表的关联字段;
判断所述关联字段是否为所述目标连接数据表的索引字段;
在所述关联字段为索引字段的情况下,所述连接数据表符合第二过滤条件。
5.根据权利要求1所述的方法,其特征在于,所述对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表,包括:
根据所述第一数据表生成过滤规则;
根据所述过滤规则对所述第二数据表进行过滤处理得到第三数据表;
获取所述第三数据表和第一数据表的连接规则;
根据所述连接规则采用哈希连接的方式对所述第三数据表和第一数据表进行连接处理得到新的连接数据表,完成所述目标连接数据表的更新。
6.根据权利要求1所述的方法,其特征在于,所述从更新后的目标连接数据表中获取与所述查询请求对应的查询结果,包括:
将更新后的目标连接数据表作为第一连接数据表;
获取第一连接数据表以及数据库中其余连接数据表的执行代价;
根据所述执行代价获取所述第一连接数据表以及数据库中其余连接数据表的查询顺序,并根据所述查询顺序从数据库中获取与所述查询请求对应的查询结果。
7.根据权利要求6所述的方法,其特征在于,所述执行代价包括CPU执行代价与内存执行代价;
所述CPU执行代价的计算公式包括:
C1=W1*M1+W2*M2;
其中,所述C1为CPU执行代价,所述W1为第一数据表的权重,所述M1为第一数据量,所述W2为第二数据表的权重,所述M2为第二数据量;
所述内存代价的计算公式包括:
C2=M1*N1;
其中,所述C2为内存执行代价,所述M1为第一数据量,所述N1为第一数据表中一行数据的数据量。
8.一种数据库查询优化装置,其特征在于,包括:
获取模块,用于获取数据库中待查询的第一数据表和第二数据表之间的连接规则;
连接模块,用于利用所述连接规则采用哈希连接的方式对所述第一数据表和第二数据表进行连接处理,得到目标连接数据表;
判断模块,用于判断所述目标连接数据表是否符合过滤条件;
过滤模块,用于在所述目标连接数据表满足过滤条件的情况下,对所述目标连接数据表进行过滤处理,并根据过滤结果更新所述目标连接数据表;
查询模块,用于从更新后的目标连接数据表中获取与所述查询请求对应的查询结果。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1~7中任一项所述的数据库查询优化方法的步骤。
10.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1~7中任一项所述的数据库查询优化方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311800168.6A CN117708169A (zh) | 2023-12-25 | 2023-12-25 | 数据库查询优化方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311800168.6A CN117708169A (zh) | 2023-12-25 | 2023-12-25 | 数据库查询优化方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117708169A true CN117708169A (zh) | 2024-03-15 |
Family
ID=90155197
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311800168.6A Pending CN117708169A (zh) | 2023-12-25 | 2023-12-25 | 数据库查询优化方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117708169A (zh) |
-
2023
- 2023-12-25 CN CN202311800168.6A patent/CN117708169A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7809713B2 (en) | Efficient search space analysis for join factorization | |
US8150836B2 (en) | System, method, and computer-readable medium for reducing row redistribution costs for parallel join operations | |
US7644062B2 (en) | Join factorization of union/union all queries | |
US7730055B2 (en) | Efficient hash based full-outer join | |
CN110837585B (zh) | 多源异构的数据关联查询方法及系统 | |
US20160253402A1 (en) | Adaptive data repartitioning and adaptive data replication | |
EP2998883B1 (en) | Data partitioning method and apparatus | |
CN104137095B (zh) | 用于演进分析的系统 | |
US9984081B2 (en) | Workload aware data placement for join-based query processing in a cluster | |
US10726006B2 (en) | Query optimization using propagated data distinctness | |
US20170270162A1 (en) | Query optimization method in distributed query engine and apparatus thereof | |
US11036709B2 (en) | Single-level, multi-dimension, hash-based table partitioning | |
US20130159347A1 (en) | Automatic and dynamic design of cache groups | |
US10466936B2 (en) | Scalable, multi-dimensional search for optimal configuration | |
CN104731969A (zh) | 分布式环境下海量数据连接聚集查询方法、装置和系统 | |
CN110750560B (zh) | 一种优化网络多连接的系统和方法 | |
US20130144815A1 (en) | Making predictions regarding evaluation of functions for a database environment | |
US11615086B2 (en) | System and method for disjunctive joins | |
CN117708169A (zh) | 数据库查询优化方法、装置、电子设备及存储介质 | |
CN116126901A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN115455057A (zh) | 数据库连接操作的执行方法、存储介质与计算机设备 | |
WO2021248319A1 (en) | Database management system and method for graph view selection for relational-graph database | |
US8943058B1 (en) | Calculating aggregates of multiple combinations of a given set of columns | |
CN114461677B (zh) | 一种基于选择度传递调整连接顺序的方法 | |
CN114706883A (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 |