一种opengauss中Nestloop连接执行方法技术

技术编号:38617210 阅读:15 留言:0更新日期:2023-08-26 23:44
本发明专利技术涉及数据库技术领域,提供一种opengauss中Nestloop连接执行方法,本发明专利技术的方法包括:输入查询SQL语句,判断输入的查询SQL语句是否符合场景应用要求;根据输入的查询SQL语句生成Nestloop执行计划,为符合场景应用的查询SQL语句生成的Nestloop执行计划打上Inner Unique标记;执行生成的Nestloop执行计划。本发明专利技术通过在计划器阶段判断Nestloop执行计划是否满足应用场景的要求,为满足应用场景要求的Nestloop执行计划打上Inner Unique标记,可以在执行阶段显著减少Nestloop执行计划的循环执行次数,显著节省CPU资源,节省执行耗时,从而提高Nestloop算子的执行性能。通过判断查询SQL语句和Nestloop执行计划是否符合应用场景要求,实现了更为精确的条件是指,降低判断开销,减少性能劣化的发生。减少性能劣化的发生。减少性能劣化的发生。

【技术实现步骤摘要】
一种opengauss中Nestloop连接执行方法


[0001]本专利技术涉及数据库
,尤其涉及一种一种opengauss中Nestloop连接执行方法。

技术介绍

[0002]连接(join)是数据库领域中一种常见的查询执行方法,用于两表或多表之间关联查询。在opengauss数据库中,常用的连接算子主要有Nestloop、merge join和Hash Join三种。在数据库的日常应用中,关联查询会被大量使用到,连接算子的执行速度对数据库的整体性能尤其是关联查询的效率具有重要的影响。
[0003]例如,Nestloop(嵌套循环)作为最基础的的一种连接执行算子,以下描述一种Nestloop的具体典型应用场景。当采用查询sql语句:Select*from table_a,table_b where table_a.key_a=table_b.key_b,在table_b上的key_b建立了唯一索引/主键索引,数据库会生成包含Nestloop算子的执行计划,下称Nestloop(test_a,test_b),其中test_a称为外表,test_b称为内表。假设test_a中有m条记录,test_b中有n条记录。Nestloop算子执行时需要获取test_a中的每一条元组a,到test_b中进行扫描,对于test_b中的每条记录b,用连接条件test_a.key_a=table_b.key_b进行判断,如果满足连接条件,返回此时的元组(a,b),将返回的元组(a,b)加入到结果集中,总的执行次数为m*n次。假如m、n较大,则乘积会较大,导致查询耗时较长。由于其嵌套循环的特性,其执行结果为内外表的笛卡尔积,极易形成性能瓶颈,显著增加查询耗时。
[0004]因此,如何提高关联查询的效率尤其是连接算子的执行速度,成为亟待解决的技术问题。

技术实现思路

[0005]有鉴于此,为了克服现有技术的不足,本专利技术旨在提供一种opengauss中Nestloop连接执行方法。
[0006]本专利技术提供一种opengauss中Nestloop连接执行方法,包括:
[0007]步骤S1:输入查询SQL语句,判断输入的查询SQL语句是否符合场景应用要求;
[0008]步骤S2:根据输入的查询SQL语句生成Nestloop执行计划,为符合场景应用的查询SQL语句生成的Nestloop执行计划打上Inner Unique标记;
[0009]步骤S3:执行步骤S2生成的Nestloop执行计划。
[0010]优选的,作为本专利技术的opengauss中Nestloop连接执行方法,步骤S1中,判断输入的查询SQL语句是否符合场景应用要求,包括:
[0011]判断查询SQL语句是否能生成Nestloop执行计划;
[0012]判断查询SQL语句中的连接条件是否符合场景应用要求;
[0013]判断查询SQL语句是否符合Inner Unique条件。
[0014]优选的,作为本专利技术的opengauss中Nestloop连接执行方法,步骤S1中,判断查询
SQL语句是否能生成Nestloop执行计划,包括:
[0015]根据查询SQL语句的语义,判断查询SQL语句中是否存在两个或两个以上数据表的连接关系,当查询SQL语句中存在两个或两个以上表的连接关系,判定查询SQL能生成Nestloop执行计划。
[0016]优选的,作为本专利技术的opengauss中Nestloop连接执行方法,步骤S1中,判断查询SQL语句中的连接条件是否符合场景应用要求,包括:
[0017]当查询SQL语句的连接条件为空,将所述查询SQL语句的连接条件判定为不符合场景应用要求;
[0018]当查询SQL语句的连接条件为非等值判断条件,将所述查询SQL语句的连接条件判定为不符合场景应用要求;
[0019]当查询SQL语句的连接条件不包含内表的列,将所述查询SQL语句的连接条件判定为不符合场景应用要求。
[0020]优选的,作为本专利技术的opengauss中Nestloop连接执行方法,步骤S1中,判断查询SQL语句是否符合Inner Unique条件,包括:
[0021]当根据查询SQL语句的连接条件进行连接匹配时,对于外表中的每一条外表元组,内表中最多只有一条内表元组能够符合连接条件,将所述查询SQL语句判定为符合Inner Unique条件。
[0022]优选的,作为本专利技术的opengauss中Nestloop连接执行方法,步骤S1中,当根据查询SQL语句的连接条件进行连接匹配时,对于外表中的每一条外表元组,内表中最多只有一条内表元组能够符合连接条件,将所述查询SQL语句判定为符合Inner Unique条件,包括:
[0023]当内表为普通表,连接条件中有一个涉及内表的列,且内表中建立了唯一索引/主键,将所述查询SQL语句判定为符合Inner Unique条件;
[0024]当内表为普通表,连接条件中有多个涉及内表的列,且一个或以上涉及内表的列上建立了唯一索引/主键,将所述查询SQL语句判定为符合Inner Unique条件;
[0025]当内表为子查询,且所述子查询的顶层结果为分组聚集,分组键跟连接条件中涉及内表的列完全一致,将所述查询SQL语句判定为符合Inner Unique。
[0026]优选的,作为本专利技术的opengauss中Nestloop连接执行方法,步骤S2中,为符合场景应用的查询SQL语句生成的Nestloop执行计划打上Inner Unique标记,包括:在描述Nestloop执行计划的数据结构中添加名称为Inner Unique标记的成员,当查询SQL语句符合场景应用要求,将Inner Unique标记的值赋值为真。
[0027]优选的,作为本专利技术的opengauss中Nestloop连接执行方法,步骤S3包括:
[0028]步骤S31:分别遍历外表和内表,获取一条外表元组和内表元组;
[0029]步骤S32:判断获取的内表元组与获取的外表元组是否符合连接条件;
[0030]步骤S33:将符合连接条件的外表元组和内表元组添加至结果集,判断Nestloop执行计划中是否存在Inner Unique标记。
[0031]优选的,作为本专利技术的opengauss中Nestloop连接执行方法,步骤S32包括:当获取的内表元组与获取的外表元组不符合连接条件,重新获取内表中的另一条内表元组,判断所述获取的另一条内表元组与步骤S31获取的外表元组是否符合连接条件。
[0032]优选的,作为本专利技术的opengauss中Nestloop连接执行方法,步骤S33包括:
[0033]当Nestloop执行计划中不存在Inner Unique标记,重新获取内表中的另一条内表元组,判断重新获取的内表元组与步骤S31获取的外表元组是否符合连接条件,将符合连接条件的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种opengauss中Nestloop连接执行方法,其特征在于,所述方法包括:步骤S1:输入查询SQL语句,判断输入的查询SQL语句是否符合场景应用要求;步骤S2:根据输入的查询SQL语句生成Nestloop执行计划,为符合场景应用的查询SQL语句生成的Nestloop执行计划打上Inner Unique标记;步骤S3:执行步骤S2生成的Nestloop执行计划。2.根据权利要求1所述的opengauss中Nestloop连接执行方法,其特征在于,步骤S1中,判断输入的查询SQL语句是否符合场景应用要求,包括:判断查询SQL语句是否能生成Nestloop执行计划;判断查询SQL语句中的连接条件是否符合场景应用要求;判断查询SQL语句是否符合Inner Unique条件。3.根据权利要求2所述的opengauss中Nestloop连接执行方法,其特征在于,步骤S1中,判断查询SQL语句是否能生成Nestloop执行计划,包括:根据查询SQL语句的语义,判断查询SQL语句中是否存在两个或两个以上数据表的连接关系,当查询SQL语句中存在两个或两个以上表的连接关系,判定查询SQL能生成Nestloop执行计划。4.根据权利要求3所述的opengauss中Nestloop连接执行方法,其特征在于,步骤S1中,判断查询SQL语句中的连接条件是否符合场景应用要求,包括:当查询SQL语句的连接条件为空,将所述查询SQL语句的连接条件判定为不符合场景应用要求;当查询SQL语句的连接条件为非等值判断条件,将所述查询SQL语句的连接条件判定为不符合场景应用要求;当查询SQL语句的连接条件不包含内表的列,将所述查询SQL语句的连接条件判定为不符合场景应用要求。5.根据权利要求4所述的opengauss中Nestloop连接执行方法,其特征在于,步骤S1中,判断查询SQL语句是否符合Inner Unique条件,包括:当根据查询SQL语句的连接条件进行连接匹配时,对于外表中的每一条外表元组,内表中最多只有一条内表元组能够符合连接条件,将所述查询SQL语句判定为符合Inner Unique条件。6.根据权利要求5所述的opengauss中Nestloop连接执行方法,其特征在于,步骤S1中,当根据查询SQL语句的连接条件进行连接匹配时,对于外表中的每一条外表元组,内表中最多只有一条内表元组能够符合连接条件,将所述查询SQL语句判定为符合Inner Unique条件,包括:当内表为...

【专利技术属性】
技术研发人员:陈健华何小栋
申请(专利权)人:广州海量数据库技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1