掌桥专利:专业的专利平台
掌桥专利
首页

基于机器学习的SQL查询选择度预估方法

文献发布时间:2023-06-19 09:57:26


基于机器学习的SQL查询选择度预估方法

技术领域

本发明涉及数据库技术领域,尤其涉及一种基于机器学习的SQL查询选择度预估方法。

背景技术

近几十年来,查询优化领域一直是热点研究方向。而查询优化使用选择度预估去区分一个查询执行计划的好坏,而执行计划则直接影响了查询的执行效率。目前大多数主流数据库都采用了直方图和采样结合的方法去对选择度进行预估,但是使用有限的信息对去进行预估会带来大量的错误。尽管目前主流数据库已经支持了有限多列的统计,但是这些信息依然不足以支撑对于大量表属性之间关联度的预估。

目前大量的研究已经表明,对于查询执行过程的监测可以精准地预估谓词选择度,这种方法可以用来加强未来的选择度预估。然而,目前的数据库系统没有完全地使用好这个机会。早在20年前,就有学者使用神经网络的方法来预估UDF谓词。近年来,随着机器学习方法的再次兴起和突破发展,人工智能方法融合数据库领域的优化是一种新兴的研究趋势。其中,结合机器学习方法,实现快速精准的选择度预估势必带来查询优化领域新的技术革新。

查询优化依赖于对查询谓词的选择度预估,从而产生一个好的查询执行计划。当一个查询包含了多个谓词,或者join操作,目前大多数的选择器使用了很多假设,比如谓词之间相互独立。尽管这类方法可以快速且使用较小内存对选择度进行预估,但这类方法经常会出现选择度预估错误的情况,导致了慢查询和无法预测的性能表现。使用直方图加采样的方法往往面临着很对问题,比如没有足够多有质量的样本,或者没有合适的索引结构去支持快速地采样,而这时候这类方法往往回退到用预先设定好的方法去预估选择度,比如使用谓词中选择度最低的谓词作为预估选择度,这种方法明显有很大的局限性,同时随着表属性增多,属性之间关联度的提高,谓词数量的增加等等都会让直方图和采样的方法选择度预测效果受到极大的制约。

在查询优化代价预估算法中,当前主流选择度预估的方法,不管是直方图统计,还是采样统计,或者是用机器学习模型预估选择度,所有的方法总结在一起就是用一个准确的模型快速的针对相应查询,获取选择度的预估。换言之,输入是与选择度相关的关键因素,经过计算模型,得到预估的选择度。整个流程,关键环节是输入的选取和模型的构建,而之后进一步考虑的是模型所占用的存储空间大小和选择度预估的速度。

随着机器学习算法的发展推广,对于数据库性能优化也带来了各种启发。针对选择度预估过程中的问题,都可以在机器学习模型中得到很好的解决。整个选择度预估模型可以被当作监督型学习模型,输入是查询转化的特征,输出是预估的选择度。使用这种方法,可以完美解决无合适索引结构去加快采样的问题,同时也将表属性之间的关联度考虑了进去。在当下情况,使用机器学习算法并不需要对实际真实的选择度达到完美的精准预测,只需要比现有的不准确预估方法更准即可。机器学习模型的输出的选择度预估值将可以直接被现有的完善的代价预估模型所使用,同时不会影响数据库的实际结构。

在SQL(结构化查询语言Structured Query Language)查询执行计划优化的过程中,主流数据库基本都是基于代价的估计(CBO)算法来选择最终执行计划,而准确的选择度预估可以给该解析过程提供可靠的数据来支撑算法,比如在合并连接(mergejoin)时决定驱动表。同时在索引选择的过程中,准确的选择度可以给索引的建立提供收益预估(当索引结构是B树时,在选择度低的查询中索引能带来更高的提升)。

发明内容

针对现有技术的不足,本发明提供一种基于机器学习的SQL查询选择度预估方法;

为解决上述技术问题,本发明所采取的技术方案是:

一种基于机器学习的SQL查询选择度预估方法,包括以下步骤:

步骤1:采集数据库实时的SQL查询信息,并记录与之对应的真实选择度,制作初始数据集;

所述SQL查询信息包括条件谓词的属性、操作符、常数、查询语句中的表名、join连接字段,数据库统计的表行数、唯一值个数;

步骤2:选择步骤1中SQL查询信息的编码方法,利用该编码方法,将步骤1中的初始数据集中的SQL查询信息转化为向量形式,得到SQL查询信息向量和数据库统计信息向量作为机器学习模型的输入;

步骤3:定义SQL查询q,条件谓词包含的属性集合A

设SQL查询q的真实选择度为acl(q),则集合S={(q

步骤4:对于一个给定的集合S中查询q,选择机器学习模型,输出查询q的预估选择度est(q),使est(q)最接近对应的acl(q),将步骤2中计算所得的SQL查询信息向量和数据库统计信息向量作为输入,经过回归模型M对向量进行特征降维,并最终通过回归模型N的输出得到对SQL查询的选择度预估值。

步骤5:持续监控数据库查询优化器获取的信息和数据库统计信息对于SQL查询的实际选择度反馈,并重复步骤1-4训练回归模型,最终达到回归模型的稳定,以获得对SQL查询的选择度预估。

采用上述技术方案所产生的有益效果在于:

本发明提出了一种基于机器学习的SQL查询选择度预估方法,该预估值可以用于给查询优化过程中提供可靠的数据支撑,让基于代价的估计预估(CBO)算法来确定更为准确的最终的最优执行计划,比如在合并连接(mergejoin)时确定驱动表。同时在索引选择的过程中,准确的选择度可以给索引的建立提供收益预估。

附图说明

图1为本发明实施例核心回归预估模型框架图;

图2为本发明实施例整体方法框架图;

图3为本发明实施例特征向量编码示意图;

图4为本发明实施例查询选择度预估方法框架图;

图5为本发明实施例查询选择度预估方法流程图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

本发明提供一种基于机器学习的SQL查询选择度预估方法,设计了一种将SQL查询转换为机器学习模型输入特征,同时针对该输入特征设计出机器学习回归模型的结构,精确快速地对选择度进行预估。核心回归模型如图1所示。从而达到整体数据库查询优化的效果,框架如图2所示;

基于以上框架,本发明从查询转换成特征出发,先将查询中影响选择度的因素转换成机器学习回归模型能接受的输入,然后再将查询语句级别的特征,结合数据库中能直接获取到的特征,比如列唯一值个数等信息转换为和查询语句级别特征同一量级的特征,共同作为输入特征,之后经过机器学习的回归模型处理,最终得到预估选择度。在完成能对选择度做到精准预估的同时,进一步考虑优化模型的存储占用空间,和预估的速度。

本实施例中运行环境:

CPU:Inter(R)Core(TM)I7-8700 CPU@3.20GHz

GPU:RTX 2070

内存:16.00GB

操作系统平台:Ubuntu 16.04 LTS

开发语言:C++、Python

深度学习开发框架:Pytorch

开发工具:VIM、Pycharm、CLion

查询数据集:IMDb等属性相关性高的数据集

一种基于机器学习的SQL查询选择度预估方法,如图5所示,包括以下步骤:

步骤1:采集数据库实时的SQL查询信息,并记录与之对应的真实选择度,制作初始数据集;

所述SQL查询信息包括条件谓词的属性、操作符、常数、查询语句中的表名、join连接字段,数据库统计的表行数、唯一值个数;

步骤2:选择步骤1中SQL查询信息的编码方法,比如条件谓词属性名、操作符、常数值(需要归一化处理)、join连接字段、表行数、唯一值个数可以用当下流行的one-hot编码,其中针对字符串类型的属性列还需要采取可能的hash编码,将字符串映射成后续机器学习模型能接受的输入向量。利用该编码方法,将步骤1中的初始数据集中的SQL查询信息转化为向量形式,得到SQL查询信息向量和数据库统计信息向量作为机器学习模型的输入,如图3所示;

步骤3:定义SQL查询q,条件谓词包含的属性集合A

设SQL查询q的真实选择度为acl(q),则集合S={(q

步骤4:对于一个给定的集合S中查询q,选择机器学习模型回归模型M,输出查询q的预估选择度est(q),使est(q)最接近对应的acl(q)。本专利选取的回归模型为DNN和SVR,其算法流程图如图4所示,将步骤2中计算所得的SQL查询信息向量和数据库统计信息向量作为输入,经过回归模型M对向量进行特征降维,防止SQL查询信息转换的输入向量在高维空间处理时数据维度过多而过拟合,同时选择的回归模型应具有很高的鲁棒性和容错能力(比如DNN),能够很好地解决非线性关系,继而将回归模型M输出作为回归模型N(比如SVR)的输入,并最终通过回归模型N的输出得到对SQL查询的选择度预估值。

步骤5:持续监控数据库查询优化器获取的信息,如数据库统计表信息、唯一值个数,SQL查询信息等和数据库统计信息对于SQL查询的实际选择度反馈,并重复步骤1-4训练回归模型,最终达到回归模型的稳定,以获得对SQL查询的选择度预估。

本实施例中构建具体的DNN神经网络,该神经网络输入层的神经元根据输入特征向量而定,隐藏层为2,每层神经元节点数量根据输入层神经元节点数量而定,输出层神经元节点数量根据SVR模型而定。具体参数根据数据集而定,为常规参数。

构建具体的SVR模型,kernel参数使用‘rbf’,因为训练结果只需要相对大小精确,比如假设act(q1)=200,act(q2)=300,那么预测值est(q1)>est(q2)即可,因此采用如下误差公式,

误差项的惩罚参数C可以使用pow(10,n),其中n取值为[-5,inf),C越大,对误分类惩罚越大,趋向于对训练集全分对的情况,这样会出现训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,容错能力增强,泛化能力较强。迭代次数根据数据集而定,其余参数采用默认参数即可。

以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开的实施例中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开的实施例中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

相关技术
  • 基于机器学习的SQL查询选择度预估方法
  • 基于深度学习算法的高考分数预估及志愿选择方法、系统
技术分类

06120112359530