数据库查询优化方法、装置、存储介质和电子设备

未命名 09-24 阅读:62 评论:0


1.本公开涉及数据处理和深度学习技术领域,尤其涉及一种数据库查询优化方法、装置、存储介质和电子设备。


背景技术:

2.数据库系统的查询优化器主要三个组件,分别是基数估计器(可以简称为估计器)、成本模型和计划空间搜索。基数估计器的工作是给定查询的中间结果表,估计其元组数,即子查询的基数;成本模型的作用是给定执行计划(也可以称为查询计划),估计执行该执行计划的成本;计划空间搜索则是搜索可能的执行计划。
3.基于机器学习的基数估计方法可以分为三类:查询驱动的估计器、数据驱动的估计器和混合驱动的估计器。
4.在现有技术中,查询计划中任意节点对应的查询计划的执行,依赖于预先基数估计得到的初始估计基数。
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.所述更新后的估计基数是基于所述渐进基数估计模型中的改善模块根据所述融合信息更新所述未执行节点的初始估计基数得到的;
35.其中,所述渐进基数估计模型是基于第一样本数据训练得到的。
36.可选地,所述渐进基数估计模型是基于第一数据集进行预训练得到预训练模型、并基于第二数据集对所述预训练模型中的改善模块进行调整得到的;
37.其中,所述第一样本数据包括所述第一数据集和所述第二数据集。
38.可选地,所述查询计划中的每一节点具有初始估计基数,每一节点的初始估计基数是根据该节点的特征和该节点的子节点的特征确定的。
39.可选地,每一节点的初始估计基数是基于预设的基数估计模型确定的;
40.所述基数估计模型是基于第二样本数据训练得到的,所述基数估计模型包括嵌入模块、简单循环单元模块、输出模块;
41.所述嵌入模块用于将每一节点对应的第一长度的编码特征向量调整为第二长度的编码特征向量,所述第一长度大于所述第二长度;
42.所述简单循环单元模块用于根据每一节点的第二长度的编码特征向量和该节点的子节点的特征确定该节点的基数估计特征;
43.所述输出模块用于根据每一节点的基数估计特征确定该节点的初始估计基数。
44.可选地,所述基数估计模型是基于知识蒸馏的方式训练得到的。
45.可选地,所述方法还包括:
46.第二更新单元,用于基于所述更新后的估计基数,对所述未执行节点对应的查询计划进行更新。
47.第三方面,本公开提供一种处理器可读存储介质,所述处理器可读存储介质存储有计算机程序,所述计算机程序用于使所述处理器执行如上第一方面任一项所述的方法。
48.第四方面,本公开提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;
49.所述存储器存储计算机执行指令;
50.所述处理器执行所述存储器存储的计算机执行指令,以实现如第一方面任一项所述的方法。
51.第五方面,本公开提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面任一项所述的方法。
52.本公开提供的数据库查询优化方法、装置、存储介质和电子设备,该方法包括:获取查询计划中已执行节点的真实基数和查询内容,对真实基数和查询内容进行融合处理,得到融合信息,根据融合信息更新查询计划中未执行节点的初始估计基数,得到更新后的估计基数,在本实施例中,通过获取已执行节点的真实基数和查询内容,以基于真实基数和查询内容对未执行节点的初始估计基数进行调整的技术特征,相当于借鉴已执行节点的相关内容对未执行节点的初始估计基数进行修正,以使得修正得到的更新后的估计基数具有较高的准确性和可靠性。
附图说明
53.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
54.图1为基于学习的估计器的性能比较的示意图;
55.图2为估计器对不同join数的查询的估计误差示意图;
56.图3为本公开一个实施例的数据库查询优化方法的示意图;
57.图4为本公开另一实施例的数据库查询优化方法的示意图;
58.图5为本公开实施例的渐进基数估计模型的框架示意图;
59.图6为本公开实施例的渐进基数估计模型的训练原理示意图;
60.图7为本公开实施例的基数估计模型的结构示意图;
61.图8为本公开实施例的基于知识蒸馏的模型压缩示意图;
62.图9为不同的基数估计器端到端执行时间的分解示意图;
63.图10为本公开实施例的添加checkpoint的实现示意图;
64.图11为本公开的查询计划执行过程中渐进基数估计模型的估计误差的变化示意图;
65.图12为使用估计器相对于postgresql端到端执行时间的变化示意图;
66.图13为本公开实施例的数据库查询优化装置的示意图;
67.图14为用来实施本公开的实施例的电子设备的示意性框图。
68.通过上述附图,已示出本公开明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本公开的概念。
具体实施方式
69.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
70.应该理解的是,本公开实施例中术语“包括”和“具有”以及他们的任何变形,意图在于覆盖但不排他的包含,例如,包含了一系列组件的产品或设备不必限于清楚地列出的那些组件,而是可包括没有清楚地列出的或对于这些产品或设备固有的其它组件。
71.本公开实施例中术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
72.本公开实施例中术语“多个”是指两个或两个以上,其它量词与之类似。
73.本公开中的术语“第一”、“第二”、“第三”等是用于区别类似或同类的对象或实体,而不必然意味着限定特定的顺序或先后次序,除非另外注明(unless otherwise indicated)。应该理解这样使用的用语在适当情况下可以互换,例如能够根据本公开实施例图示或描述中给出那些以外的顺序实施。
74.本公开中使用的术语“单元/模块”,是指任何已知或后来开发的硬件、软件、固件、人工智能、模糊逻辑或硬件或/和软件代码的组合,能够执行与该元件相关的功能。
75.为便于读者对本公开地理解,现对本公开所涉及的至少部分术语解释如下:
76.人工智能(artificial intelligence,ai)技术,是指研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的技术。
77.深度学习(deep learning,dl)是机器学习(machine learning,ml)领域中一个子领域,是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。
78.知识蒸馏也可以称为暗知识提取,是指通过引入与教师网络(teacher network:复杂、但预测精度优越)相关的软目标(soft-target)作为总损失(total loss)的一部分,以诱导学生网络(student network:精简、低复杂度,更适合推理部署)的训练,实现知识迁移(knowledge transfer)。
79.数据库系统(database system)是指由数据库及其管理软件组成的系统。其中,数据库系统是为适应数据处理的需要而发展起来的一种较为理想的数据处理系统,也是一个为实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。
80.数据库是指“按照数据结构来组织、存储和管理数据的仓库”,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
networks,msdn)首先将查询转换为特征向量,然后使用多集合卷积网络(multi-set convolution network,mscn)将特征向量映射到结果基数。树长短期记忆网络(tree long short-term memory,tlstm)使用lstm按照查询执行计划的树状结构递归地处理查询执行计划。相对于其它工作学习从查询到基数的映射,流动损失(flow-loss)训练模型学习执行计划到成本的映射。
94.数据驱动的估计器将基数估计作为一个无监督的学习问题。如对于给定数据,数据驱动的估计器会对表的联合分布进行建模,从而获取表之间的数据的相关性和分布,再根据查询的条件估计基数。
95.就目前已有的工作而言:深度数据库(deepdb)使用了关系和积网络(relational sum product network,rspn)对表的联合概率分布进行建模,并基于rspn计算概率和期望来估计基数。连接基点测算器(neurocard)使用从所有表的完整外部联结(full left outer join)结果中收集的样本训练一个单一的深度自回归模型,该模型可以估计连接任何关系子集的查询的基数。轻量且高效的基数估计模型(fast,lightweight and accurate method for cardinality estimation-flat,flat)利用基于图模型的因子分解-分裂和积网络(factorization-split-sum-product network,fspn)对属性的联合概率密度函数进行建模。
96.混合驱动的估计器同时从表数据和查询样本中学习。
97.就现有工作而言:统一深度自回归估计器(unified deep autoregressive estimator,uae)采用统一深度自回归模型,以无监督的方式学习表的联合分布,并以有监督的方式训练使用查询内容作为辅助信息。
98.从图1可以看出,相比于传统的基数估计方法几个数量级的误差(q-error),基于学习的估计器极大地提高了基数估计的精度,但这些方法还存在以下几个缺点:(1)估计精度和推理复杂度难以兼顾。从图1可以看出现有的估计器中,数据驱动和混合驱动的估计器的q-error相比于查询驱动的估计器要小一个数量级,但是其推理时间远大于查询驱动的估计器,目前所有的估计器都难以同时达到高精度和快速推理。这主要是因为数据驱动的估计器需要加载大量的数据,在提升估计精度的同时,不可避免地增加了推理时间;查询驱动的估计器不需要加载数据,从而可以做到快速推理,但由于训练样本难以覆盖所有可能的查询,导致其估计误差较大。(2)难以应对复杂查询。从图2(图2为估计器对不同join数的查询的估计误差示意图)中可以看出,随着查询中join数的增加,所有的基数估计器的估计精度都不断降低,并且当查询包括8个join时,所有估计器的q-error的平均值都大于102,可以预见,对于包含更多join的查询,这些估计器的估计误差会更大。造成这一问题的主要原因是估计误差在执行计划间的传递和放大,估计器对于每一个join的基数估计都存在误差,产生的误差又会传递给之后的join,从而导致误差随着查询复杂度的提升而增加。由于估计的误差是不可避免的,无论估计器做的多么精准,都很难准确预测包含许多join的复杂查询。
99.针对现有方法存在的问题,本公开提出了查询驱动的自适应基数估计算法(learned progressive cardinality estimation,lpce),具体的,本公开提出了轻量高精度基数估计模型(initial cardinality estimation model,lpce-i),以解决当前方法难以兼顾估计精度和推理复杂度的问题;本公开提出了渐进基数估计模型lpce-r
(progressive cardinality refinement model,lpce-r),以处理现有方法难以应对的复杂查询。
100.下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,并不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
101.请参阅图3,图3为本公开一个实施例的数据库查询优化方法的示意图,如图3所示,该方法包括:
102.s301:获取查询计划中已执行节点的真实基数和查询内容。
103.示例性的,本实施例的执行主体为数据库查询优化装置(下文简称为优化装置),优化装置可以为如上所述的查询优化器。
104.查询计划可以理解为如上所述的执行计划,且具体可以为成本最小的执行计划,即最终的执行计划。
105.其中,查询计划中包括多个节点(也可以理解为子查询),在执行查询计划的情况下,是以节点为粒度实现,如通过依次执行各节点各自对应的查询计划中的部分查询计划,从而完成查询计划。相应的,对于查询计划的节点中已经被执行了的部分查询计划对应的节点可以称为已执行节点,对于其他没有被执行对应查询计划的节点可以称为未执行节点。
106.在该步骤中,针对已执行节点,查询优化器可以获取已执行节点的真实基数和查询内容。其中,真实基数为查询优化器执行已执行节点对应的查询计划而得到的实际基数。
107.s302:对真实基数和查询内容进行融合处理,得到融合信息。
108.本实施例对查询优化器融合处理的方式不做限定,如融合处理可以为拼接处理。
109.s303:根据融合信息更新查询计划中未执行节点的初始估计基数,得到更新后的估计基数。
110.初始估计基数和更新后的估计基数是相对概念,结合上述分析,初始估计基数可以理解为基于查询优化器中的基数估计器确定的,更新后的估计基数是指对初始估计基数进行调整得到的。
111.结合上述分析,融合信息是基于已执行节点的真实基数和查询内容确定的,因此,该步骤可以理解为,基于已执行节点的相关内容(具体为真实基数和查询内容)对未执行节点的相关内容(具体为初始估计基数)进行调整,以得到更新后的估计基数。
112.也就是说,在本实施例中,查询优化器可以在已执行节点的基础上,对未执行节点的初始估计基数进行调整,以基于查询计划的实际执行情况修正未执行节点的初始估计基数,从而使得更新后的估计基数具有较高的准确性和可靠性。
113.基于上述分析可知,本公开提供了一种数据库查询优化方法,该方法包括:获取查询计划中已执行节点的真实基数和查询内容,对真实基数和查询内容进行融合处理,得到融合信息,根据融合信息更新查询计划中未执行节点的初始估计基数,得到更新后的估计基数,在本实施例中,通过获取已执行节点的真实基数和查询内容,以基于真实基数和查询内容对未执行节点的初始估计基数进行调整的技术特征,相当于借鉴已执行节点的相关内容对未执行节点的初始估计基数进行修正,以使得修正得到的更新后的估计基数具有较高
的准确性和可靠性。
114.基于上述分析可知,在一些实施例中,可以采用模型的方式解决难以兼顾精度和推理复杂度的问题,以及解决复杂查询的问题,为使读者更深刻地理解本公开的实现原理,现结合图4对本公开的数据库查询优化方法进行更为详细地阐述。其中,图4为本公开另一实施例的数据库查询优化方法的示意图,如图4所示,该方法包括:
115.s401:基于预先训练的渐进基数估计模型中的基数模块,从查询计划中的已执行节点提取真实基数,渐进基数估计模型是基于第一样本数据训练得到的。
116.s402:基于渐进基数估计模型中的内容模块从已执行节点提取查询内容。
117.s403:基于渐进基数估计模型中的连接层对真实基数和查询内容进行融合处理,得到的融合信息。
118.s404:基于渐进基数估计模型中的改善模块根据融合信息更新未执行节点的初始估计基数,得到更新后的估计基数。
119.应该理解的是,为了避免繁琐地陈述,关于本实施例与上述实施例中相同的技术特征,本实施例不再赘述。
120.例如,关于本实施例的执行主体,可以参见上述示例,此处不再赘述;又如,关于查询计划、已执行节点、真实基数的解释,可以参见上述示例,此处不再赘述。
121.s401-s404可以理解为:可以由查询优化器或者其他装置(如训练装置)利用第一样本数据训练得到渐进基数估计模型,如图5(图5为本公开实施例的渐进基数估计模型的框架示意图)所示,渐进基数估计模型包括四个模块,分别为基数模块(cardinality module)、内容模块(content module)、连接层(connect layer)、改善模块(refine module),四个模块相互配合得到更新后的估计基数。
122.其中,若渐进基数估计模型是由训练装置利用第一样本数据训练得到的,则在训练装置训练得到渐进基数估计模型的情况下,训练装置可以将渐进基数估计模型传输给查询优化器,以便查询优化器基于渐进基数估计模型确定更新后的估计基数。
123.在本实施例中,查询优化器可以基于渐进基数估计模型从已执行节点提取两类信息:真实基数和查询内容。
124.例如,一个已执行节点的初始估计基数是10,真实基数为1000,由于未执行节点的真实基数依赖于已执行节点,因此,明确这100倍的低估对于改善未执行节点的初始估计基数至关重要。此外,已执行节点的语义(即查询内容),如算子的类型、join的列和过滤谓词,对于未执行节点的真实基数也很重要。
125.因此,基数模块提取已执行节点的真实基数cb;内容模块提取已执行节点的查询内容ca。对于一个已经执行节点,查询优化器可以将它实际基数附加到它的查询内容的内容特征编码中,得到特征向量,并将该特征向量作为下个模块(即连接层)的输入。
126.其中,真实基数cb可以称为基数模块产生的嵌入,查询内容ca可以称为内容模块产生的嵌入,这些嵌入中编码了已执行节点的信息。
127.如图5所示,连接层用于合并两个嵌入,连接层的输出为改善模块的输入。连接层可以采用具有sigmoid激活函数的单层神经网络分别学习查询内容ca和真实基数cb的合并权重,查询内容ca和真实基数cb加权合并的结果会被采用relu激活函数的单层神经网络进行处理。
128.例如,如图5所示,连接层包括线性(linear)层、sigmoid激活函数层、relu激活函数层,一个线性层的输入为基数模块的输出,一个线性层的输入为内容模块的输出,两个sigmoid激活函数的输入为还一个线性层的输入,且该线性层的输出为relu激活函数的输入,relu激活函数的输出为改善模块的输入。
129.在一些实施例中,连接层的输出c
ab
可以通过式1表示,式1:
130.c
ab
=relu(w
ab
(wa⊙
ca+wb⊙
cb)+b
ab
)
131.其中,wa=ρ(waca+ba),wb=ρ(wbcb+bb),ρ(
·
)是sigmoid函数,

表示元素乘法,wa、wb和w
ab
预设参数矩阵,wa是查询内容ca对应的权重系数,wb是真实基数cb对应的权重系数,b
ab
是预设常数。
132.在一些实施例中,查询计划为树状结构,包括父节点和子节点,一个父节点可以包括一个子节点,也可以包括两个子节点。查询计划是沿着树状结构从叶子到根的顺序执行的,即从子节点到父节点的顺序执行的,在某些时间点上,查询计划中的一些节点已经完成,而还有一些节点有待执行。
133.在查询优化器基于改善模块进行基数改善时,改善模块可以直接选择未执行节点的编码特征向量(如未执行父节点的各子节点各自对应的编码特征向量)作为输入,也可以根据执行情况用连接模块的输入c
ab
替换各子节点各自对应的编码特征向量中的至少一个。
134.一个节点(若为父节点)对应的查询计划执行结束后,基数模块和内容模块会根据该父节点的已执行子节点的和刚刚完成的该父节点更新它们的嵌入,改善模块会使用更新的嵌入改善所有其他节点的估计。嵌入会随着每个节点的完成而增量更新,基数模块和内容模块不需要从头开始处理整个完成的节点,因此渐进改善是很高效的。
135.在一些实施例中,渐进基数估计模型是基于第一数据集进行预训练得到预训练模型、并基于第二数据集对预训练模型中的改善模块进行调整得到的。
136.其中,第一样本数据包括第一数据集和第二数据集。例如,第一数据集和第二数据集分别为第一样本数据中的部分数据,或者第一样本数据为第一数据集,或者,第一样本数据为第二数据集。
137.本实施例对第一数据集和第二数据集的内容不做限定。例如,第一数据集和第二数据集可以为相同的数据集;又如,第一数据集和第二数据集中包括部分相同的数据;再如,第一数据集和第二数据集中没有相同的数据。
138.在本实施例中,渐进基数估计模型的训练可以分为两个阶段,一个阶段为预训练阶段,另一个阶段为调整阶段。
139.如图6(图6为本公开实施例的渐进基数估计模型的训练原理示意图)所示,在预训练阶段,改善模块与内容模块共享相同的参数,如改善模块与内容模块共享输入参数,输入参数可以为对第一数据集中的样本查询内容进行编码处理得到的特征向量。
140.例如,如图6所示,预训练阶段可以包括特征向量编码(feature vector encoding)和训练(train)两个阶段,在特征向量编码阶段,输入的为样本查询内容,输出的为经特征向量编码处理的特征向量。在训练阶段,以特征向量作为输入,对基础网络模型进行训练,得到改善模块和内容模块。
141.其中,本实施例对基础网络模型的框架和参数等不做限定,可以基于需求、历史记录、以及试验等方式确定。
142.如图6所示,在预训练阶段,训练基数模块的输入为父节点的针对样本查询内容(具体可以为样本查询内容的样本特征向量)、以及父节点的所属子节点的样本真实基数的拼接结果。
143.例如,结合上述示例和图6,在特征向量编码阶段,输入的为样本查询内容和样本真实基数,输出为将样本查询内容和样本真实基数进行的拼接结果进行特征向量编码处理的特征向量,在训练阶段,以特征向量作为输入,对基础网络模型进行训练,得到基数模块。
144.在一些实施例中,在训练基数模块的情况下,可以将预先标注的节点的真实基数为学习值,训练该基础网络模型使得基数模块满足最小节点损失函数。
145.如图6所示,在调整阶段,可以冻结基数模块和内容模块的参数,并微调改善模块的参数。即在该阶段,基数模块和内容模块的参数保持不变,调整的为改善模块的参数,以得到最终的渐进基数估计模型。
146.其中,具有m个节点的样本查询计划可以为改善模块提供(m-1)个训练样本。具体来说,当一个节点执行完成时,可以利用内容模块和基数模块获得以该节点为父节点的子节点的嵌入,以此嵌入作为预训练阶段得到的模型的输入,以剩余未执行节点的真实基数作为学习值,使用节点损失函数训练改善模块学习从样本查询计划的嵌入到真实基数的映射能力。
147.如图6所示,在调整阶段,未执行节点的特征编码作为改善模块的输入,已执行节点的特征编码(具体为样本真实基数对应的特征编码)作为基数模块的输入,已执行节点的特征编码(具体为样本查询内容对应的特征编码)作为内容模块的输入,连接层对基数模块的输出和内容模块的输出进行融合处理,连接层的输出也作为改善模块的输入,以对改善模块的参数进行微调,从而得到调整后的改善模块,以得到训练完成的渐进基数估计模型。
148.值得说明的是,在一些实施例中,查询优化器可以根据查询计划的执行情况确定是否采用渐进技术估计模型对初始估计基数进行更新处理。
149.示例性的,若已执行节点的真实基数与已执行节点的初始估计基数之间的差异相对较大,则查询优化器采用渐进技术估计模型对初始估计基数进行更新处理;反之,若已执行节点的真实基数与已执行节点的初始估计基数之间的差异相对较小,则查询优化器不采用渐进技术估计模型对初始估计基数进行更新处理。
150.结合上述分析,最终的执行计划是通过先确定可能的执行计划,而后确定各可能的执行计划各自对应的基数,最后通过成本估计确定的。
151.因此,在一些实施例中,查询计划中的每一节点具有初始估计基数,每一节点的初始估计基数是根据该节点的特征和该节点的子节点的特征确定的。
152.结合上述示例,查询计划中包括多个节点,该节点可以称为父节点,一个父节点可能包括子节点,且具体可能包括一个或两个子节点。每一个节点都具有初始估计基础,即未执行节点具有初始估计基数,已执行节点也具有初始估计基数,且父节点的初始估计基数是基于该父节点的特征以及该父节点的子节点的特征确定的。
153.在一些实施例中,每一节点的初始估计基数是基于预设的基数估计模型确定的。
154.基数估计模型是基于第二样本数据训练得到的,基数估计模型包括嵌入模块、简单循环单元模块、输出模块。
155.嵌入模块用于将每一节点对应的第一长度的编码特征向量调整为第二长度的编
码特征向量,第一长度大于所述第二长度。
156.简单循环单元模块用于根据每一节点的第二长度的编码特征向量和该节点的子节点的特征确定该节点的基数估计特征。
157.输出模块用于根据每一节点的基数估计特征确定该节点的初始估计基数。
158.结合上述分析可知,本公开提出了查询驱动的自适应基数估计算法,该算法可以理解为基数估计模型,即可以预先训练基数估计模型,以基于基数估计模型确定每一节点的初始估计基数。
159.同理,本实施例对第一样本数据和第二样本数据之间的关系不做限定。如第一样本数据可以与第二样本数据至少部分相同,或者,第一样本数据可以与第二样本数据完全不同。
160.示例性的,如图7(图7为本公开实施例的基数估计模型的结构示意图)所示,基数估计模型包括嵌入模块(embed module)、简单循环单元模块(simple recurrent unit module,sru module)和输出模块(output module)。
161.嵌入模块用于将节点的稀疏的特征嵌入映射到稠密的特征嵌入x,其由使用relu作为激活函数的两层全连接神经网络组成。
162.例如,嵌入模块(如图7所示的“embed module”)包括:特征向量层(如图7所示的“feature vector”)、线性层(如图7所示的“liner”)、激活函数层(如图7所示的“relu”)。
163.示例性的,嵌入模块的输入为稀疏的特征嵌入为对节点的查询信息编码得到的特征向量。其中,特征向量可以为通过独热码(one-hot)的方式进行编码得到的。
164.简单循环单元模块(如图7所示的“sru module”)的作用是将某个节点的特征嵌入(如图7所示的“x”)及其子节点(如左右子节点)的节点编码(如图7所示的“c
l”和“c
r”)作为输入,生成该节点的节点编码(如图7所示的“c”)和节点表征(如图7所示的“h”),生成的节点编码c会被传递该节点的父节点,简单循环单元模块会在其父节点上重复相同的操作。
165.在一些实施例中,节点编码c可以通过式2表示,式2:
[0166][0167]
节点表征h可以通过式3表示,式3:
[0168]
h=r

tanh(c)+(1-r)

x
[0169]
其中,f=ρ(wfx+bf),r=ρ(wrx+br),w
x
、wf和wr是参数矩阵,bf和br是偏差向量,

表示元素乘法,ρ是激活函数sigmoid,f是遗忘门,在生成节点编码c时,f控制子节点编码c
l
和cr、节点特征嵌入的投影的权重,r是复位门,它使用节点特征嵌入x和节点编码c来生成用于基数估计的节点表征h。
[0170]
输出模块用来将节点表征h映射到初始估计基数。输出模块同样由两层全连接的神经网络组成,但其最后一层使用了sigmoid激活函数来生成一个0到1的浮点数,该浮点数表示初始估计基数与训练集(如图7所示的“cardinality”)中最大基数的比率。
[0171]
例如,输出模块(如图7所示的“output module”)包括:线性层(如图7所示的“liner”)、激活函数层(如图7所示的“relu”和“sigmoid”)。
[0172]
在处理一个输入向量时,lstm需要运算8次矩阵乘法,而简单循环单元模块只需3次,因此简单循环单元模块比lstm模型具有更高的计算效率。此外,简单循环单元模块中的
3个矩阵乘法(分别用于计算f和r)可以并行化,而lstm中的矩阵乘法具有数据依赖性从而无法并行化。因此,基于基数估计模型内存消耗更小,并且推理速度有提高。
[0173]
在相关技术中,mscn和tlstm都选择平均q-error作为损失函数,由于该损失函数只考虑每个查询最终基数的估计误差,我们称它为查询损失函数。
[0174]
在本实施例中,损失函数为节点损失函数,节点损失函数可以通过式4表示,式4:
[0175][0176]
其中,c
ij
是查询计划i中第j个节点的真实基数,是查询计划i中第j个节点的初始估计基数,mi是查询计划i中的节点数。与查询损失函数不同,节点损失函数考虑查询计划中所有节点的q-error。
[0177]
在本实施例中,一方面,节点损失函数是一种数据增强方法,扩大了第二样本数据。例如,对于第二样本数据中的一个查询计划节点损失函数实际上利用了三个查询计划的初始估计误差,即因为复杂查询包含很多的中间节点,这种数据增强的效果非常好。另一方面,它允许监督查询计划中的每个节点,查询损失函数只提供对根节点的监督,这意味着梯度需要及时反向传播以到达内部节点,而通过为内部节点提供直接的监督信号,节点损失函数为内部节点产生更多的信息嵌入,使得基数估计模型对于整个查询产生了更准确的表征,进而产生更精确的基数估计。其中,表示join。
[0178]
在一些实施例中,基数估计模型是基于知识蒸馏的方式训练得到的。
[0179]
示例性的,基数估计模型的模型参数,比如嵌入向量的大小和神经网络中隐藏单元的数量,控制着基数估计模型的复杂度和精度。尽管使用小模型可以快速推理,但由于小模型的学习和泛化能力较弱,直接训练小模型的精度较差。为了训练高精度的小型模型,在本实施例中,采用了知识蒸馏的方法——使用一个大型模型(如教师模型或者称为教师网络)来指导小型学生模型或者称为小型学生网络(即基数估计模型)的训练。
[0180]
例如,学生模型可以通过匹配图8(图8为本公开实施例的基于知识蒸馏的模型压缩示意图)所示的教师模型的输出来学习有用的知识,这比训练数据更容易拟合,因为它是由与学生模型结构相同的教师模型产生的。为了进行知识蒸馏,可以先训练一个复杂度和精度都很高的教师模型(如图8所示的“large(teacher)model”),然后可以通过提示损失(如图8所示的“hint loss”)函数训练学生模型(如图8所示的“small(student)model”),最后可以通过预测损失函数(如图8所示的“prediction loss”)进一步校准学生模型,从而得到训练完成的基数估计模型。
[0181]
在一些实施例中,提示损失函数可以通过式5表示,式5:
[0182][0183]
其中,是教师模型的嵌入模块的输出,是学生模型的嵌入模块的输出,
是教师模型的简单循环单元模块产生的节点表征,是学生模型的简单循环单元模块产生的节点表征,pe()和ps()是两个单层神经网络,用于将学生模型的输出调整为与教师模型相同的大小。
[0184]
在一些实施例中,预测损失函数可以通过式6表示,式6:
[0185][0186]
其中,是学生模型基数估计的q-error,是教师模型输出模块中sigmoid激活函数之前的分对数(logit),是学生模型输出模块中sigmoid激活函数之前的logit,α是用于平衡两个损失项的权重,可以基于需求、历史记录、以及试验等方式设置,如α为0.5。
[0187]
在本实施例中,通过知识蒸馏的方式训练得到基数估计模型,可以在不降低基数估计模型的精度的情况下,将基数估计模型大幅度压缩,且可以提高基数估计模型的推理速度。
[0188]
值得说明的是,渐进基数估计模型的框架结构可以为基数估计模型的框架结构。
[0189]
s405:基于更新后的估计基数,对未执行节点对应的查询计划进行更新。
[0190]
结合上述分析可知,更新后的估计基数具有较高的准确性和可靠性,因此,在本实施例中,通过结合更新后的估计基数对未执行节点对应的查询计划进行更新,可以使得更新得到的未执行节点对应的查询计划具有较高的有效性和可靠性。
[0191]
上述实施例的数据库查询优化方法可以应用于postgresql、mysql、sqlite等其他数据库引擎,为便于读者更深刻地理解本公开的数据库查询优化方法的应用以及基于应用而产生的技术效果,现以本公开的数据库查询优化方法应用于postgresql为例,进行示范性地阐述。
[0192]
postgresql的查询优化器采用动态规划算法来枚举可能的查询计划:对于一个联结n个表的查询,查询优化器从第1层的基础表开始枚举可能的查询计划;在第i层,枚举的查询计划需要连接i个表,查询优化器还会调用基数估计器对枚举的查询计划的所有节点进行基数估计;在第n层,查询优化器可以枚举出包含所有表的查询计划,但这些查询计划可能具有不同的结构,查询计划空间搜索结束。
[0193]
在基数估计模型的应用场景中,可以将postgresql中基于直方图的基数估计器替换为本公开实施例的基数估计模型,以获得更准确的基数估计。由于同一层的所有查询计划连接的关系表数量相同,且查询计划的特征向量较小,因此基数估计模型的估计是批量进行的。为了避免重复计算,查询基数估计模型的基数估计结果存储在内存池中,以便在之后进行重复使用。
[0194]
postgresql的查询执行时间可以分解为规划时间t
p1
和执行时间t
e1
,其基于直方图的基数估计器的开销可以忽略不计。使用基数估计模型,postgresql端到端的查询执行时间t
end1
可以通过式7表示,式7:
[0195]
t
end1
=t
p1
+t
i1
+t
e1
[0196]
其中,t
i1
是基数估计的模型推理时间。对于执行时间t
e1
较短的查询,在基数估计模型较复杂的情况下,t
i1
会占据主导地位。
[0197]
根据相关技术中的方法,随机生成了具有6个join和8个join的查询集,并把所有的基数估计在这两个查询集上的端到端的时间进行分解,得到如图9(图9为不同的基数估计器端到端执行时间的分解示意图)所示的试验结果。
[0198]
如图9所示,虽然数据驱动的估计器由于更高的估计精度可以找到更优的执行计划,但由于基数估计模型简单的模型结构从而具有较短的估计时间,使得在大多数情况下,它比现有的数据驱动的估计器具有更短的端到端的执行时间t
end

[0199]
在应用渐进基数估计模型的场景下,当一个节点执行结束时,使用q-error来测量其结果表的真实基数和初始估计基数之间的差异,如果差异大于阈值(可以根据经验设置为50),则触发查询再优化。
[0200]
在进行查询再优化的情况下,查询优化器可以调用渐进基数估计模型改善查询计划中未执行节点的初始估计基数,然后分别探索当前未执行节点的最优计划和所有节点的最优计划(查询优化器获得一部分真实基数),并选择最优的计划继续执行。
[0201]
为了支持查询重新优化,可以采用检查站(checkpoint)记录真实基数与初始估计基数之间的差异,checkpoint是一个统计查询计划输出元组的简单计数器。可以在会中断流水线处理来缓存元组(从而实现中间结果的具体化)的查询计划之后放置checkpoint。还可以在节点处放置checkpoint。
[0202]
postgresql有三种连接实现,即哈希联结(如图10所示的“hash join”)、合并联结(如图10所示的“merge join”)和嵌套循环联结(如图10所示的“nested loop join”)。如图10(a)和(b)所示,checkpoint(如图10所示的“check”)放置在哈希表构建后的哈希联结的内侧(较小的表),并在合并联结的两侧排序后。由于哈希联结和合并联结都在postgresql中具体化元组(如图10所示“mv”),因此不会产生额外的具体化开销。然而,对于嵌套循环联结,两端都是流水线的。如图10(c)所示,我们中断流水线处理并在扫描外侧的表(较小的表)后具体化元组。为了测试嵌套循环联结带来的开销,我们运行了imdb基准测试中的500个查询,查询执行时间和峰值内存消耗分别提高了1.2%和5.8%,这表明我们的修改带来的开销很小,这是因为嵌套循环联结仅在外层的基数很小时使用。
[0203]
对于触发重新优化的查询,即使用渐进基数估计模型的情况下,postgresql端到端的查询执行时间t
end2
可以通过式8表示,式8:
[0204]
t
end2
=t
p2
+t
i2
+t
e2
+tr[0205]
其中,t
i2
是渐进基数估计模型推理时间,tr是重新优化时间,t
e2
是执行时间,t
p2
是规划时间。其中,对于一个查询计划,重新优化可能会被触发多次,且可以设置最大重新优化次数,如将最大重新优化次数设置为3次,以控制重新优化的开销。
[0206]
为了进行实验验证本公开实施例的数据库查询优化方法的优越性,可以基于相关技术中的方法随机生成分别包含500个具有6个join和8个join的查询的两个测试数据集和一个包含10000个查询的训练集。选择的比较对象可以包括:(1)查询驱动的估计器:mscn、tlstm、flow-los;(2)数据驱动的估计器:deepdb、neurocard、flat;(3)混合驱动的估计器:uae;(4)单独的基数估计模型、基数估计模型+渐进基数估计模型。
[0207]
从图1可以看到,与之前的查询驱动的估计器相比,采用本公开的方法(如图1所示
的“lpce”)的推理时间小于其他模型的平均推理时间的同时,估计误差(或者称为误差)至少减少2倍多;与数据驱动的估计器相比,lpce在估计误差不超过其他模型一倍的情况下,推理时间不到其他模型的1%。lpce同时满足高精度和快速推理。
[0208]
从图11(图11为本公开的查询计划执行过程中渐进基数估计模型的估计误差的变化示意图)可以看出,随着查询计划的执行过程中已执行节点的增加,渐进基数估计模型的基数估计的误差越来越小,表明渐进基数估计模型很好地解决复杂查询基数估计大的问题。除了高精度和快速推理的优势,相比于其他模型,lpce具有最短的端到端执行时间。在一些实施例中,可以通过式9表征模型对postgresql的性能增益r,式9:
[0209][0210]
其中,t
postgres
是postgresql的时间,t
learn
是推理时间。
[0211]
示例性的,所有参与比较的模型对postgresql的性能增益如图12(图12为使用估计器相对于postgresql端到端执行时间的变化示意图)所示。如图12所示,相比于其他的基数估计器,使用lpce具有最大的端到端时间的减少。
[0212]
其中,图12中的“join-six”表示6个join,“join-eight”表示8个join,“5th”表示第5个节点,“25th”表示第25个节点,以此类推,此处不再一一列举。
[0213]
请参阅图13,图13为本公开实施例的数据库查询优化装置的示意图。如图13所示,数据库查询优化装置1300,包括:
[0214]
获取单元1301,用于获取查询计划中已执行节点的真实基数和查询内容。
[0215]
融合单元1302,用于对所述真实基数和所述查询内容进行融合处理,得到融合信息。
[0216]
第一更新单元1303,用于根据所述融合信息更新所述查询计划中未执行节点的初始估计基数,得到更新后的估计基数。
[0217]
在一些实施例中,所述真实基数是基于预先训练的渐进基数估计模型中的基数模块从所述已执行节点提取的。
[0218]
所述查询内容是基于所述渐进基数估计模型中的内容模块从所述已执行节点提取的。
[0219]
所述融合信息是基于所述渐进基数估计模型中的连接层对所述真实基数和所述查询内容进行融合处理得到的。
[0220]
所述更新后的估计基数是基于所述渐进基数估计模型中的改善模块根据所述融合信息更新所述未执行节点的初始估计基数得到的。
[0221]
其中,所述渐进基数估计模型是基于第一样本数据训练得到的。
[0222]
在一些实施例中,所述渐进基数估计模型是基于第一数据集进行预训练得到预训练模型、并基于第二数据集对所述预训练模型中的改善模块进行调整得到的。
[0223]
其中,所述第一样本数据包括所述第一数据集和所述第二数据集。
[0224]
在一些实施例中,所述查询计划中的每一节点具有初始估计基数,每一节点的初始估计基数是根据该节点的特征和该节点的子节点的特征确定的。
[0225]
在一些实施例中,每一节点的初始估计基数是基于预设的基数估计模型确定的。
[0226]
所述基数估计模型是基于第二样本数据训练得到的,所述基数估计模型包括嵌入
模块、简单循环单元模块、输出模块。
[0227]
所述嵌入模块用于将每一节点对应的第一长度的编码特征向量调整为第二长度的编码特征向量,所述第一长度大于所述第二长度。
[0228]
所述简单循环单元模块用于根据每一节点的第二长度的编码特征向量和该节点的子节点的特征确定该节点的基数估计特征。
[0229]
所述输出模块用于根据每一节点的基数估计特征确定该节点的初始估计基数。
[0230]
在一些实施例中,所述基数估计模型是基于知识蒸馏的方式训练得到的。
[0231]
第二更新单元1304,用于基于所述更新后的估计基数,对所述未执行节点对应的查询计划进行更新。
[0232]
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
[0233]
根据本公开的实施例,本公开还提供了一种计算机程序产品,计算机程序产品包括:计算机程序,计算机程序存储在可读存储介质中,电子设备的至少一个处理器可以从可读存储介质读取计算机程序,至少一个处理器执行计算机程序使得电子设备执行上述任一实施例提供的方案。
[0234]
图14示出了可以用来实施本公开的实施例的示例电子设备1400的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字助理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0235]
如图14所示,设备1400包括计算单元1401,其可以根据存储在只读存储器(rom)1402中的计算机程序或者从存储单元1408加载到随机访问存储器(ram)1403中的计算机程序,来执行各种适当的动作和处理。在ram 1403中,还可存储设备1400操作所需的各种程序和数据。计算单元1401、rom 1402以及ram 1403通过总线1404彼此相连。输入/输出(i/o)接口1405也连接至总线1404。
[0236]
设备1400中的多个部件连接至i/o接口1405,包括:输入单元1406,例如键盘、鼠标等;输出单元1407,例如各种类型的显示器、扬声器等;存储单元1408,例如磁盘、光盘等;以及通信单元1409,例如网卡、调制解调器、无线通信收发机等。通信单元1409允许设备1400通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0237]
计算单元1401可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1401的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元1401执行上文所描述的各个方法和处理,例如数据库查询优化方法。例如,在一些实施例中,数据库查询优化方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1408。在一些实施例中,计算机程序的部分或者全部可以经由rom 1402和/或通信单元1409而被载入和/或安装到设备1400上。当计算机程序加载到ram 1403并由计算单元1401执行时,可以执行上文描述的数据库查询优化方法的一个或多个步骤。备选地,在其他实施例中,计算单元1401可以通
过其他任何适当的方式(例如,借助于固件)而被配置为执行数据库查询优化方法。
[0238]
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、复杂可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0239]
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0240]
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0241]
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0242]
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
[0243]
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务("
virtual private server",或简称"vps")中,存在的管理难度大,业务扩展性弱的缺陷。服务器也可以为分布式系统的服务器,或者是结合了区块链的服务器。
[0244]
本领域内的技术人员应明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
[0245]
本公开是参照根据本公开实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机可执行指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机可执行指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0246]
这些处理器可执行指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的处理器可读存储器中,使得存储在该处理器可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0247]
这些处理器可执行指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0248]
显然,本领域的技术人员可以对本公开进行各种改动和变型而不脱离本公开的精神和范围。这样,倘若本公开的这些修改和变型属于本公开权利要求及其等同技术的范围之内,则本公开也意图包含这些改动和变型在内。

技术特征:
1.一种数据库查询优化方法,其特征在于,所述方法包括:获取查询计划中已执行节点的真实基数和查询内容;对所述真实基数和所述查询内容进行融合处理,得到融合信息;根据所述融合信息更新所述查询计划中未执行节点的初始估计基数,得到更新后的估计基数。2.根据权利要求1所述的方法,其特征在于,所述真实基数是基于预先训练的渐进基数估计模型中的基数模块从所述已执行节点提取的;所述查询内容是基于所述渐进基数估计模型中的内容模块从所述已执行节点提取的;所述融合信息是基于所述渐进基数估计模型中的连接层对所述真实基数和所述查询内容进行融合处理得到的;所述更新后的估计基数是基于所述渐进基数估计模型中的改善模块根据所述融合信息更新所述未执行节点的初始估计基数得到的;其中,所述渐进基数估计模型是基于第一样本数据训练得到的。3.根据权利要求2所述的方法,其特征在于,所述渐进基数估计模型是基于第一数据集进行预训练得到预训练模型、并基于第二数据集对所述预训练模型中的改善模块进行调整得到的;其中,所述第一样本数据包括所述第一数据集和所述第二数据集。4.根据权利要求1-3中任一项所述的方法,其特征在于,所述查询计划中的每一节点具有初始估计基数,每一节点的初始估计基数是根据该节点的特征和该节点的子节点的特征确定的。5.根据权利要求4所述的方法,其特征在于,每一节点的初始估计基数是基于预设的基数估计模型确定的;所述基数估计模型是基于第二样本数据训练得到的,所述基数估计模型包括嵌入模块、简单循环单元模块、输出模块;所述嵌入模块用于将每一节点对应的第一长度的编码特征向量调整为第二长度的编码特征向量,所述第一长度大于所述第二长度;所述简单循环单元模块用于根据每一节点的第二长度的编码特征向量和该节点的子节点的特征确定该节点的基数估计特征;所述输出模块用于根据每一节点的基数估计特征确定该节点的初始估计基数。6.根据权利要求5所述的方法,其特征在于,所述基数估计模型是基于知识蒸馏的方式训练得到的。7.根据权利要求1-3中任一项所述的方法,其特征在于,所述方法还包括:基于所述更新后的估计基数,对所述未执行节点对应的查询计划进行更新。8.一种数据库查询优化装置,其特征在于,包括:获取单元,用于获取查询计划中已执行节点的真实基数和查询内容;融合单元,用于对所述真实基数和所述查询内容进行融合处理,得到融合信息;更新单元,用于根据所述融合信息更新所述查询计划中未执行节点的初始估计基数,得到更新后的估计基数。9.一种处理器可读存储介质,其特征在于,所述处理器可读存储介质存储有计算机程
序,所述计算机程序用于使所述处理器执行权利要求1至7中任一项所述的方法。10.一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;所述存储器存储计算机执行指令;所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1至7中任一项所述的方法。

技术总结
本公开提供一种数据库查询优化方法、装置、存储介质和电子设备,该方法包括:获取查询计划中已执行节点的真实基数和查询内容,对真实基数和查询内容进行融合处理,得到融合信息,根据融合信息更新查询计划中未执行节点的初始估计基数,得到更新后的估计基数,在本实施例中,通过获取已执行节点的真实基数和查询内容,以基于真实基数和查询内容对未执行节点的初始估计基数进行调整的技术特征,相当于借鉴已执行节点的相关内容对未执行节点的初始估计基数进行修正,以使得修正得到的更新后的估计基数具有较高的准确性和可靠性。估计基数具有较高的准确性和可靠性。估计基数具有较高的准确性和可靠性。


技术研发人员:唐博 李奇隆 晏潇 王方
受保护的技术使用者:南方科技大学
技术研发日:2023.05.22
技术公布日:2023/9/22
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

航空商城 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

评论

相关推荐