一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据库连接操作的优化方法、存储介质与计算机设备与流程

2022-12-20 00:21:30 来源:中国专利 TAG:


1.本发明涉及数据库技术,特别是涉及一种数据库连接操作的优化方法、存储介质与计算机设备。


背景技术:

2.连接查询是关系数据库中最主要的查询。连接是关系数据库模型的主要特点,也是其区别于其他类型数据库系统的一个标志。
3.数据库对多个表的连接一般采用基于代价的方法选择连接顺序和连接方式。这种基于代价的选择方式的准确性取决于对数据的抽样和代价计算的算法。现有数据库产品普遍采用的连接算法包括循环嵌套,哈希连接和归并排序连接等。为了提高连接的效率,在数据库执行器也有位图过滤器等技术来辅助这些连接算法的执行。
4.然而,上述连接算法仍然存在进一步优化的空间,例如对于一个小表t(数据量很小的一个数据表,或者子查询或多个表的连接的结果数据量很小的节点)和一个复杂子查询q进行连接的场景,由于复杂子查询是一个很耗时的操作,则总的sql执行时间受复杂子查询q的影响会很大。当复杂的子查询的数据量很大执行时间很长时,总的查询执行时间受复杂子查询q的影响会很大,现有连接算法选择出的执行计划一般效率较低,导致整体执行效率下降。


技术实现要素:

5.本发明的一个目的是要至少解决上述任一方面技术问题的数据库连接操作的优化方法、存储介质与计算机设备。
6.本发明一个进一步的目的是节省连接操作的执行时间。
7.本发明另一个进一步的目的是针对连接操作的场景针对性地实现效率提升。
8.特别地,本发明提供了一种数据库连接操作的优化方法,其包括:
9.由优化器启动对连接操作的优化;
10.判断参与连接操作的两侧子表是否满足预设优化条件;
11.若是,按照预设的连接顺序以及连接方式创建备选计划;
12.将备选计划加入执行计划备选队列,由优化器从执行计划备选队列中挑选实际执行计划。
13.可选地,两侧子表包括第一子表以及第二子表,并且优化条件包括:第一子表的预估返回行数小于预设的基数估计门限值,并且第二子表包含子查询并且预估的执行代价大于预设的执行代价门限值。
14.可选地,由优化器从执行计划备选队列中挑选实际执行计划的步骤包括:
15.对执行计划备选队列中的执行计划分别计算连接代价,挑选连接代价最小的一个作为实际执行计划。
16.可选地,创建出的备选计划的连接代价为以下代价的之和:
17.对第一子表进行扫描代价;
18.对第一子表的扫描返回数据进行物化并建立缓存的代价;
19.将第一子表的扫描返回数据添加为第二子表的子查询的过滤条件后执行子查询的执行代价;
20.以第二子表的子查询的返回数据作为外表,缓存的第一子表的扫描返回数据作为内表,进行循环嵌套连接的执行代价。
21.可选地,在由优化器启动对连接操作的优化的步骤之后还包括:
22.使用优化器支持的连接算法对连接操作进行枚举,得到每个连接算法对应的执行计划,从而形成执行计划备选队列。
23.可选地,优化器支持的连接算法包括以下任意一项或多项:循环嵌套算法,哈希连接算法,排序合并连接算法。
24.可选地,在由优化器从执行计划备选队列中挑选实际执行计划的步骤之后还包括:
25.由数据库的执行器执行实际执行计划。
26.可选地,判断参与连接操作的两侧子表任一不满足优化条件的情况下,还包括:由优化器从枚举得到的备选队列中挑选实际执行计划。
27.根据本发明的另一个方面,还提供了一种机器可读存储介质,其上存储有机器可执行程序,机器可执行程序被处理器执行时实现上述任一种的数据库连接操作的优化方法。
28.根据本发明的又一个方面,还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的机器可执行程序,并且处理器执行机器可执行程序时实现上述任一种的数据库连接操作的优化方法。
29.本发明的数据库连接操作的优化方法,基于连接操作的使用场景的分析,针对性地对满足预设优化条件的连接操作创建优化策略,按照预设的连接顺序以及连接方式创建备选计划,作为优化器选择执行计划的备选,通过针对性地优化提高连接操作的执行效率,可以降低连接查询的执行复杂度,节省连接操作的执行时间。
30.进一步地,本发明的数据库连接操作的优化方法,优化条件可以为第一子表的预估返回行数小于预设的基数估计门限值,并且第二子表包含子查询并且预估的执行代价大于预设的执行代价门限值。第一子表的返回结果作为常量参数替代两个表的连接条件,连接条件作为过滤条件传入子查询从而减少子查询的复杂度,从而提高执行效率。
31.更进一步地,本发明的数据库连接操作的优化方法通过降低复杂查询中参与运算的记录的个数,从而极大的提高连接操作的执行效率。
32.根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
33.后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。附图中:
34.图1是根据本发明一个实施例的数据库连接操作的优化方法的示意图;
35.图2是根据本发明一个实施例的数据库连接操作的优化方法中优化器的工作流程图;
36.图3是根据本发明一个实施例的数据库连接操作的优化方法生成的执行计划数据结构示意图;
37.图4是根据本发明一个实施例的数据库连接操作的优化方法中执行过程的示意图;
38.图5是根据本发明一个实施例的数据库连接操作的优化方法中子表优化的流程示意图;
39.图6是根据本发明一个实施例的机器可读存储介质的示意图;以及
40.图7是根据本发明一个实施例的计算机设备的示意图。
具体实施方式
41.对于多表连接,数据库的优化器会根据不同的使用场景选择不同的连接算法。本实施例的方法针对一个小表t和一个复杂子查询q进行连接的使用场景,其中小表是数据量很小的数据表,可以是指经过过滤条件的过滤后,查询出来的数据量很小的一个节点,例如一个数量很小的数据表,又例如是一个子查询或多个表的连接的结果。而复杂子查询是一个很耗时的操作,则总的sql连接操作执行时间受复杂子查询q的影响会很大。
42.本实施例的实现原理为:创建一个备选执行计划,该备选执行计划把小表的执行结果作为常量参数代替两个表的连接条件,将连接条件作为过滤条件传入复杂子查询从而减少复杂子查询的复杂度,提高子查询的执行时间。
43.以一个sql(structured query language,结构化查询语言)语句为例进行介绍:select*from a where exists(select*(select*from b union select*from c)v where v.id=a.id。
44.对于一个具体的测试数据库,对表a扫描出来的v.id=a.id结果只有8行,而对表b和c的扫描结果200万行,sql执行的大部分时间用在对这200万数据的合并(append)去重(hashaggregate)操作上。若将连接条件v.id=a.id中的a.id首先查询出来,然后转化成这8行数据中id列的值,然后把8行数据中id列值传到子查询中并最终下推成b.id in(a中的8个id值),c.id in(a中的8个id值),则从表b和c中扫描出的记录数会很少。
45.实际上最终满足select*from b where id in(select*from a)union select*from c where id in(select*from a)的查询返回的结果仅有一行。
46.本实施例的数据库连接操作的优化方法用于在数据库优化器层面进行的连接算法的优化。在为两表连接的sql查询语句生成执行计划时,生成一种新的连接算法。
47.图1是根据本发明一个实施例的数据库连接操作的优化方法的示意图,该数据库连接操作的优化方法一般性地可以包括:
48.步骤s102,由优化器启动对连接操作的优化;
49.步骤s104,判断参与连接操作的两侧子表是否满足预设优化条件;
50.步骤s106,如果满足上述预设优化条件,按照预设的连接顺序以及连接方式创建备选计划;
51.步骤s108,将备选计划加入执行计划备选队列,由优化器从执行计划备选队列中挑选实际执行计划。
52.参与连接操作的两侧子表可以记为第一子表(小表t)以及第二子表(复杂子查询q),并且优化条件包括:第一子表的预估返回行数小于预设的基数估计门限值,并且第二子表包含子查询并且预估的执行代价大于预设的执行代价门限值。
53.创建的备选计划的具体连接过程可以为:首先执行小表的查询,将查询结果缓存,然后将连接条件转化为对大表的查询条件对大表进行过滤,最后将大表的查询结果和缓存的小表查询结果进行连接。
54.步骤s108由优化器从执行计划备选队列中挑选实际执行计划可以根据队列中所有执行计划的执行代价来确定,例如对执行计划备选队列中的执行计划分别计算连接代价,挑选连接代价最小的一个作为实际执行计划。挑选出的实际执行计划后续由数据库的执行器执行。
55.其中创建出的备选计划的连接代价为以下代价的之和:
56.(1)对第一子表进行扫描代价;
57.(2)对第一子表的扫描返回数据进行物化并建立缓存的代价;
58.(3)将第一子表的扫描返回数据添加为第二子表的子查询的过滤条件后执行子查询的执行代价;
59.(4)以第二子表的子查询的返回数据作为外表,缓存的第一子表的扫描返回数据作为内表,进行循环嵌套连接的执行代价。
60.上述备选队列中除了上述创建的备选计划外,还可以包括优化器根据其他算法制定的其他执行计划。也就是说,在由优化器启动对连接操作的优化的步骤之后还可以包括:使用优化器支持的连接算法对连接操作进行枚举,得到每个连接算法对应的执行计划,从而形成执行计划备选队列。优化器支持的连接算法可以包括以下任意一项或多项:循环嵌套算法,哈希连接算法,排序合并连接算法。本领域技术人员可以根据需要选择生成执行计划备选队列的算法,由于上述列出的循环嵌套算法,哈希连接算法,排序合并连接算法本身应为本领域技术人员所习知的,在此不做赘述。
61.如果步骤s104判断结果为:参与所述连接操作的两侧子表任一不满足所述优化条件,在该情况下,可由优化器从枚举得到的备选队列中挑选实际执行计划。
62.图2是根据本发明一个实施例的数据库连接操作的优化方法中优化器的工作流程图。以数据库在执行连接a join b为例,优化器的物理优化模块会首先为参与连接的两个子表(表a和表b)进行基数估计和代价估计,基于这些估计的数据来枚举支持的连接算法(包括循环嵌套算法,哈希连接,排序归并连接等),并计算每个连接算法的执行代价,最终选择代价最优的算法。本实施例的主要改进之一为:在优化器枚举连接的算法时,判断参与连接的两个表如果满足以下条件,则在枚举连接算法时,加入本实施例提供的改进后的连接算法。数据库的优化器执行可以以下步骤:
63.步骤s202,进入优化器,开启对连接操作进行优化。
64.步骤s204,判断参与连接操作的两侧子表是否满足预设优化条件;优化条件要求:子表a预估的返回行数小于基数估计门限值row_threshold;而子表b为一个子查询,而且预估的执行代价大于执行代价门限值cost_threshold。
65.在将基数估计门限值row_threshold设置为10,将执行代价门限值cost_threshold设置为1的情况下,如果出现:对表a,其预估行数row=8《row_threshold;而对子查询,其预估代价cost=7》cost_threshold;则认为满足上述优化条件。
66.步骤s206,创建连接计划(命名为filterjoinpath),计算其执行代价。执行代价包括以下各部分代价之和:
67.(1)对表a扫描的代价
68.(2)对表a返回的数据进行物化,建立缓存的代价。该步骤的代价是相比于现有的连接算法需要额外进行代价,可将该步骤的代价记为代价x。
69.(3)将a中的返回数据作为过滤条件下推到子查询b中,然后计算b执行的代价。因为引入了额外的过滤条件,对b中的简单表扫描会过滤掉大部分记录,从而导致b的查询效率提高,节省的执行代价记为y。则当y大于x时,本实施例的方法将极大的提高sql连接操作的执行效率,并且随着y大于x的程度,执行效率逐步提高。
70.(4)以b的返回数据作为外表,缓存的a的数据作为内表,进行循环嵌套连接的执行代价。
71.步骤s208,filterjoinpath加入备选队列,与其他计划的执行代价进行比较,选择最小代价的执行计划。该步骤的伪代码为:
72.add_path(joinrel,create_nestloop_path(a,b));/增加循环嵌套算法执行计划;
73.add_path(joinrel,create_hashjoin_path(a,b));/增加哈希连接算法执行计划;
74.add_path(joinrel,create_mergejoin_path(a,b));/增加排序归并连接算法执行计划;
75.add_path(joinrel,create_filterjoin_path(a,b));/加入本实施例方法提供的连接算法;
76.set_cheapest(joinrel);/从以上4个连接算法中选择最优的算法做为最终执行计划.
77.步骤s210,进入执行器。
78.当优化器根据代价选择选定本实施例提供的备选队列为最终的连接算法时,生成一个最终的执行计划数据结构。图3是根据本发明一个实施例的数据库连接操作的优化方法生成的执行计划数据结构示意图。仍以select*from a where exists(select*(select*from b union select*from c)v where v.id=a.id为例,标识了用到的主要变量。连接计划有左右两个子节点,左节点为子查询v的执行计划,右节点为小表a的执行计划(此处假设为全表扫描seqscan)。子查询v的执行计划为一个合并操作(append),其子节点为对表b,c的扫描。连接条件下推为到对表b,c的过滤条件,在表b和c的执行计划中加入连接条件。
79.图4是根据本发明一个实施例的数据库连接操作的优化方法中执行过程的示意图,图5是根据本发明一个实施例的数据库连接操作的优化方法中子表优化的流程示意图。执行器的执行过程包括:
80.步骤s402,执行器开始执行执行计划;
81.步骤s404,执行是否为首次执行,可以通过判断filterjoin的执行标识start来确
定,若start=true,也即执行标识指示为开始状态时,确定所述执行器开始执行所述实际执行计划。
82.步骤s406,如果为首次执行,依次扫描小表a的每条记录,执行过滤条件,将得到的结果缓存;也即执行器首先循环执行小表a的扫描执行计划filterjoin-》righttree。每次执行返回一条记录。对每条记录,首先将该返回的记录存入列表x中。
83.步骤s408,将小表a与连接条件相关列中的值,保存在内存中的列表中;例如根据连接条件a.id=v.id而保存在执行计划filterjoin-》innercols列表中的id列的编号,将该记录的id列的值组成”id=值”的形式下推在子计划filterjoin-》lefttree的下层,用于对b,c的扫描操作中。循环执行直到a中所有记录都返回然后设置start=false,也即执行标识修改为进行状态。通过执行标识start的设置,来指示执行状态。
84.步骤s410,执行子查询b的执行计划,得到过滤后的记录;
85.步骤s420,将子查询b得到的记录根据连接条件和缓存的表a的每一条数据进行连接,如果满足连接完成条件,则返回连接结果。
86.其中步骤s410的执行过程如图5所示,其可以包括:
87.步骤s412,开始执行子查询v的执行计划;
88.步骤s414,对参与第二子表的子查询的数据表逐条读取记录;
89.步骤s416,对读取的记录进行过滤,若数据表的列涉及连接条件,将连接条件中表a的列名替换为缓存中a中该列的值,判断读取的记录是否满足条件,如不满足,读取该表的下一条记录继续判断;
90.步骤s418,每个数据表中读取的记录都满足连接条件后,使用这些记录进行子查询的其他运算。执行计划是一个append(合并)合并,其执行过程为首先读取表b的记录,然后读取表c的记录,最后将两者合并。其他运算可以仍然沿用原来的逻辑。
91.在读取表b或表c的每条记录时,除了原来的过滤条件外,还增加因为第一步而加入的多个过滤条件。这些过滤条件将减少对表b,c进行扫描而返回的记录个数,从而进一步减少参与append操作的记录个数。
92.也就是说,上述执过程可以为:扫描第一子表的数据,获取扫描返回的数据,得到第一结果集(也即小表a的扫描返回的记录的集合);保存第一子表中与连接操作相关的列中的值,作为补充过滤条件;使用补充过滤条件对参与所述第二子表的子查询的数据表进行过滤,并使用通过过滤的数据(也即将连接条件中表a的列名替换为缓存中a中该列的值后进行判断后的记录)进行子查询,得到第二结果集;将所述第二结果集和第二结果集进行连接,得到连接结果。
93.上述连接执行时,首先执行小表的查询,将查询结果缓存,然后将连接条件转化为对大表的查询条件对大表进行过滤,最后将大表的查询结果和缓存的小表查询结果进行连接,从而可以降低复杂查询中参与运算的记录的个数,从而极大的提高sql的执行效率,减少sql查询的执行时间。
94.本实施例还提供了一种机器可读存储介质和计算机设备。图6是根据本发明一个实施例的机器可读存储介质60的示意图,图7是根据本发明一个实施例的计算机设备70的示意图。
95.机器可读存储介质60其上存储有机器可执行程序61,机器可执行程序61被处理器
执行时实现上述任一实施例的数据库连接操作的优化方法。
96.计算机设备70可以包括存储器720、处理器710及存储在存储器720上并在处理器710上运行的机器可执行程序61,并且处理器710执行机器可执行程序61时实现上述任一实施例的数据库连接操作的优化方法。
97.需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何机器可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。
98.就本实施例的描述而言,机器可读存储介质60可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质40甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
99.应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。
100.计算机设备70可以是例如服务器、台式计算机、笔记本式计算机、平板计算机或智能手机。在一些示例中,计算机设备70可以是云计算节点。计算机设备70可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括执行特定的任务或者实现特定的抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机设备70可以在通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实施。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
101.计算机设备70可以包括适于执行存储的指令的处理器710、在操作期间为所述指令的操作提供临时存储空间的存储器720。处理器710可以是单核处理器、多核处理器、计算集群或任何数量的其他配置。存储器720可以包括随机存取存储器(ram)、只读存储器、闪存或任何其他合适的存储系统。
102.处理器710可以通过系统互连(例如pci、pci-express等)连接到适于将计算机设备70连接到一个或多个i/o设备(输入/输出设备)的i/o接口(输入/输出接口)。i/o设备可以包括例如键盘和指示设备,其中指示设备可以包括触摸板或触摸屏等等。i/o设备可以是计算机设备70的内置组件,或者可以是外部连接到计算设备的设备。
103.处理器710也可以通过系统互连链接到适于将计算机设备70连接到显示设备的显示接口。显示设备可以包括作为计算机设备70的内置组件的显示屏。显示设备还可以包括外部连接到计算机设备70的计算机监视器、电视机或投影仪等。此外,网络接口控制器
(network interface controller,nic)可以适于通过系统互连将计算机设备70连接到网络。在一些实施例中,nic可以使用任何合适的接口或协议(诸如因特网小型计算机系统接口等)来传输数据。网络可以是蜂窝网络、无线电网络、广域网(wan)、局域网(lan)或因特网等等。远程设备可以通过网络连接到计算设备。
104.本实施例提供的流程图并不旨在指示方法的操作将以任何特定的顺序执行,或者方法的所有操作都包括在所有的每种情况下。此外,方法可以包括附加操作。在本实施例方法提供的技术思路的范围内,可以对上述方法进行附加的变化。
105.至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献