当前位置:文档之家› 数据库查询优化方法和系统与设计方案

数据库查询优化方法和系统与设计方案

数据库查询优化方法和系统与设计方案
数据库查询优化方法和系统与设计方案

图片简介:

本技术介绍了一种数据库查询优化方法,包括:连接顺序选择器和自适应决策网络。其中连接顺序选择器用于选择查询计划中最优的连接顺序,其中包括一种新的数据库查询计划编码方案,将编码与连接顺序一一对应;一个预测查询计划执行时间的价值网络,由查询计划及其对应真实执行时间进行训练,用于蒙特卡洛树搜索中的奖励反馈;蒙特卡洛树搜索方法,用于模拟生成多种不同的连接顺序,由连接顺序价值网络评价该连接顺序的好坏,在达到预设的探索次数后返回一个推荐的连接顺序。自适应决策网络用于区分查询语句是否使用该连接顺序选择器,提升优化系统的整体性能。本技术的方法和系统可以有效避免传统查询优化器的局限性,提高数据库查询效率。

技术要求

1.一种数据库查询优化方法,其特征在于,包括以下步骤:

(1)获取查询语句,根据该查询语句中各个表之间的连接关系构建连接矩阵,并根据查询语句中所存

在的表属性的过滤或选择关系式构建谓词向量;

(2)根据步骤(1)构建的连接矩阵和谓词向量构建蒙特卡洛树,并从该蒙特卡洛树中选择该查询语句对应的连接顺序;

(3)输出步骤(2)中选择的连接顺序,并将该连接顺序输入数据库执行。

2.根据权利要求1所述的数据库查询优化方法,其特征在于,步骤(2)中构建蒙特卡洛树这一过程包括如下子步骤:

(2-1)构造根节点,将构造的根节点设置为当前节点;

(2-2)根据当前节点的选择空间矩阵将该当前节点所有可能选择的子连接顺序加入到该当前节点的子节点列表中;

(2-3)根据当前节点的子节点列表对当前节点进行多次模拟,以构造蒙特卡洛树,其中模拟次数由以下公式确定:SetpSearchTimes=NumberOfChildren×searchFactor;其中SetpSearchTimes代表即树的每层上对当前节点进行模拟的次数,NumberOfChildren表示蒙特卡洛树的第i层子节点的数

量,searchFactor表示搜索参数searchFactor,其由实验确定;

(2-4)在步骤(2-3)构造的蒙特卡洛树上通过UCT算法选择当前节点的一个子节点,将这个选出的子节点设置为新的当前节点。

(2-5)针对步骤(2-4)设置的新的当前节点,不断重复上述步骤(2-3)与步骤(2-4),直至蒙特卡洛树搜索进行到最后一层为止,此时将最后一次迭代过程选择出的节点的连接矩阵进行解析,解析得到的连接顺序即为最终的连接顺序。

3.根据权利要求2所述的数据库查询优化方法,其特征在于,步骤(2-3)包括如下子步骤:

(2-3-1)从当前节点的子节点列表中选择一个子节点;

(2-3-2)根据步骤(2-3-1)选出的子节点创建一个新节点,并将其构造在蒙特卡洛树上;

(2-3-3)在步骤(2-3-2)创建的新节点上进行模拟,即通过快速随机选择将该新节点的连接顺序补全,从而构成一个完整连接顺序;

(2-3-4)将步骤(2-3-3)得到的完整连接顺序输入事先训练好的连接顺序价值网络,以获得预测的执行时间;

(2-3-5)根据步骤(2-3-4)中预测的执行时间计算该完整连接顺序的奖励;

(2-3-6)根据步骤(2-3-5)计算得到的奖励对从步骤(2-3-2)创建的新节点到根节点路径上的所有节点进行反馈;

(2-3-7)重复上述步骤(2-3-1)至(2-3-6),直到模拟次数到达步骤(2-3)中的模拟次数SetpSearchTimes为止,从而完成构建蒙特卡洛树。

4.根据权利要求3所述的数据库查询优化方法,其特征在于,步骤(2-3-1)包括如下子步骤:

(2-3-1-1)判断当前节点的模拟次数是否达到模拟次数的阈值,是则直接进入步骤(2-4),否则进入步骤(2-3-1-2);

(2-3-1-2)判断当前节点的子节点列表中是否存在节点没有被构建在蒙特卡洛树中,如果是则从这些节点中随机选择一个子节点,然后进入步骤(2-3-2),否则进入步骤(2-3-1-3);

(2-3-1-3)通过上限置信区间算法从当前节点的子节点列表中选择一个子节点,然后进入步骤(2-3-1-4);

(2-3-1-4)判断步骤(2-3-1-3)选出的节点的子节点列表中是否存在节点没有被构建在蒙特卡洛树中,如果是则从这些节点中随机选择一个子节点作为当前节点,然后进入步骤(2-3-2),否则返回步骤(2-3-1-3)。

5.根据权利要求4所述的数据库查询优化方法,其特征在于,

UCT算法是计算树中某个节点的每个子节点的价值,并选择其中价值最高的;

UCT算法要求在树中选择节点时应使如下表达式具有最大值:

其中vk表示当前节点的第k个子节点且有k∈[1,P],P表示当前节点中子节点的总数,v表示当前节点。Q(vk)代表第k个子节点获得的总奖励值,N(vk)代表第k个子节点进行模拟的次数,N(v)代表在当前节点v上进行模拟的次数,C为探索参。

6.根据权利要求5所述的数据库查询优化方法,其特征在于,连接顺序价值网络的是通过以下步骤训练得到的:

(2-3-4-1)随机生成多个不同的连接顺序,并将其输入到数据库中,并获取每个连接顺序对应的执行时间;

(2-3-4-2)将所有连接顺序按照其对应执行时间的大小进行排序,并将所有连接顺序按照其对应执行时间所在的时间区间分为n类,对应从0到n-1,0代表执行时间最短;其中n的取值应根据实际系统进行选择,优选在4到15之间。

(2-3-4-3)将步骤(2-3-4-2)得到的n类连接顺序进行编码,以得到编码后的n类连接顺序;

(2-3-4-4)构建连接顺序价值网络,其为四层全连接的神经网络,每层均设计为线性层,其中第一层到第三层作为隐藏层选择ReLU作为激活函数,最后一层作为输出层选用Softmax函数作为激活函数,选用CrossEntropyLoss作为损失函数;

(2-3-4-5)将编码后的连接顺序及对应的执行时间标签并将其按7:3的比例划分为训练集和测试集,将训练集输入连接顺序价值网络进行训练;

(2-3-4-6)使用反向传播算法对连接顺序价值网络中每层的权重参数和偏置参数进行更新和优化,以得到更新后的神经网络;对更新后的神经网络进行迭代训练,直到该神经网络的损失函数达到最小为止;

(2-3-4-7)使用步骤(2-3-4-4)得到的数据集中的测试集对迭代训练后的连接顺序价值网络进行迭代验证,直到得到的分类精度达到最优为止,从而得到训练好的连接顺序价值网络。

7.根据权利要求1所述的数据库查询优化方法,其特征在于,进一步包括在步骤(1)之后、步骤(2)之前,将查询语句的连接矩阵和谓词向量输入自适应决策网络,并根据输出结果判断是否使用现有的数据库查询优化器处理该查询语句,如果是则过程结束,否则进入步骤(2)。

8.根据权利要求7所述的数据库查询优化方法,其特征在于,该自适应决策网络是采用以下过程进行训练的:

(S1)将多个查询语句通过连接顺序优化器以及原始的数据库查询优化器进行优化,并对比其执行效果,将原始数据库查询优化器表现更好的查询语句打上标签“0”,将连接顺序优化器表现更好的查询语句打上标签“1”;

(S2)将自适应决策网络设计为四层全连接的神经网络,每层均设计为线性层,其中中间三层隐藏层选择ReLU作为激活函数,最后一层输出层选用Sigmod函数作为激活函数,选用CrossEntropyLoss作为损失函数;

(S3)将步骤(1)中的查询语句编码以及步骤(S1)中的标签按照7:3的比例划分为训练集和测试集,将训练集输入自适应决策网络进行训练;

(S4)使用反向传播算法对神经网络中每层的权重参数和偏置参数进行更新和优化,以得到更新后的神经网络;

(S5)对步骤(S4)更新后的神经网络进行迭代训练,直到该神经网络的损失函数达到最小为止;

(S6)使用步骤(S3)得到的数据集中的测试集对迭代训练后的神经网络进行迭代验证,直到得到的分类精度达到最优为止,从而得到训练好的自适应决策网络。

9.一种数据库查询优化系统,其特征在于,包括:

第一模块,用于获取查询语句,根据该查询语句中各个表之间的连接关系构建连接矩阵,并根据查询语句中所存在的表属性的过滤或选择关系式构建谓词向量;

第二模块,用于根据第一模块构建的连接矩阵和谓词向量构建蒙特卡洛树,并从该蒙特卡洛树中选择该查询语句对应的连接顺序;

第三模块,用于输出第二模块中选择的连接顺序,并将该连接顺序输入数据库执行。

技术说明书

一种数据库查询优化方法和系统

技术领域

本技术属于数据库技术领域,更具体地,涉及一种数据库查询优化方法和系统。

背景技术

随着互联网技术的飞速发展,数据库作为支撑数据存储与查询的传统手段发挥着越来越重要的作用。面对数据量庞大的数据库,数据检索的效率成为研究人员关心的重要问题之一。通常关系型数据库通过查询优化器对输入的查询语句进行相应的优化,查询优化器是数据库系统获得良好性能的关键组件。

数据库所执行的SQL语句是声明式语言,只声明用户想得到什么样的结果,并不关心数据库的物理执行引擎如何获取并返回数据。查询优化器的主要工作是将输入的声明式查询语句优化为一个步骤详细且高效可执行的物理查询计划,其中连接顺序的优化几乎是所有数据库查询优化器的核心,同一条SQL语句采用连接顺序不同的查询计划甚至会导致响应时间相差多个数量级。

当前大多数数据库查询优化器使用代价模型结合启发式方法生成查询计划,其存在一些不可忽略的缺陷:一是由于数据库系统的复杂性以及数据之间的倾斜和相关性,并且由于代价模型基于大量假设,不能准确反映该查询计划执行后的响应时间,因此导致查询优化器根据统计数据及代价模型对查询计划执行代价估计后得到的结果不太准确;二是现有查询优化器主要基于动态规划、贪心算法等确定性算法或模拟退火、遗传算法等随机算法进行枚举,但由于查询计划的解空间非常大,这些算法不能有效解决枚举问题,因此查询优化器会使用大量的启发式策略削减枚举空间,这虽然能够提高优化效率,但也经常会错过执行时间更短的查询计划,从而导致查询效率偏低。

技术内容

针对现有技术的以上缺陷或改进需求,本技术提供了一种数据库查询优化方法和系统。其目的在于,解决现有数据库查询优化器由于数据库系统的复杂性、数据之间的倾斜和相关性、以及代价模型是基于大量假设导致代价估计结果不准确的技术问题,以及由于使用大量的启发式策略削减枚举空间导致错过执行时间更短的查询计划、查询效率偏低的技术问题。

为实现上述目的,按照本技术的一个方面,提供了一种数据库查询优化方法,包括以下步骤:

(1)获取查询语句,根据该查询语句中各个表之间的连接关系构建连接矩阵,并根据查询语句中所存在的表属性的过滤或选择关系式构建谓词向量;

(2)根据步骤(1)构建的连接矩阵和谓词向量构建蒙特卡洛树,并从该蒙特卡洛树中选择该查询语句对应的连接顺序;

(3)输出步骤(2)中选择的连接顺序,并将该连接顺序输入数据库执行。

优选地,步骤(2)中构建蒙特卡洛树这一过程包括如下子步骤:

(2-1)构造根节点,将构造的根节点设置为当前节点;

(2-2)根据当前节点的选择空间矩阵将该当前节点所有可能选择的子连接顺序加入到该当前节点的子节点列表中;

(2-3)根据当前节点的子节点列表对当前节点进行多次模拟,以构造蒙特卡洛树,其中模拟次数由以下公式确定:SetpSearchTimes=NumberOfChildren×searchFactor;其中SetpSearchTimes代表即树的每层上对当前节点进行模拟的次数,NumberOfChildren表示蒙特卡洛树的第i层子节点的数

量,searchFactor表示搜索参数searchFactor,其由实验确定;

(2-4)在步骤(2-3)构造的蒙特卡洛树上通过UCT算法选择当前节点的一个子节点,将这个选出的子节点设置为新的当前节点。

(2-5)针对步骤(2-4)设置的新的当前节点,不断重复上述步骤(2-3)与步骤(2-4),直至蒙特卡洛树搜索进行到最后一层为止,此时将最后一次迭代过程选择出的节点的连接矩阵进行解析,解析得到的连接顺序即为最终的连接顺序。

优选地,步骤(2-3)包括如下子步骤:

(2-3-1)从当前节点的子节点列表中选择一个子节点;

(2-3-2)根据步骤(2-3-1)选出的子节点创建一个新节点,并将其构造在蒙特卡洛树上;

(2-3-3)在步骤(2-3-2)创建的新节点上进行模拟,即通过快速随机选择将该新节点的连接顺序补全,从而构成一个完整连接顺序;

(2-3-4)将步骤(2-3-3)得到的完整连接顺序输入事先训练好的连接顺序价值网络,以获得预测的执行时间;

(2-3-5)根据步骤(2-3-4)中预测的执行时间计算该完整连接顺序的奖励;

(2-3-6)根据步骤(2-3-5)计算得到的奖励对从步骤(2-3-2)创建的新节点到根节点路径上的所有节点进行反馈;

(2-3-7)重复上述步骤(2-3-1)至(2-3-6),直到模拟次数到达步骤(2-3)中的模拟次数SetpSearchTimes为止,从而完成构建蒙特卡洛树。

优选地,步骤(2-3-1)包括如下子步骤:

(2-3-1-1)判断当前节点的模拟次数是否达到模拟次数的阈值,是则直接进入步骤(2-4),否则进入步骤(2-3-1-2);

(2-3-1-2)判断当前节点的子节点列表中是否存在节点没有被构建在蒙特卡洛树中,如果是则从这些节点中随机选择一个子节点,然后进入步骤(2-3-2),否则进入步骤(2-3-1-3);

(2-3-1-3)通过上限置信区间算法从当前节点的子节点列表中选择一个子节点,然后进入步骤(2-3-1-4);

(2-3-1-4)判断步骤(2-3-1-3)选出的节点的子节点列表中是否存在节点没有被构建在蒙特卡洛树中,如果是则从这些节点中随机选择一个子节点作为当前节点,然后进入步骤(2-3-2),否则返回步骤(2-3-1-3)。

优选地,UCT算法是计算树中某个节点的每个子节点的价值,并选择其中价值最高的;

UCT算法要求在树中选择节点时应使如下表达式具有最大值:

其中vk表示当前节点的第k个子节点且有k∈[1,P],P表示当前节点中子节点的总数,v表示当前节点。Q(vk)代表第k个子节点获得的总奖励值,N(vk)代表第k个子节点进行模拟的次数,N(v)代表在当前节点v上进行模拟的次数,C为探索参。

优选地,连接顺序价值网络的是通过以下步骤训练得到的:

(2-3-4-1)随机生成多个不同的连接顺序,并将其输入到数据库中,并获取每个连接顺序对应的执行时间;

(2-3-4-2)将所有连接顺序按照其对应执行时间的大小进行排序,并将所有连接顺序按照其对应执行时间所在的时间区间分为n类,对应从0到n-1,0代表执行时间最短;其中n的取值应根据实际系统进行选择,优选在4到15之间。

(2-3-4-3)将步骤(2-3-4-2)得到的n类连接顺序进行编码,以得到编码后的n类连接顺序;

(2-3-4-4)构建连接顺序价值网络,其为四层全连接的神经网络,每层均设计为线性层,其中第一层到第三层作为隐藏层选择ReLU作为激活函数,最后一层作为输出层选用Softmax函数作为激活函数,选用CrossEntropyLoss作为损失函数;

(2-3-4-5)将编码后的连接顺序及对应的执行时间标签并将其按7:3的比例划分为训练集和测试集,将训练集输入连接顺序价值网络进行训练;

(2-3-4-6)使用反向传播算法对连接顺序价值网络中每层的权重参数和偏置参数进行更新和优化,以得到更新后的神经网络;对更新后的神经网络进行迭代训练,直到该神经网络的损失函数达到最小为止;

(2-3-4-7)使用步骤(2-3-4-4)得到的数据集中的测试集对迭代训练后的连接顺序价值网络进行迭代验证,直到得到的分类精度达到最优为止,从而得到训练好的连接顺序价值网络。

优选地,所述方法进一步包括在步骤(1)之后、步骤(2)之前,将查询语句的连接矩阵和谓词向量输入自适应决策网络,并根据输出结果判断是否使用现有的数据库查询优化器处理该查询语句,如果是则过程结束,否则进入步骤(2)。

优选地,该自适应决策网络是采用以下过程进行训练的:

(S1)将多个查询语句通过连接顺序优化器以及原始的数据库查询优化器进行优化,并对比其执行效果,将原始数据库查询优化器表现更好的查询语句打上标签“0”,将连接顺序优化器表现更好的查询语句打上标签“1”;

(S2)将自适应决策网络设计为四层全连接的神经网络,每层均设计为线性层,其中中间三层隐藏层选择ReLU作为激活函数,最后一层输出层选用Sigmod函数作为激活函数,选用CrossEntropyLoss作为损失函数;

(S3)将步骤(1)中的查询语句编码以及步骤(S1)中的标签按照7:3的比例划分为训练集和测试集,将训练集输入自适应决策网络进行训练;

(S4)使用反向传播算法对神经网络中每层的权重参数和偏置参数进行更新和优化,以得到更新后的神经网络;

(S5)对步骤(S4)更新后的神经网络进行迭代训练,直到该神经网络的损失函数达到最小为止;

(S6)使用步骤(S3)得到的数据集中的测试集对迭代训练后的神经网络进行迭代验证,直到得到的分类精度达到最优为止,从而得到训练好的自适应决策网络。

按照本技术的另一方面,提供了一种数据库查询优化系统,包括:

第一模块,用于获取查询语句,根据该查询语句中各个表之间的连接关系构建连接矩阵,并根据查询语句中所存在的表属性的过滤或选择关系式构建谓词向量;

第二模块,用于根据第一模块构建的连接矩阵和谓词向量构建蒙特卡洛树,并从该蒙特卡洛树中选择该查询语句对应的连接顺序;

第三模块,用于输出第二模块中选择的连接顺序,并将该连接顺序输入数据库执行。

总体而言,通过本技术所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

(1)由于本技术采用了步骤(2-3-4),其中连接顺序价值网络通过机器学习的方法从收集的连接顺序及其对应执行时间中学习经验和知识。神经网络能够根于已有的知识进行推理和判断,可以学习到数据库中与查询优化相关的信息,使用执行时间作为预测内容则绕过了不精确的代价估计模型。因此能够解决现有数据库查询优化器由于数据库系统的复杂性、数据之间的倾斜和相关性、以及代价模型是基于大量假设导致代价估计结果不准确的技术问题;

(2)由于本技术采用了步骤(2),其蒙特卡洛树搜索方法逐步解决连接顺序问题,可以探索较少的连接顺序而取得一个相对不错的结果。蒙特卡洛树搜索在根部时考虑到了所有可能的情况,其选择过程中通过UCT算法平衡探索和利用给予了每个可能的连接顺序被选择的机会,在同样的探索次数下更不易陷入局部最优解。因此能够解决现有数据库查询优化器由于使用大量的启发式策略削减枚举空间导致错过执行时间更短的查询计划、查询准确率偏低的技术问题;

(3)由于本技术采用了步骤(2-3-4-3),其连接顺序编码策略通过行和列的方式巧妙地对左表和右表进行了区分,以行标为左表,以列标为右表,以矩阵形式表示连接顺序,可以表示所有树的形式并且可以方便的应用于连接顺序价值网络的输入和蒙特卡洛树搜索的状态表示。可以解决现有编码不能将连接顺序与编码一一对应或编码后不能解码的问题。

(4)由于本技术在步骤(1)和步骤(2)之间采用了优选的自适应决策网络,该网络可以通过现有的经验预测某条查询语句是否有使用本技术中查询优化器优化的价值,为每条查询分配合适的查询优化器,在降低蒙特卡洛树搜索优化耗时的同时进一步提升了总体的查询优化效率。

附图说明

图1是本技术数据库查询优化方法的流程图;

图2是本技术使用的一条查询语句示例;

图3是针对图2中查询的连接矩阵编码;

图4是针对图2中查询的谓词向量编码;

图5是蒙特卡洛树搜索中一次模拟的示意图;

图6是连接顺序价值网络的结构示意;

图7是某条连接顺序的连接矩阵编码;

图8是蒙特卡洛树搜索逐步构建完整决策的示意图;

图9自适应决策网络的示意图。

具体实施方式

为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。此外,下面所描述的本技术各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

本技术的基本思路在于,针对多连接查询生成响应时间更短的连接顺序,从而提升数据库查询性能。本技术通过神经网络预测指定连接顺序的查询计划的真实响应时间;通过蒙特卡洛树搜索方法枚举连接顺序,以神经网络的预测结果作为反馈,生成响应时间更短的连接顺序。

如图1所示,本技术提供了一种数据库查询优化方法,包括以下步骤:

(1)获取查询语句,根据该查询语句中各个表之间的连接关系构建连接矩阵,并根据查询语句中所存在的表属性的过滤或选择关系式构建谓词向量;

具体而言,图2示出了本技术的一个查询语句,从中可以看出其涉及5个表A、B、C、D和E,其中表A和B、A和C、C和D、以及C和E之间均存在连接关系,因此可以构建出如图3所示的连接矩阵(该连接矩阵行和列数量均为表的总数,矩阵中表彼此之间有连接关系的,则其行和列交汇位置的值为1,其余为0)。

此外,由于该查询语句中仅仅存在一个过滤关系式,即表B中第a2个属性大于100,因此,对应的在图4的谓词向量(该谓词向量是行向量,其每一列代表表A.a1、表A.a2、…表A.aM、表B.a1、…、表B.aM、表N.a1、…、表N.aM)中,仅仅只有表B的第a2个属性处的值为1,其余均为0,其中N表示表总数(在本示例中N=5),M表示每个表中属性的总数。

(2)根据步骤(1)构建的连接矩阵和谓词向量构建蒙特卡洛树,并从该蒙特卡洛树中选择该查询语句对应的连接顺序;

蒙特卡洛树搜索的层数与当前查询语句所涉及的表的数量相同,设其层数为i(例如在上述示例中,该层数就等于5),在每层上进行大量模拟循环后选择当前层的一个子节点(每个子节点代表一种连接顺序)并进入到下一层,每层做出一个决策最终构成一个完整的连接顺序。蒙特卡洛树搜索逐步构建完整的决策,在树上的每一层对应完整决策的一个子步骤,每一步完整一次连接。树的第一层对应连接顺序的初始状态(所有表均未连接),树的最后一层对应连接顺序的最终状态(所有表都一一连接完毕)。

本步骤中构建蒙特卡洛树这一过程包括如下子步骤:

(2-1)构造根节点,将构造的根节点设置为当前节点(即将要做出决策的节点);

具体而言,树中的每个节点包含一个选择空间矩阵、以及一个当前状态矩阵,该根节点的选择空间矩阵等于步骤(1)中的连接矩阵,当前状态矩阵为空矩阵。蒙特卡洛树中的每个节点还对应有一个分数,分数的分母代表在该节点上已经执行模拟的次数,分数的分子表示以该节点代表的连接顺序为核心,经过上述次数的模拟后得到的总奖励值。该根节点即蒙特卡洛树的第一个节点,此时蒙特卡洛树已经存在。

(2-2)根据当前节点的选择空间矩阵将该当前节点所有可能选择的子连接顺序加入到该当前节点的子节点列表中;

后续步骤中,将从该子节点列表中选择节点并将其构建为当前节点的子节点(在本步骤中,只是将子节点放置在子节点列表中,后续会构建在蒙特卡洛树上);

在本例中,如图3所示,选择空间矩阵中存在“1”的位置即代表该位置可以存在连接,则所有可能的子节点(连接顺序)包括(A B)、(B A)、(A C)、(C A)、(C D)、(D C)、(C E)、(E C)八种。

(2-3)根据当前节点的子节点列表对当前节点进行多次模拟,以构造蒙特卡洛树,其中模拟次数由以下公式确定:SetpSearchTimes=NumberOfChildren×searchFactor

其中SetpSearchTimes代表每步上(即树的每层上)对当前节点进行模拟的次数,等于查询在第i步(即蒙特卡洛树的第i层)可能的决策数(即子节点的数量,本例中第一层为8)NumberOfChildren乘以搜索参数searchFactor,搜索参数searchFactor由实验确定,本技术中设置为15。

步骤(2-3)包括如下子步骤:

(2-3-1)从当前节点的子节点列表中选择一个子节点;

本步骤包括以下子步骤:

(2-3-1-1)判断当前节点的模拟次数是否达到模拟次数的阈值,是则直接进入步骤(2-4),否则进入步骤(2-3-1-2);

(2-3-1-2)判断当前节点的子节点列表中是否存在节点没有被构建在蒙特卡洛树中,如果是则从这些节点中随机选择一个子节点,然后进入步骤(2-3-2),否则进入步骤(2-3-1-3);

(2-3-1-3)通过上限置信区间(Upper Confidence Bound Apply to Tree,简称UCT)算法从当前节点的子节点列表中选择一个子节点,然后进入步骤(2-3-1-4);

其中UCT算法是计算树中某个节点的每个子节点的价值,并选择其中价值最高的。UCT算法要求在树中选择节点时应使如下表达式具有最大值:

其中vk表示当前节点的第k个子节点且有k∈[1,P],P表示当前节点中子节点的总数,v表示当前节点。Q(vk)代表第k个子节点获得的总奖励值,N(vk)代表第k个子节点进行模拟的次数,N(v)代表在当

前节点v上进行模拟的次数。C为探索参数,默认将其设置为通常根据经验进行选择。通过该方法可以使搜索过程中既充分利用已有的知识,又考虑到模拟次数不多的节点,给它们更多的机会。

(2-3-1-4)判断步骤(2-3-1-3)选出的节点的子节点列表中是否存在节点没有被构建在蒙特卡洛树中,如果是则从这些节点中随机选择一个子节点作为当前节点,然后进入步骤(2-3-2),否则返回步骤(2-3-1-3);

图5给出了一个示例,在根节点上进行选择,设此时根节点的所有子节点均已被构建在树中,根据UCT算法选择了子节点(A C),该节点具有最高的价值。节点(A C)的所有子节点也均构建在树中,所以在其上继续使用UCT算法选择了子连接((A C)D)。节点((A C)D)存在未被构建在树中的子节点(((A C)D)E),选择该节点后选择过程到此结束。

(2-3-2)根据步骤(2-3-1)选出的子节点创建一个新节点,并将其构造在蒙特卡洛树上。

具体而言,步骤(2-3-1)中选择的节点此前只是出现在某个节点的子节点列表中,但不在树上。通过被选择出的子节点的构造一个新节点,并将其放置到蒙特卡洛树上。

在构建节点时,子节点的选择空间矩阵、当前状态矩阵以其父节点的状态矩阵为基础但并不完全相同。以图5为例,其中被创建的子节点(((A C)D)E)的状态是在父节点状态基础上执行了连接中间结果((A C)D)和表E这个决策的结果,其代表总奖励与总访问次数的分数当前为0/0,此时应为该新节点构建其子节点列表。

(2-3-3)在步骤(2-3-2)创建的新节点上进行模拟,即通过快速随机选择将该新节点的连接顺序补全,从而构成一个完整连接顺序。

具体而言,该过程会拷贝该节点的状态编码,并在其上将编码补全为一个完整的连接顺序,不会创建新的节点也不会改变树的结构。该阶段采用随机的方式进行选择,可快速得到一个结果,大幅节省模拟的时间。如图5中模拟过程所示,本例中可以将(((A C)D)E)随机补全为(B(((A C)D)E))或((((A

C)D)E)B)。

(2-3-4)将步骤(2-3-3)得到的完整连接顺序输入事先训练好的连接顺序价值网络,以获得预测的执行时间。

其中连接顺序价值网络的是通过以下步骤训练得到的:

(2-3-4-1)随机生成多个不同的连接顺序,并将其输入到数据库中,并获取每个连接顺序对应的执行时间;

(2-3-4-2)将所有连接顺序按照其对应执行时间的大小进行排序,并将所有连接顺序按照其对应执行时间所在的时间区间分为n类,对应从0到n-1,0代表执行时间最短;其中n的取值应根据实际系统进行选择,优选在4到15之间。

(2-3-4-3)将步骤(2-3-4-2)得到的n类连接顺序进行编码,以得到编码后的n类连接顺序;

本步骤的目的在于,可以输入到连接顺序价值网络中进行训练,连接顺序编码按照如下方式进行:

首先,连接顺序编码包括连接顺序矩阵和谓词向量;其中,连接顺序矩阵用于标记表之间的连接顺序,并可用于表示未完成的中间结果(即部分表已经连接,但尚不构成完整连接顺序),其大小为

N*N,其中N为本数据库中包含的表的数量;所述谓词向量用于标记查询语句中存在的选择、过滤等相关操作,用于提升网络的预测准确率,其大小为M,M为本数据库中涉及到的所有属性的数量。

连接顺序矩阵维度等于当前数据库中表的数量,每一行和每一列都代表了一个表,通过在行和列的交点上进行标记来标注两个表之间的连接,编码中数字越大优先级越高,通过行和列的方式对连接顺序中左表和右表进行区分,以行标为左表,以列标为右表(如连接(A B),其中A为左表,B为右表)。

设某查询需要连接n张表,则需要做n-1次连接。首先从连接顺序中取出最先连接的两个表,在主动表对应的行被动表对应的列标记为n-1。接下来再次从查询中取出下一步要连接的表,在主动表对应的行被动表对应的列标记为n-2,依次类推共进行n-1次。规定涉及中间结果的连接应标记在该中间结果包含的所有表中编号最小的表处。

图7给出了一个连接顺序编码的示例,以连接顺序((D(C E))(A B))对应的连接顺序矩阵为例,编码时,首先将原始的查询计划解析为形如((D(C E))(A B))的格式。该查询涉及到五个表,则需要进行四次连接操作。在该连接顺序中,最先连接的表是表C与表E。则首先将连接的总次数4标记在矩阵中代表C 的行与代表E的列的交点处,代表(C E)。下一步需要进行表D与表C表E中间结果的连接,规定中间结果的连接应标记在所涉及的所有表中编号最小的表处,即D与(C E)的连接应在代表D的行与代表C的列(C的编号小于E)的交点处标记3。接下来将连接总次数减1,将2标记在矩阵中代表A的行与代表B的列的交点处,代表(A B)。接下来需要将(D(C E))与(A B)进行连接,两者均为中间结果,两侧编号最小的表分别为表C和表A,则在矩阵中代表C的行与代表A的列的交点处标记1。此时整个编码完成。谓词向量编码与步骤(1)中查询编码中的谓词向量相同,如图4所示;

(2-3-4-4)构建连接顺序价值网络,其为四层全连接的神经网络,每层均设计为线性层,其中第一层到第三层作为隐藏层选择ReLU作为激活函数,最后一层作为输出层选用Softmax函数作为激活函数,选用CrossEntropyLoss作为损失函数,为了防止训练模型时出现过拟合的现象在网络每一个隐藏层后加入了Dropout层。图6示出了连接顺序价值网络的结构;

(2-3-4-5)将编码后的连接顺序及对应的执行时间标签并将其按7:3的比例划分为训练集和测试集,将训练集输入连接顺序价值网络进行训练;

(2-3-4-6)使用反向传播算法对连接顺序价值网络中每层的权重参数和偏置参数进行更新和优化,以得到更新后的神经网络;对更新后的神经网络进行迭代训练,直到该神经网络的损失函数达到最小为止;

(2-3-4-7)使用步骤(2-3-4-4)得到的数据集中的测试集对迭代训练后的连接顺序价值网络进行迭代验证,直到得到的分类精度达到最优为止,从而得到训练好的连接顺序价值网络。

(2-3-5)根据步骤(2-3-4)中预测的执行时间计算该完整连接顺序的奖励。

具体而言,奖励是根据如下公式计算确定:

其中runtime代表连接顺序价值网络预测的执行时间。即如果执行时间预测较长,则reward较小,认为该连接顺序是较差的;如果预测的执行时间较短则reward较大,认为该连接顺序是较优的。

(2-3-6)根据步骤(2-3-5)计算得到的奖励对从步骤(2-3-2)创建的新节点到根节点路径上的所有节点进行反馈。

具体而言,被扩展的节点到根节点路径上的所有节点,每个节点的访问次数(即分母)加1,每个节点的总奖励值(即分子)加步骤(2-3-5)中计算得到的奖励,如图5中反馈过程所示。某个节点的分数值反映了以该节点代表的子连接为核心构造的完整连接顺序的优劣。

(2-3-7)重复上述步骤(2-3-1)至(2-3-6),直到模拟次数到达步骤(2-3)中的模拟次数SetpSearchTimes为止,从而完成构建蒙特卡洛树。

(2-4)在步骤(2-3)构造的蒙特卡洛树上通过UCT算法选择当前节点的一个子节点,将这个选出的子节点设置为新的当前节点。

如图8所示,在第一层上经过120次(模拟次数=子节点树8×搜索参数15)模拟后,在(A C)子节点上共模拟15次得到总奖励为12,根据UCT算法计算具有最大的价值,则选择子连接(A C)作为第一步的结果。

(2-5)针对步骤(2-4)设置的新的当前节点,不断重复上述步骤(2-3)与步骤(2-4),直至蒙特卡洛树搜索进行到最后一层为止(即达到最终状态),此时将最后一次迭代过程选择出的节点的连接矩阵进行解析,解析得到的连接顺序即为最终的连接顺序。

如图8所示,第二层中节点(A C)有6个子节点故需模拟90次,该节点在第一步已经被模拟了15次,故共计经过105次模拟循环选出这个节点的子节点(D(A C)),进入到下一层。第三层同理,每一层都在构建最终的连接计划上迈出一步。当在某一层节点上其子节点对应的状态都为终止状态,此时这些状态都代表完整的连接顺序,在该层上选择的结果就对应了蒙特卡洛树搜索给出的最终连接顺序结果。

(3)输出最终的连接顺序,并将该最终的连接顺序输入数据库执行。

优选地,本技术的方法还可以包括在步骤(1)之后、步骤(2)之前,将查询语句的连接矩阵和谓词向量输入自适应决策网络(如图9所示),并根据输出结果判断是否使用现有的数据库查询优化器处理该查询语句,如果是则过程结束,否则进入步骤(2)。

具体而言,该自适应决策网络是采用以下过程进行训练的:

(S1)将多个查询语句通过本技术中的连接顺序优化器以及原始的数据库查询优化器进行优化,并对比其执行效果,将原始数据库查询优化器表现更好的查询语句打上标签“0”,将本技术中优化器表现更好的查询语句打上标签“1”;

(S2)将自适应决策网络设计为四层全连接的神经网络,每层均设计为线性层,其中中间三层隐藏层选择ReLU作为激活函数,最后一层输出层选用Sigmod函数作为激活函数,选用CrossEntropyLoss作为损失函数,为了防止训练模型时出现过拟合的现象在网络中加入了Dropout层;

(S3)将步骤(1)中的查询语句编码以及步骤(S1)中的标签按照7:3的比例划分为训练集和测试集,将训练集输入自适应决策网络进行训练;

(S4)使用反向传播算法对神经网络中每层的权重参数和偏置参数进行更新和优化,以得到更新后的神经网络;

(S5)对步骤(S4)更新后的神经网络进行迭代训练,直到该神经网络的损失函数达到最小为止;

(S6)使用步骤(S3)得到的数据集中的测试集对迭代训练后的神经网络进行迭代验证,直到得到的分类精度达到最优为止,从而得到训练好的自适应决策网络。

与现有技术相比,本技术所构思的以上技术方案能够取得下列有益效果:蒙特卡洛树搜索的使用有助于在解空间极大的连接顺序选择问题中通过少量步骤选择一个较优的连接顺序,连接顺序价值网络的使用有助于减少最终查询语句的执行时间。经实验证明,本技术的实施例可取得明显优于数据库原始查询优化器的效果。

本领域的技术人员容易理解,以上所述仅为本技术的较佳实施例而已,并不用以限制本技术,凡在本技术的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本技术的保护范围之内。

相关主题
文本预览
相关文档 最新文档