一种SQL执行计划的确定方法及装置与流程

文档序号:11432234阅读:193来源:国知局
一种SQL执行计划的确定方法及装置与流程

本发明涉及计算机技术领域,尤其涉及一种sql执行计划的确定方法及装置。



背景技术:

执行一条sql(structuredquerylanguage,结构化查询语言)语句通常需要三个阶段,即词法和语法分析阶段、sql执行计划确定阶段和sql执行计划执行阶段。

具体的,一条sql语句表示用户想要得到的结果,例如,查询所有住在北京市的客户,但sql语句并不会告知服务器如何去执行,因此,当服务器收到一条query(查询)命令后,经过词法和语法分析阶段确定这条query命令没有语法错误后,会形成一个parsetree(解析树),服务器搜索自身数据库内相关的已统计的统计信息,结合parsetree,确定该sql语句优选的sql执行计划。其中,sql执行计划可以以plantree(计划树)的形式得到,一个plantree上的各个节点由若干基本操作组成,例如,遍历多张表,执行一个嵌套连接或hash(哈希)连接等基本操作,最终,由服务器按照得到的plantree执行该sql执行计划,输出的结果即为该sql语句表示的结果。

可以看出,sql语句的执行效率高低在一定程度上取决于能否确定高效的sql执行计划,而现有技术中,数据库内的统计信息通常是基于采样值得到的特征值。例如,一个关系表中的元组数(reltuples)、一个关系表中一个字段内唯一非空数值的数目(distinct值)等特征值,这些采样得到的特征值通常存在一定的误差,而且在时间上具有滞后性,因此,服务器基于上述统计信息确定出的sql执行计划通常不是最优的执行计划。



技术实现要素:

本发明的实施例提供了一种sql执行计划的确定方法及装置,可以优化sql执行计划的确定,提高sql执行计划的执行效率。

为达到上述目的,本发明的实施例采用如下技术方案:

本发明实施例的第一方面提供了一种结构化查询语言sql执行计划的确定方法,该sql执行计划对应至少一个关系表,在第n次迭代中,包括:获取在第n-1次迭代中对该至少一个关系表执行第一计划树后产生的第一迭代参数,其中n为大于1的自然数;根据该第一迭代参数建立第二计划树;当该第二计划树与该第一计划树的差异不大于第一阈值时,将该第一计划树或该第二计划树确定为该sql执行计划。

结合第一方面,在第一方面的第一种可能的实现方式中,该第一阈值为0,对应的,该当该第二计划树与该第一计划树的差异不大于第一阈值时,将该第一计划树或该第二计划树确定为该sql执行计划,包括,当该第二计划树与该第一计划树相同时,将该第一计划树或该第二计划树确定为该sql执行计划。

本发明实施例所取得的有益效果是,本发明实施例通过迭代执行的方式获得优化的sql执行计划。在每一次迭代过程中,需要比较上一次迭代过程中建立的计划树(本发明实施例中统一称为第一计划树)与本次迭代过程中建立的计划树(本发明实施例中统一称为第二计划树),并且,该第二计划树是以上一次迭代过程中更新后的迭代参数(本发明实施例中统一称为第一迭代参数)为依据建立的,也就是说,每次迭代过程中建立的第二计划树,都是基于执行第一计划树后更新的第一迭代参数建立的,那么,经过多次迭代后,最终得到的计划树并不是依赖于数据库内已统计的估算迭代参数,而是以迭代过程中每一次实际执行计划树时记录的迭代参数为依据,建立计划树,从而得到sql语句较为准确的sql执行计划,提高sql执行计划的执行效率。

结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,该第一迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第一方面或第一方面的第一至二种可能的实现方式,在第一方面 的第三种可能的实现方式中,该sql执行计划对应至少两个关系表时,该第一迭代参数还包括该至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。

结合第一方面或第一方面的第一至三种可能的实现方式,在第一方面的第四种可能的实现方式中,在该将该第一计划树或该第二计划树确定为该sql执行计划之后,还包括:记录该sql执行计划为确定状态。

结合第一方面或第一方面的第一或四任一种可能的实现方式,在第一方面的第五种可能的实现方式中,在该根据该第一迭代参数建立第二计划树之后,还包括:执行该第二计划树;记录执行该第二计划树时产生的第二迭代参数。

本发明实施例所取得的有益效果是,由于该更新后的第一迭代参数是实际执行第二计划树时得到的,因此,使用该更新后的第一迭代参数建立的第二计划树更为准确。

结合第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,该第二迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第一方面的第五或六种可能的实现方式,在第一方面的第七种可能的实现方式中,该sql执行计划对应至少两个关系表时,该第二迭代参数还包括该至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。

结合第一方面的第五至七任一种可能的实现方式,在第一方面的第八种可能的实现方式中,该方法还包括:当该第二计划树与该第一计划树的差异大于第一阈值时,根据该第二迭代参数更新该第一迭代参数;将该第n次迭代中的第二计划树作为第n+1次迭代中的第一计划树。

结合第一方面的第八种可能的实现方式,在第一方面的第九种可能的实现方式中,在该根据该第二迭代参数更新该第一迭代参数之前,还包括:当该第二迭代参数与该第一迭代参数相同时,根据该第一迭代参数建立与该第一计划树不相同的第二计划树。

结合第一方面的第九种可能的实现方式,在第一方面的第十种可能的实现方式中,在该根据该第一迭代参数建立与该第一计划树不相同的第二 计划树之后,还包括:记录执行该第二计划树的执行时间;当该n大于第二阈值时,将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划。

结合第一方面的第十种可能的实现方式,在第一方面的第十一种可能的实现方式中,在该将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划之后,还包括:记录该sql执行计划为确定状态。

结合第一方面的第八种可能的实现方式,在第一方面的第十二种可能的实现方式中,在该根据该第二迭代参数更新该第一迭代参数之前,还包括:记录执行该第二计划树的执行时间;当该n大于第三阈值时,将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划。

结合第一方面的第十二种可能的实现方式,在第一方面的第十三种可能的实现方式中,在该将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划之后,还包括:记录该sql执行计划为确定状态。

本发明实施例所取得的有益效果是,对于那些在迭代过程中已经发生变异的sql执行计划,有可能永远都无法迭代出与上一次建立的计划树相同的计划树,因此,为了避免无限制的死循环,可以认为当迭代次数n大于阈值后,在已经历的n次迭代过程中,执行时间最短的第二计划树即为最优的计划树,进而将该第二计划树作为该sql执行计划。

结合第一方面的第七至十三任一种可能的实现方式,在第一方面的第十四种可能的实现方式中,该根据该第二迭代参数更新该第一迭代参数,包括:将该第二迭代参数和该第一迭代参数取并集,将该并集的结果作为该第一迭代参数。

结合第一方面或第一方面的第二至十四任一种可能的实现方式,在第一方面的第十五种可能的实现方式中,该方法还包括:在初始迭代执行时,根据预先存储的估算迭代参数建立初始计划树;执行该初始计划树得到初始迭代参数;根据该初始迭代参数更新该估算迭代参数,得到该第一迭代参数。

结合第一方面的第十五种可能的实现方式,在第一方面的第十六种可能的实现方式中,该估算迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第一方面的第十五种或第十六种可能的实现方式,在第一方面的第十七种可能的实现方式中,该初始迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第一方面的第十五至十七任一种可能的实现方式,在第一方面的第十八种可能的实现方式中,该sql执行计划对应至少两个关系表时,该初始迭代参数还包括该至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。

结合第一方面的第十五至十八任一种可能的实现方式,在第一方面的第十九种可能的实现方式中,该根据该初始迭代参数更新该估算迭代参数,得到该第一迭代参数,包括:将该初始迭代参数和该估算迭代参数取并集,将该并集的结果作为该第一迭代参数。

结合第一方面的第十五至十九任一种可能的实现方式,在第一方面的第二十种可能的实现方式中,在该初始迭代执行之前,还包括:查询该sql执行计划的状态是否为该确定状态;当该sql执行计划的状态为该确定状态时,执行该sql执行计划。

本发明实施例所取得的有益效果是,当服务器已经存储了经过优化后的sql执行计划后,当需要再次执行时,不需要重复进行sql执行计划的确定,提高了服务器的执行效率。

结合第一方面或第一方面的第二到第二十任一种可能的实现方式,在第一方面的第二十一种可能的实现方式中,该sql执行计划还包括过滤条件,当sql执行计划还包括过滤条件时,该第一迭代参数包括该sql执行计划对应的任意一个或多个关系表内符合该过滤条件的元组数。

结合第一方面或第一方面的第二到第二十一任一种可能的实现方式,在第一方面的第二十二种可能的实现方式中,该第一迭代参数还包括:该sql执行计划对应的任一关系表中一个字段内唯一非空数值的数目,和/或,该关系表中出现次数超过第二阈值的列的集合(mcv)。

本发明实施例所取得的有益效果是,本发明实施例中得到的第二计划树并不是依赖于数据库内已统计的估算迭代参数,而是以迭代过程中更新后的第一迭代参数为依据建立的,进而当第二计划树与第一计划树相同时,将第二计划树作为sql执行计划,可较为准确的确定出sql执行计 划,提高sql执行计划的执行效率。

本发明实施例的第二方面提供了一种结构化查询语言sql执行计划的确定装置,该sql执行计划对应至少一个关系表,所述装置包括存储器和耦合于该存储器的处理器,在第n次迭代中,包括:该处理器用于:获取在第n-1次迭代中对该至少一个关系表执行第一计划树后产生的第一迭代参数,其中n为大于1的自然数;根据该第一迭代参数建立第二计划树;当该第二计划树与该第一计划树的差异不大于第一阈值时,将该第一计划树或该第二计划树确定为该sql执行计划。

结合第二方面,在第二方面的第一种可能的实现方式中,该第一阈值为0,对应的,该处理器用于当该第二计划树与该第一计划树相同时,将该第一计划树或该第二计划树确定为该sql执行计划。

结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,该第一迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第二方面或第二方面的第一至二种可能的实现方式,在第二方面的第三种可能的实现方式中,该sql执行计划对应至少两个关系表时,该第一迭代参数还包括该至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。

结合第二方面或第二方面的第一至三种可能的实现方式,在第二方面的第四种可能的实现方式中,在该将该第一计划树或该第二计划树确定为该sql执行计划之后,该处理器还用于:记录该sql执行计划为确定状态。

结合第二方面或第二方面的第一或四任一种可能的实现方式,在第二方面的第五种可能的实现方式中,在该根据该第一迭代参数建立第二计划树之后,该处理器还用于:执行该第二计划树;记录执行该第二计划树时产生的第二迭代参数。

结合第二方面的第五种可能的实现方式,在第二方面的第六种可能的实现方式中,该第二迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第二方面的第五或六种可能的实现方式,在第二方面的第七种可能的实现方式中,该sql执行计划对应至少两个关系表时,该第二迭代参数还包括该至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。

结合第二方面的第五至七任一种可能的实现方式,在第二方面的第八种可能的实现方式中,该处理器还用于:当该第二计划树与该第一计划树的差异大于第一阈值时,根据该第二迭代参数更新该第一迭代参数;将该第n次迭代中的第二计划树作为第n+1次迭代中的第一计划树。

结合第二方面的第八种可能的实现方式,在第二方面的第九种可能的实现方式中,在该根据该第二迭代参数更新该第一迭代参数之前,该处理器还用于:当该第二迭代参数与该第一迭代参数相同时,根据该第一迭代参数建立与该第一计划树不相同的第二计划树。

结合第二方面的第九种可能的实现方式,在第二方面的第十种可能的实现方式中,在该根据该第一迭代参数建立与该第一计划树不相同的第二计划树之后,该处理器还用于:记录执行该第二计划树的执行时间;当该n大于第二阈值时,将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划。

结合第二方面的第十种可能的实现方式,在第二方面的第十一种可能的实现方式中,在该将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划之后,该处理器还用于:记录该sql执行计划为确定状态。

结合第二方面的第八种可能的实现方式,在第二方面的第十二种可能的实现方式中,在该根据该第二迭代参数更新该第一迭代参数之前,该处理器还用于:记录执行该第二计划树的执行时间;当该n大于第三阈值时,将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划。

结合第二方面的第十二种可能的实现方式,在第二方面的第十三种可能的实现方式中,在该将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划之后,该处理器还用于:记录该sql执行计划为确定状态。

结合第二方面的第七至十三任一种可能的实现方式,在第二方面的第 十四种可能的实现方式中,该处理器具体用于:将该第二迭代参数和该第一迭代参数取并集,将该并集的结果作为该第一迭代参数。

结合第二方面或第二方面的第二至十四任一种可能的实现方式,在第二方面的第十五种可能的实现方式中,该处理器还用于:在初始迭代执行时,根据预先存储的估算迭代参数建立初始计划树;执行该初始计划树得到初始迭代参数;根据该初始迭代参数更新该估算迭代参数,得到该第一迭代参数。

结合第二方面的第十五种可能的实现方式,在第二方面的第十六种可能的实现方式中,该估算迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第二方面的第十五种或第十六种可能的实现方式,在第二方面的第十七种可能的实现方式中,该初始迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第二方面的第十五至十七任一种可能的实现方式,在第二方面的第十八种可能的实现方式中,该sql执行计划对应至少两个关系表时,该初始迭代参数还包括该至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。

结合第二方面的第十五至十八任一种可能的实现方式,在第二方面的第十九种可能的实现方式中,该处理器具体用于:将该初始迭代参数和该估算迭代参数取并集,将该并集的结果作为该第一迭代参数。

结合第二方面的第十五至十九任一种可能的实现方式,在第二方面的第二十种可能的实现方式中,在该初始迭代执行之前,该处理器还用于:查询该sql执行计划的状态是否为该确定状态;当该sql执行计划的状态为该确定状态时,执行该sql执行计划。

结合第二方面或第二方面的第二到第二十任一种可能的实现方式,在第二方面的第二十一种可能的实现方式中,该sql执行计划还包括过滤条件,当sql执行计划还包括过滤条件时,该第一迭代参数包括该sql执行计划对应的任意一个或多个关系表内符合该过滤条件的元组数。

结合第二方面或第二方面的第二到第二十一任一种可能的实现方式,在第二方面的第二十二种可能的实现方式中,该第一迭代参数还包括:该 sql执行计划对应的任一关系表中一个字段内唯一非空数值的数目,和/或,该关系表中出现次数超过第二阈值的列的集合(mcv)。

本发明实施例的第三方面提供了一种结构化查询语言sql执行计划的确定装置,该sql执行计划对应至少一个关系表,所述装置包括获取单元、建立单元和确定单元,在第n次迭代中,包括:该获取单元用于获取在第n-1次迭代中对该至少一个关系表执行第一计划树后产生的第一迭代参数,其中n为大于1的自然数;该建立单元用于根据该第一迭代参数建立第二计划树;该确定单元用于当该第二计划树与该第一计划树的差异不大于第一阈值时,将该第一计划树或该第二计划树确定为该sql执行计划。

结合第三方面,在第三方面的第一种可能的实现方式中,该第一阈值为0,对应的,该确定单元具体用于当该第二计划树与该第一计划树相同时,将该第一计划树或该第二计划树确定为该sql执行计划。

结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,该第一迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第三方面或第三方面的第一至二种可能的实现方式,在第三方面的第三种可能的实现方式中,该sql执行计划对应至少两个关系表时,该第一迭代参数还包括该至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。

结合第三方面或第三方面的第一至三种可能的实现方式,在第三方面的第四种可能的实现方式中,在该将该第一计划树或该第二计划树确定为该sql执行计划之后,该装置还包括记录单元,用于记录该sql执行计划为确定状态。

结合第三方面或第三方面的第一或四任一种可能的实现方式,在第三方面的第五种可能的实现方式中,在该根据该第一迭代参数建立第二计划树之后,该装置还包括执行单元,用于执行该第二计划树;该记录单元还用于记录执行该第二计划树时产生的第二迭代参数。

结合第三方面的第五种可能的实现方式,在第三方面的第六种可能的 实现方式中,该第二迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第三方面的第五或六种可能的实现方式,在第三方面的第七种可能的实现方式中,该sql执行计划对应至少两个关系表时,该第二迭代参数还包括该至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。

结合第三方面的第五至七任一种可能的实现方式,在第三方面的第八种可能的实现方式中,该装置还包括更新单元,用于当该第二计划树与该第一计划树的差异大于第一阈值时,根据该第二迭代参数更新该第一迭代参数;将该第n次迭代中的第二计划树作为第n+1次迭代中的第一计划树。

结合第三方面的第八种可能的实现方式,在第三方面的第九种可能的实现方式中,在该根据该第二迭代参数更新该第一迭代参数之前,该建立单元还用于:当该第二迭代参数与该第一迭代参数相同时,根据该第一迭代参数建立与该第一计划树不相同的第二计划树。

结合第三方面的第九种可能的实现方式,在第三方面的第十种可能的实现方式中,在该根据该第一迭代参数建立与该第一计划树不相同的第二计划树之后,该记录单元还用于记录执行该第二计划树的执行时间;该确定单元还用于当该n大于第二阈值时,将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划。

结合第三方面的第十种可能的实现方式,在第三方面的第十一种可能的实现方式中,在该将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划之后,该记录单元还用于:记录该sql执行计划为确定状态。

结合第三方面的第八种可能的实现方式,在第三方面的第十二种可能的实现方式中,在该根据该第二迭代参数更新该第一迭代参数之前,该记录单元还用于:记录执行该第二计划树的执行时间;该确定单元还用于当该n大于第三阈值时,将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划。

结合第三方面的第十二种可能的实现方式,在第三方面的第十三种可 能的实现方式中,在该将全部n次迭代中该执行时间最短的第二计划树作为该sql执行计划之后,该记录单元还用于:记录该sql执行计划为确定状态。

结合第三方面的第七至十三任一种可能的实现方式,在第三方面的第十四种可能的实现方式中,该更新单元具体用于:将该第二迭代参数和该第一迭代参数取并集,将该并集的结果作为该第一迭代参数。

结合第三方面或第三方面的第二至十四任一种可能的实现方式,在第三方面的第十五种可能的实现方式中,该建立单元还用于在初始迭代执行时,根据预先存储的估算迭代参数建立初始计划树;该执行单元还用于执行该初始计划树得到初始迭代参数;该更新单元还用于根据该初始迭代参数更新该估算迭代参数,得到该第一迭代参数。

结合第三方面的第十五种可能的实现方式,在第三方面的第十六种可能的实现方式中,该估算迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第三方面的第十五种或第十六种可能的实现方式,在第三方面的第十七种可能的实现方式中,该初始迭代参数包括该sql执行计划对应的任意一个或多个关系表的元组数。

结合第三方面的第十五至十七任一种可能的实现方式,在第三方面的第十八种可能的实现方式中,该sql执行计划对应至少两个关系表时,该初始迭代参数还包括该至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。

结合第三方面的第十五至十八任一种可能的实现方式,在第三方面的第十九种可能的实现方式中,该更新单元具体用于:将该初始迭代参数和该估算迭代参数取并集,将该并集的结果作为该第一迭代参数。

结合第三方面的第十五至十九任一种可能的实现方式,在第三方面的第二十种可能的实现方式中,在该初始迭代执行之前,该装置还包括查询单元,用于查询该sql执行计划的状态是否为该确定状态;该确定单元还用于当该sql执行计划的状态为该确定状态时,执行该sql执行计划。

结合第三方面或第三方面的第二到第二十任一种可能的实现方式,在第三方面的第二十一种可能的实现方式中,该sql执行计划还包括过滤 条件,当sql执行计划还包括过滤条件时,该第一迭代参数包括该sql执行计划对应的任意一个或多个关系表内符合该过滤条件的元组数。

结合第三方面或第三方面的第二到第二十一任一种可能的实现方式,在第三方面的第二十二种可能的实现方式中,该第一迭代参数还包括:该sql执行计划对应的任一关系表中一个字段内唯一非空数值的数目,和/或,该关系表中出现次数超过第二阈值的列的集合(mcv)。

第四方面,提供了一种结构化查询语言(sql)执行计划的确定装置,其特征在于,包括:处理器、存储器、总线和通信接口;该存储器用于存储计算机执行指令,该处理器与该存储器通过该总线连接,当该确定装置运行时,该处理器执行该存储器存储的该计算机执行指令,以使该确定装置执行如本发明实施例第一方面,第一方面的第一到第二十二中任意一种可能的实现方式所描述的该sql执行计划的确定方法。

第五方面,提供了一种计算机存储介质,用于储存为第四方面所描述的sql执行计划的确定装置所用的计算机软件指令,其包含用于执行第四方面的sql执行计划的确定装置所设计的程序。

本发明中,sql执行计划的确定装置的名字对设备本身不构成限定,在实际实现中,这些设备可以以其他名称出现。只要各个设备的功能和本发明类似,属于本发明权利要求及其等同技术的范围之内。

另外,第二方面至第五方面中任一种设计方式所带来的技术效果可参见第一方面中不同可能的实现方式所带来的技术效果,此处不再赘述。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。

图1为本发明实施例提供的一种sql执行计划的确定方法的流程示意图;

图2为本发明实施例提供的另一种sql执行计划的确定方法的流程示意图;

图3为本发明实施例提供的另一种sql执行计划的确定方法的流程示意图;

图4为本发明实施例提供的一种sql执行计划的确定装置的结构示意图;

图5为本发明实施例提供的另一种sql执行计划的确定装置的结构示意图;

图6为本发明实施例提供的另一种sql执行计划的确定装置的结构示意图;

图7为本发明实施例提供的另一种sql执行计划的确定装置的结构示意图;

图8为本发明实施例提供的一种计算机设备的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。

另外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。

本发明实施例提供的一种sql执行计划的确定方法,可具体应用于sql执行计划确定阶段,本方案的核心原理在于:使用迭代的方法,通过每一次实际执行计划树时产生的迭代参数建立计划树,以求取最优的sql执行计划。

具体的,在现有技术中,服务器接收sql语句,确定sql执行计划时,通常是根据自身数据库内预先存储的估算迭代参数(即利用采样或者估算方法得到的特征值)直接建立计划树,并将该计划树作为sql执行计划,但由于估算迭代参数可能并不准确,进而导致确定出的sql执行计划不够准确。

因此,在本发明实施例提供的sql执行计划的确定方法中,可利用迭代的方法,循环建立并执行计划树,并将每次实际执行计划树的过程中 产生的迭代参数记录下来,以更新上一次迭代过程中的利用采样或估算方法得到的特征值,进而,在下一次迭代过程中使用该更新后的迭代参数重新建立计划树,直至相邻两次迭代过程中建立的计划树相同,则将该计划树作为sql执行计划。

在每一次迭代过程中,需要比较上一次迭代过程中建立的计划树(本发明实施例中统一称为第一计划树)与本次迭代过程中建立的计划树(本发明实施例中统一称为第二计划树),并且,该第二计划树是以上一次迭代过程中更新后的迭代参数(本发明实施例中统一称为第一迭代参数)为依据建立的,也就是说,每次迭代过程中建立的第二计划树,都是基于执行第一计划树后更新的第一迭代参数建立的,那么,经过多次迭代后,最终得到的计划树并不是依赖于数据库内已统计的估算迭代参数,而是以迭代过程中每一次实际执行计划树时记录的迭代参数为依据,建立计划树,从而得到较为准确的sql执行计划,提高sql执行计划的执行效率。

为详细阐述本发明实施例提供的一种sql执行计划的确定方法,以下对本发明实施例中可能涉及的一些专业词汇进行解释。

首先,为清楚地阐述本发明实施例中涉及的迭代过程,不妨设上一次迭代为第n-1次迭代,本次迭代为第n次迭代,则第n-1次迭代时建立的计划树为第一计划树,将第n次迭代时建立的计划树为第二计划树,其中,n为大于1的自然数。

所述sql执行计划对应数据库中的至少一个关系表,不妨设sql执行计划对应m个关系表,其中m为大于1的自然数。

不妨设第一迭代参数具体可以包括第一特征值和/或第二特征值,即第一特征值和第二特征值中的至少一个。第一特征值用于指示sql执行计划对应的任意一个或多个关系表的元组数,第二特征值用于指示所述sql执行计划对应至少两个关系表时,所述至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。本发明实施例中用n(i)表示第一特征值,用n(i,j,k)表示第二特征值。其中,n(i)为第i个关系表的元组数,n(i,j,k)为按照第i个关系表、第j个关系表以及第k个关系表的顺序进行连接操作(即join)后得到的结果集中元组的个数。

进一步地,服务器执行sql执行计划还可以包括确定sql执行计划 的过滤条件,例如,该过滤条件为要求关系表中所有身高大于180厘米的男生,那么,此时,该第一特征值可进一步用于指示第i个关系表内符合该过滤条件的元组数。

类似的,本发明实施例中涉及的第二迭代参数也具体包括第一特征值和/或第二特征值,不同的是,第一迭代参数是指在第n-1次迭代时更新的迭代参数,而第二迭代参数是指在第n次迭代时执行第二计划树时产生的迭代参数,第一迭代参数的更新方式将在本发明实施例中进行具体的描述。

进一步地,特征值还可以包括:关系表中一个字段内唯一非空数值的数目(即distinct值),和/或,关系表中出现次数超过第二阈值的列的集合(即mcv,mostcommonvalue)。

变异,在本发明实施例中可以用variation来表示,具体的,若第n次迭代时建立的第二计划树,与第n-1次迭代时建立的第一计划树不相同,但是,执行该第二计划树时产生的第二迭代参数与执行该第一计划树时产生的第一迭代参数相同,则认为当前的sql执行计划需要发生变异,才能进一步获取更优的sql执行计划。

结合附图1所示,发明实施例提供一种sql执行计划的确定方法,由于迭代过程中第2至最后一次迭代过程均相同,因此,此处以第n次迭代过程为例进行示例性的说明,该方法包括:

101、获取执行第一计划树产生的第一迭代参数。

由于每一次迭代过程中建立的计划树以及在当次迭代过程结束时生成的第一迭代参数均可被保存,因此,在第n次迭代过程中,可获取到第n-1次迭代时建立的第一计划树以及上述第一迭代参数。

102、根据所述第一迭代参数建立第二计划树。

例如,n=2时,可根据第1次迭代完成时获得的第一迭代参数建立第二计划树。

103、执行该第二计划树,并记录执行该第二计划树时产生的第二迭代参数。

具体的,在步骤103中,执行步骤102中建立的第二计划树,并记录执行该第二计划树时产生的第二迭代参数。

类似的,该第二迭代参数也包括n(i)和/或n(i,j,k)。

104、比较第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树是否相同。

需要说明的是,当n=2时,则上述第n-1次迭代即第1次迭代时建立的初始计划树。

应理解,示例性的,步骤104比较第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树是否相同。在一些实施例中,步骤104还包括比较第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树是否不大于阈值,阈值可以是预先设定或者训练得到的固定值,也可以是在系统中不断更新的动态值,不做限定。示例性的,可以比较第二计划树和第一计划树的执行步骤的差异步骤是否不大于1个步骤,或者可以比较第二计划树和第一计划树的执行步骤的差异步骤是否不大于99%等,不做限定。后续步骤中涉及比较第一计划树和第二计划树是否相同或者类似表述时和步骤104一致,不再赘述。一般的,当阈值不为0时,得到的sql执行计划是次优的执行计划,但是应理解次优执行计划的确定过程比起最优执行计划的确定过程节省运算时间和资源,在一些实施例中,比如对运算时间和资源要求较高的应用场景中,会采用次优执行计划。

105、若第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树不相同,则使用该第二迭代参数更新该第一迭代参数。

具体的,可以将第二迭代参数中,与第一迭代参数不相同的第一特征值和/或第二特征值添加至该第一迭代参数,即将第一迭代参数和第二迭代参数取并集,得到更新后的第一迭代参数,以便于在n+1次迭代时,使用该更新后的第一迭代参数重新建立第二计划树,由于该更新后的第一迭代参数是实际执行第二计划树时得到的第一特征值和/或第二特征值,因此,使用该更新后的第一迭代参数建立的第二计划树更为准确。

106、使用第二计划树更新第一计划树,并设置迭代次数加1。

此时,本次迭代过程中生成的第二计划树便作为下次迭代过程中的第一计划树,直至某次迭代过程中建立第二计划树与上一次迭代过程中建立的第一计划树相同为止。

并且,可设置迭代次数加1,以便于重复执行上述步骤101-106。

107、若第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树相同,则将该第二计划树作为sql执行计划。

具体的,在步骤107中,当第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树相同时,说明经过n次迭代后,该第一迭代参数中已包含了所有的第一特征值和第二特征值,因此,此时根据第一迭代参数建立的第二计划树已经达到最优,则可以将该第二计划树作为sql执行计划。

此时,可保存该第二计划树与执行该第二计划树相关的sql语句之间的对应关系,当再次收到该sql语句时,服务器便可以直接从相应的存储单元中获取到该第二计划树,即sql执行计划。

在一些实施例中,和步骤104类似,步骤107还包括若第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树不大于某一阈值,则将该第二计划树或第一计划树作为sql执行计划。应理解,在该实施例中第一计划树和第二计划树均为次优计划树,可以任选其中之一作为sql执行计划。

应理解,在一些实施例中或者一些实施例的示例性迭代周期中,步骤103、步骤105、步骤106为可选步骤。

另外,可选的,在每一个迭代周期中,可以记录第二计划树的执行时间,当迭代次数超过预定的阈值时,即迭代算法在阈值时间内没有收敛的情况下,选择全部迭代周期中上述执行时间最短的第二计划树作为sql执行计划。

可选的,在将该第二计划树作为sql执行计划之后,在服务器中将该sql执行计划的状态设置为确定状态,即经过优化的该sql执行计划已经确定。在后续步骤中,当sql执行计划的状态为确定状态时,不需要再重复确定sql执行计划的过程,提高了服务器的执行效率。

进一步地,在图1所示的sql执行计划的确定方法的基础上,本发明实施例提供还一种sql执行计划的确定方法,如图2所示,包括:

201、查询所述sql执行计划的状态是否为确定状态。

具体的,sql语句中携带有sql执行计划对应的关系表的标识,例 如,接收到的sql语句为:selectcount(*)fromdba,即从标识为dba的关系表中查找dba关系表的行数。

由于服务器可能会在一段时间内反复多次执行同一条sql语句,因此,在第一次生成一条sql语句相关的sql执行计划时,可以保存该sql执行计划与该sql语句的对应关系,这样,当再次收到一条sql语句时,可以查询是否存储有与这条sql语句对应的sql执行计划,即所述sql执行计划的状态是否为确定状态。

示例性的,可以设置变量optimization,用来指示是否存储有与接收到的sql语句对应的sql执行计划。

此时,服务器可以查询与该sql语句对应的变量optimization是否为1,若optimization=1,则说明已经存储有与接收到的sql语句对应的sql执行计划,那么,服务器便可以直接从相应的存储单元中获取到该sql执行计划。

相反的,若optimization≠1,即,所述sql执行计划的状态是不确定状态,则说明未存储有与接收到的sql语句对应的sql执行计划,即第一次执行该sql语句,此时执行下述步骤202-213。

202、若所述sql执行计划为不确定状态,则对后续迭代过程中的变量进行初始化。

在步骤202中,若optimization≠1,此时,可以对迭代中的变量进行初始化,例如,设置迭代次数n等于1,设置optimization=0,设置variation(变异)=0。

203、在初始迭代执行时,根据预先存储的估算迭代参数建立初始计划树。

当步骤202中的初始化操作完成之后,开始第1次迭代过程,此时,可以根据统计信息中存储的估算迭代参数建立初始计划树。

由于第1次迭代时,还没有建立计划树,因此,还无法从执行计划树的过程中采集到实际的迭代参数,因此,此时刻沿用现有技术,即使用统计信息中存储的估算迭代参数建立初始计划树t0。

204、执行所述初始计划树,得到执行所述初始计划树时产生的初始迭代参数,使用所述初始迭代参数更新所述估算迭代参数。

与现有技术不同的是,在步骤204中,服务器可以执行步骤203中建立的初始计划树,并且,记录执行初始计划树时产生的初始迭代参数,即n(i)和/或n(i,j,k),这样,便可以使用执行初始计划树时产生的初始迭代参数,更新步骤203中的估算迭代参数。

示例性的,假设步骤201中的sql语句中携带有2个关系表的标识,即t1和t2。那么,步骤203中建立初始计划树的估算迭代参数具体包括:n(t1)和n(t2)、和n(t2,t1),而在步骤204中,执行初始计划树时产生的初始迭代参数可能包括n(t1)、n(t2)、和n(t1,t2),此时,可以将初始迭代参数中与估算迭代参数中不同的迭代参数更新到估算迭代参数中,即更新后的估算迭代参数为:n(t1)、n(t2)、n(t1,t2)和n(t2,t1),则将更新后的估算迭代参数作为上述第一迭代参数,以便于在后续n-1次迭代过程中使用更新后的第一迭代参数建立第二计划树。

进一步地,后续第2至最后一次迭代过程均可参见下述步骤205-213,具体的,此处以第n次迭代过程为例进行示例性的说明。

205、在第n次迭代时,获取在第n-1次迭代时建立的第一计划树。

由于每一次迭代过程中建立的计划树均可被保存,因此,在第n次迭代过程中,可获取到第n-1次迭代时建立的第一计划树。

206、判断sql执行计划是否需要变异。

也即第一迭代参数是否和第二迭代参数相同,如果相同,则需要变异,否则不需要变异。应理解此步骤中n>1,示例性的,此处以n=2为例进行说明,经过步骤203-204的第1次迭代过程,在第2次迭代时,首先可判断是否需要变异,即variation是否等于1。

若variation≠1,则执行步骤207,若variation=1,则执行步骤208。

207、若不需要变异,则根据第n-1次迭代时更新后的第一迭代参数建立第二计划树。

具体的,若执行第一计划树时产生的第一迭代参数与执行第二计划树时产生的第二迭代参数不相同,则使用该第二迭代参数更新该第一迭代参数。可以将第二迭代参数中,与第一迭代参数不相同的第一特征值和/或第二特征值添加至该第一迭代参数,将得到更新后的第一迭代参数,即将第一迭代参数和第二迭代参数取并集,并将并集结果作为更新后的第一迭代 参数。

即,若variation≠1,即不需要变异,则根据第n-1次迭代时更新后的第一迭代参数建立第二计划树。

例如,n=2时,若variation≠1,则根据第1次迭代时更新后的第一迭代参数(即上述步骤204中得到的第一迭代参数)建立第二计划树。

208、若需要变异,则根据第n-1次迭代时更新后的第一迭代参数,建立与上述第一计划树不同的第二计划树。

具体的,若variation=1,即需要变异,也可根据第n-1次迭代时更新后的第一迭代参数建立第二计划树,但与步骤207不同的是,建立的第二计划树与第n-1次迭代时建立的第一计划树不相同。

例如,第1次迭代时建立的计划树为初始计划树,那么,当n=3时,若variation=1,则使用第2次迭代时更新后的第一迭代参数建立第二计划树,且保证第二计划树与第2次迭代时建立的第一计划树不相同。

应理解,服务器可以根据第一迭代参数建立第二计划树,此时的第二计划树是服务器认为的在第一迭代参数的限制下最优的计划树,而未必是实际最优的计划树,当需要变异时,可以禁止服务器生成上述服务器认为最优的第二计划树(即与第一计划树相同的第二计划树),而生成另一个与第一计划树不同的第二计划树。

209、执行该第二计划树,并记录执行该第二计划树时产生的第二迭代参数。

具体的,在步骤209中,执行步骤207或208中建立的第二计划树,并记录执行该第二计划树时产生的第二迭代参数。

类似的,该第二迭代参数也包括n(i)和/或n(i,j,k)。

210、比较第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树是否相同。

需要说明的是,当n=2时,上述第n-1次迭代时,即第1次迭代时建立的第一计划树即为步骤203中建立的初始计划树。

211、若第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树不相同,则比较执行第一计划树时产生的第一迭代参数与执行第二计划树时产生的第二迭代参数是否相同,即判断sql执行计划是否需 要变异,进入步骤206,直到第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树相同,进入步骤212。

212、若第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树相同,则将该第二计划树作为该sql执行计划。

具体的,在步骤214中,当第n次迭代时建立的第二计划树与第n-1次迭代时建立的第一计划树相同时,说明经过n次迭代后,该第一迭代参数中已包含了所有的第一特征值和第二特征值,因此,此时根据第一迭代参数建立的第二计划树已经达到最优,则可以将该第二计划树作为该sql执行计划。

并且,保存该第二计划树与该sql语句之间的对应关系,并设置变量optimization=1,这样,当再次收到该sql语句时,判断optimization=1,则说明已经存储有与接收到的sql语句对应的sql执行计划,那么,服务器便可以直接从相应的存储单元中获取到该sql执行计划。

另外,在201-214的基础上,还可以增加步骤301-303,示例性的,如图3所示:

301、记录第n次迭代时,执行该第二计划树的执行时间。

302、判断迭代次数n是否大于阈值,sql执行计划是否需要变异。

303、若迭代次数n大于阈值,且sql执行计划需要变异,则将全部n次迭代中执行时间最短的第二计划树作为该sql执行计划。

具体的,在上述步骤209,即执行该第二计划树时,可以记录执行该第二计划树所花费的执行时间。

进而,在步骤上述209之后,且在步骤210之前,执行步骤302,即判断当前的迭代次数n是否大于阈值,且sql执行计划是否需要变异。

具体的,若迭代次数n大于阈值,且sql执行计划需要变异,即n>阈值,且variation=1,则执行步骤303,即将n次迭代过程中,步骤301中记录的执行时间最短的第二计划树,作为步骤201中该sql执行计划。

这样一来,对于那些在迭代过程中已经发生变异的sql执行计划,有可能永远都无法迭代出与上一次建立的计划树相同的计划树,因此,为 了避免无限制的死循环,可以认为当迭代次数n大于阈值后,在已经历的n次迭代过程中,执行时间最短的第二计划树即为最优的计划树,进而将该第二计划树作为该sql执行计划。

相应的,若在步骤302中,判断出当前的迭代次数n小于阈值,和/或,sql执行计划不需要变异,此时,仍按照上述步骤210-213进行迭代,直至迭代次数n大于阈值,且sql执行计划不需要变异。

另外,在记录每一次迭代时执行第二计划树的执行时间时,例如,第n次迭代过程中执行第二计划树的执行时间为t1,此时可以比较第n-1次迭代过程中执行第二计划树的执行时间t2与t1的大小,若t1小于t2,则保存执行时间较短的t1,以及执行时间较短的t1所对应的第二计划树,这样,保存的第二计划树即为n次迭代过程中执行时间最短的第二计划树,而无需记录每一次迭代时执行第二计划树的执行时间,和对应的第二计划树,以节省存储资源。

本发明的实施例提供一种sql执行计划的确定方法,以第n次迭代过程为例,首先,获取在第n-1次迭代时更新后的第一迭代参数,示例性的,不妨设该第一迭代参数包括第一特征值和/或第二特征值,第一特征值用于指示第i个关系表的元组数,第二特征值用于指示至少两个关系表经过连接操作后得到的结果集中元组的个数;然后,使用该第一迭代参数建立第二计划树;当第二计划树与第一计划树相同时,则将第二计划树作为该sql执行计划。本方案中最终得到的第二计划树并不是依赖于数据库内已统计的估算迭代参数,而是以迭代过程中更新后的第一迭代参数为依据建立的,进而当第二计划树与第一计划树相同时,将第二计划树作为sql执行计划,可较为准确的确定出sql执行计划,提高sql执行计划的执行效率。

图4为本发明实施例提供的一种sql执行计划的确定装置的结构示意图,本发明实施例提供的sql执行计划的确定装置可以用于实施上述图1-图3所示的本发明各实施例实现的方法,为了便于说明,仅示出了与本发明实施例相关的部分,具体执行的技术方案参照图1-图3所示的本发明各实施例,不再赘述。

具体的,如图4所示,sql执行计划的确定装置包括:获取单元01、 建立单元02和确定单元03。所述装置用于在第n次迭代中,

其中,获取单元01,用于获取在第n-1次迭代中对所述至少一个关系表执行第一计划树后产生的第一迭代参数,其中n为大于1的自然数;

建立单元02,用于根据所述第一迭代参数建立第二计划树;

确定单元03,用于当所述第二计划树与所述第一计划树的差异不大于第一阈值时,将所述第一计划树或所述第二计划树确定为所述sql执行计划。

示例性的,所述第一阈值为0,对应的,所述当所述第二计划树与所述第一计划树的差异不大于第一阈值时,将所述第一计划树或所述第二计划树确定为所述sql执行计划,包括,当所述第二计划树与所述第一计划树相同时,将所述第一计划树或所述第二计划树确定为所述sql执行计划。

示例性的,所述第一迭代参数包括所述sql执行计划对应的任意一个或多个关系表的元组数。

示例性的,所述sql执行计划对应至少两个关系表时,所述第一迭代参数还包括所述至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。

进一步地,如图5所示,所述装置还包括:

执行单元04,用于执行所述第二计划树;

记录单元05,用于记录执行所述第二计划树时产生的第二迭代参数。

示例性的,所述记录单元05还用于记录该sql执行计划为确定状态。

示例性的,所述第二迭代参数包括所述sql执行计划对应的任意一个或多个关系表的元组数。

示例性的,所述sql执行计划对应至少两个关系表时,所述第二迭代参数还包括所述至少两个关系表中任意一个或多个至少两个关系表经过连接操作后得到的结果集合中的元组数。

进一步地,如图6所示,所述装置还包括:

更新单元06,用于当所述第二计划树与所述第一计划树的差异大于第一阈值时,根据所述第二迭代参数更新所述第一迭代参数;将所述第n次迭代中的第二计划树作为第n+1次迭代中的第一计划树。

进一步地,所述建立单元02,具体用于当该第二迭代参数与该第一迭代参数相同时,根据所述第一迭代参数建立与所述第一计划树不相同的第二计划树。

进一步地,所述记录单元05,还用于记录执行所述第二计划树时的执行时间。

所述确定单元03,还用于当所述迭代次数n大于第二阈值时,将全部n次迭代中所述执行时间最短的第二计划树作为所述sql执行计划。

所述确定单元03,还用于当所述迭代次数n大于第三阈值时,将全部n次迭代中所述执行时间最短的第二计划树作为所述sql执行计划。

进一步地,所述记录单元05,还用于记录该sql执行计划为确定状态。

进一步地,所述建立单元02,还用于在初始迭代执行时,根据预先存储的估算迭代参数建立初始计划树;

所述执行单元04,还用于执行所述初始计划树,得到执行所述初始计划树时产生的初始迭代参数;

所述更新单元05,还用于使用所述初始迭代参数更新所述估算迭代参数,得到所述第一迭代参数。

进一步地,如图7所示,所述装置还包括查询单元08,其中,

所述查询单元07,用于查询该sql执行计划的状态是否为该确定状态;

所述确定单元03,还用于当该sql执行计划的状态为该确定状态时,执行所述sql执行计划。

进一步地,所述更新单元06,具体用于将所述第二迭代参数和所述第一迭代参数取并集,将所述并集的结果作为所述第一迭代参数。

如图8所示,图4-图7中所示的sql执行计划的确定装置可以以图8中的计算机设备(或系统)的方式来实现。

图8所示为本发明实施例提供的计算机设备100的示意图。计算机设备100包括至少一个处理器11,通信总线12,存储器13以及至少一个通信接口14。

存储器13用于存储计算机执行指令,处理器11与存储器13通过总 线12连接,当sql执行计划的确定装置运行时,处理器11执行存储器13存储的计算机执行指令,以使sql执行计划的确定装置执行如图1-图3中任一项的sql执行计划的确定方法。

其中,上述获取单元01、建立单元02、确定单元03、执行单元04、记录单元05、更新单元06和查询单元07的具体功能均可以由计算机设备100内的处理器11调用存储器13内的计算机指令实现。

处理器11可以是一个通用中央处理器(cpu),微处理器,特定应用集成电路(application-specificintegratedcircuit,asic),或一个或多个用于控制本发明方案程序执行的集成电路。

通信总线12可包括一通路,在上述组件之间传送信息。所述通信接口14,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网(ran),无线局域网(wirelesslocalareanetworks,wlan)等。

存储器13可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器13可以是独立存在,通过总线与处理器相连接。存储器13也可以和处理器集成在一起。

其中,所述存储器13用于存储执行本发明方案的应用程序代码,并由处理器11来控制执行。所述处理器11用于执行所述存储器13中存储的应用程序代码。

在具体实现中,作为一种实施例,处理器11可以包括一个或多个cpu,例如图8中的cpu0和cpu1。

在具体实现中,作为一种实施例,计算机设备100可以包括多个处理 器,例如图8中的处理器11和处理器18。这些处理器中的每一个可以是一个单核(single-cpu)处理器,也可以是一个多核(multi-cpu)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。

在具体实现中,作为一种实施例,计算机设备100还可以包括输出设备15和输入设备16。输出设备15和处理器11通信,可以以多种方式来显示信息。例如,输出设备15可以是液晶显示器(liquidcrystaldisplay,lcd),发光二级管(lightemittingdiode,led)显示设备,阴极射线管(cathoderaytube,crt)显示设备,或投影仪(projector)等。输入设备16和处理器11通信,可以以多种方式接受用户的输入。例如,输入设备16可以是鼠标、键盘、触摸屏设备或传感设备等。

上述的计算机设备100可以是一个通用计算机设备或者是一个专用计算机设备。在具体实现中,计算机设备100可以是台式机、便携式电脑、网络服务器、掌上电脑(personaldigitalassistant,pda)、移动手机、平板电脑、无线终端设备、通信设备、嵌入式设备或有图8中类似结构的设备。本发明实施例不限定计算机设备100的类型。

本发明的实施例提供一种sql执行计划的确定方法,以第n次迭代过程为例,首先,获取在第n-1次迭代时更新后的第一迭代参数,示例性的,该第一迭代参数包括第一特征值和/或第二特征值,第一特征值用于指示第i个关系表的元组数,第二特征值用于指示至少两个关系表经过连接操作后得到的结果集中元组的个数;然后,使用该第一迭代参数建立第二计划树;当第二计划树与第一计划树相同时,则将第二计划树作为该sql执行计划。本方案中最终得到的第二计划树并不是依赖于数据库内已统计的估算迭代参数,而是以迭代过程中更新后的第一迭代参数为依据建立的,进而当第二计划树与第一计划树相同时,将第二计划树作为sql执行计划,可较为准确的确定出sql执行计划,提高sql执行计划的执行效率。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功 能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可 轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1