一种SQL语句的执行方法、装置、电子设备及存储介质与流程

文档序号:22129496发布日期:2020-09-08 12:40阅读:106来源:国知局
一种SQL语句的执行方法、装置、电子设备及存储介质与流程
本发明涉及计算机
技术领域
,特别是涉及一种sql(structuredquerylanguage,结构化查询语言)语句的执行方法、装置、电子设备及存储介质。
背景技术
:基于关系型数据库的sql语句在被执行前,数据库引擎中的查询组件根据该sql语句生成若干个执行计划,从中选取一个执行计划用于执行该条sql语句,但是当选中的执行计划较差时,sql语句的执行时长会较长,耗费的计算资源和i/o(input/output,输入/输出)资源会较多。针对上述问题,现有技术中采用cbo(cost-basedoptimization,基于代价的优化)方式选择执行计划,当执行计划所耗费的计算资源、i/o资源、时间越多时,代价越高,针对待执行的sql语句,数据库中与该sql语句相关的数据的分布情况记载在统计信息中,基于统计信息选择代价较低的执行计划,采用该执行计划执行该sql语句。例如,sql语句的目的为从该组数据中筛选出成绩在90分以上的女生,统计信息中记录了成绩大于90分的人数所占总人数的百分比为5%,满足性别为女的人数所占总人数的百分比为50%,有两种执行计划,第一种是先筛选出成绩大于90分的人,再从成绩大于90分的人中筛选出性别为女的人;第二种是先筛选出性别为女的人,再从性别为女的人中筛选出成绩大于90分的人,显然第一种执行计划需要处理的数据比第二种少,因为先筛选出成绩大于90分的人,已经淘汰了95%的人,数据处理量显著降低,故基于统计信息应该采用第一种执行计划执行sql语句,此时代价最低。统计信息每隔预设时长会刷新一次,记录最新的数据分布情况,以及基于最新的数据分布情况生成所有执行计划与代价的最新对应关系,此时统计信息的准确度是100%,但是在统计信息未完成下一次刷新前,统计信息的准确度随着数据的更新不断下降,选中最优执行计划的概率越来越低,统计信息的准确度越低,使用较差执行计划的概率越大。技术实现要素:本发明实施例的目的在于提供一种sql语句的执行方法、装置、电子设备及存储介质,用以解决执行sql语句时,使用较差执行计划的概率较大的问题。具体技术方案如下:第一方面,本发明实施例提供了一种sql语句的执行方法,包括:针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为第一所选执行计划,其中,所述执行计划关联表中存储了针对所述sql语句的多个执行计划的评估分数,一个执行计划的所述评估分数表示该执行计划上一次被用于执行所述sql语句时所消耗的处理资源的情况,所述评估分数越高表示所述执行计划所消耗的处理资源越多;所述执行计划关联表中的执行计划表示从数据库中获取所述sql语句所指示的数据的方式;采用所述第一所选执行计划,执行所述sql语句。进一步的,在所述采用所述第一所选执行计划,执行所述sql语句之后,所述方法还包括:基于本次采用所述第一所选执行计划执行所述sql语句时所消耗的处理资源的情况,计算得到所述第一所选执行计划的新评估分数;将所述执行计划关联表中所述第一所选执行计划的评估分数更新为所述新评估分数。进一步的,在所述针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为所选执行计划之前,所述方法还包括:针对待执行的sql语句,生成用于执行所述sql语句的执行计划,作为待选执行计划;判断在执行计划关联表中能否查找到所述待选执行计划的评估分数;当查找到所述待选执行计划的评估分数时,执行所述针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划的步骤;当未查找到所述待选执行计划的评估分数时,采用所述待选执行计划,执行所述sql语句;基于本次采用所述待选执行计划执行所述sql语句时所消耗的处理资源的情况,计算得到所述待选执行计划的评估分数;将所述待选执行计划的评估分数,添加到所述执行计划关联表中。进一步的,在所述针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为所选执行计划之前,所述方法还包括:针对待执行的sql语句,获取数据库中与所述sql语句相关的数据的统计信息的准确度;判断所述统计信息的准确度是否小于第一预设准确度阈值;如果小于,执行所述针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划的步骤;如果不小于,则基于预先计算的针对所述sql语句的多个执行计划的执行代价,从针对所述sql语句的多个所述执行计划中,选择执行代价最低的执行计划,作为第二所选执行计划;采用所述第二所选执行计划,执行所述sql语句;基于本次采用所述第二所选执行计划执行所述sql语句时所消耗的处理资源的情况,计算得到所述第二所选执行计划的评估分数;将所述第二所选执行计划的评估分数,添加到所述执行计划关联表中。进一步的,采用以下步骤刷新所述统计信息:判断当前时刻与上次刷新所述统计信息的时刻的时长是否达到预设时长;如果达到所述预设时长,判断所述统计信息的准确度是否小于第二预设准确度阈值,其中,所述第二预设准确度阈值不大于所述第一预设准确度阈值;如果小于所述第二预设准确度阈值,刷新所述统计信息。进一步的,所述方法还包括:如果达到所述预设时长,且所述统计信息的准确度小于所述第二预设准确度阈值,清空所述执行计划关联表中存储的评估分数。进一步的,一个执行计划的所述评估分数为基于该执行计划被执行的过程中所处理数据的数据行数计算得到的。第二方面,本发明实施例提供了一种sql语句的执行装置,包括:第一选择单元,用于针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为第一所选执行计划,其中,所述执行计划关联表中存储了针对所述sql语句的多个执行计划的评估分数,一个执行计划的所述评估分数表示该执行计划上一次被用于执行所述sql语句时所消耗的处理资源的情况,所述评估分数越高表示所述执行计划所消耗的处理资源越多;所述执行计划关联表中的执行计划表示从数据库中获取所述sql语句所指示的数据的方式;第一执行单元,用于采用所述第一所选执行计划,执行所述sql语句。进一步的,所述装置还包括:计算单元,用于基于本次采用所述第一所选执行计划执行所述sql语句时所消耗的处理资源的情况,计算得到所述第一所选执行计划的新评估分数;更新单元,用于将所述执行计划关联表中所述第一所选执行计划的评估分数更新为所述新评估分数。进一步的,所述装置还包括:生成单元,用于在所述第一选择单元针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为第一所选执行计划之前,针对待执行的sql语句,生成用于执行所述sql语句的执行计划,作为待选执行计划;第一判断单元,用于判断在执行计划关联表中能否查找到所述待选执行计划的评估分数;当查找到所述待选执行计划的评估分数时,触发所述第一选择单元;当未查找到所述待选执行计划的评估分数时,触发第二执行单元;所述第二执行单元,用于采用所述待选执行计划,执行所述sql语句;基于本次采用所述待选执行计划执行所述sql语句时所消耗的处理资源的情况,计算得到所述待选执行计划的评估分数;将所述待选执行计划的评估分数,添加到所述执行计划关联表中。进一步的,所述装置还包括:获取单元,用于在所述第一选择单元针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为所选执行计划之前,针对待执行的sql语句,获取数据库中与所述sql语句相关的数据的统计信息的准确度;第二判断单元,用于判断所述统计信息的准确度是否小于第一预设准确度阈值;如果所述统计信息的准确度小于第一预设准确度阈值,触发所述第一选择单元;如果所述统计信息的准确度不小于第一预设准确度阈值,触发第二选择单元;所述第二选择单元,用于基于预先计算的针对所述sql语句的多个执行计划的执行代价,从针对所述sql语句的多个所述执行计划中,选择执行代价最低的执行计划,作为第二所选执行计划;采用所述第二所选执行计划,执行所述sql语句;基于本次采用所述第二所选执行计划执行所述sql语句时所消耗的处理资源的情况,计算得到所述第二所选执行计划的评估分数;将所述第二所选执行计划的评估分数,添加到所述执行计划关联表中。进一步的,所述装置还包括:第三判断单元,用于判断当前时刻与上次刷新所述统计信息的时刻的时长是否达到预设时长;如果达到预设时长,判断所述统计信息的准确度是否小于第二预设准确度阈值,其中,所述第二预设准确度阈值不大于所述第一预设准确度阈值;刷新单元,用于如果所述统计信息的准确度小于所述第二预设准确度阈值,刷新所述统计信息。进一步的,所述装置还包括:清空单元,用于如果达到所述预设时长,且所述统计信息的准确度小于所述第二预设准确度阈值,清空所述执行计划关联表中存储的评估分数。进一步的,一个执行计划的所述评估分数为基于该执行计划被执行的过程中所处理数据的数据行数计算得到的。第三方面,本发明实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;存储器,用于存放计算机程序;处理器,用于执行存储器上所存放的程序时,实现上述任一sql语句的执行方法的步骤。第四方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现任一所述sql语句的执行方法的步骤。第五方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的sql语句的执行方法。本发明实施例提供的一种sql语句的执行方法、装置、电子设备及存储介质,针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为第一所选执行计划,其中,执行计划关联表中存储了针对sql语句的多个执行计划的评估分数,一个执行计划的评估分数表示该执行计划上一次被用于执行sql语句时所消耗的处理资源的情况,评估分数越高表示执行计划所消耗的处理资源越多;采用第一所选执行计划,执行sql语句;执行计划关联表中的执行计划表示从数据库中获取sql语句所指示的数据的方式。应用本发明实施例提供的技术方案,可以将执行计划和评估分数的对应关系存储到执行计划关联表中,当获取到sql语句时,选择评估分数最低的执行计划用于执行该sql语句,评估分数越低表示执行计划所消耗的处理资源越少,降低了生成较差执行计划的概率。当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的一种sql语句的执行方法的流程图;图2为本发明实施例提供的另一种sql语句的执行方法的流程图;图3为本发明实施例提供的另一种sql语句的执行方法的流程图;图4为本发明实施例提供的另一种sql语句的执行方法的流程图;图5a为本发明实施例提供的一种sql语句的执行装置的结构示意图;图5b为本发明实施例提供的另一种sql语句的执行装置的结构示意图;图5c为本发明实施例提供的另一种sql语句的执行装置的结构示意图;图5d为本发明实施例提供的另一种sql语句的执行装置的结构示意图;图6为本发明实施例提供的一种电子设备的结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例提供了一种sql语句的执行方法,图1为本发明实施例提供的sql语句的执行方法的流程图,如图1所示,包括如下步骤:步骤11,针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为第一所选执行计划。其中,执行计划关联表中存储了针对sql语句的多个执行计划的评估分数,一个执行计划的评估分数表示该执行计划上一次被用于执行sql语句时所消耗的处理资源的情况,评估分数越高表示执行计划所消耗的处理资源越多;执行计划关联表中的执行计划表示从数据库中获取sql语句所指示的数据的方式。步骤12,采用第一所选执行计划,执行sql语句。采用上述图1所示的sql语句的执行方法,可以将执行计划和评估分数的对应关系存储到执行计划关联表中,当获取到sql语句时,选择评估分数最低的执行计划用于执行该sql语句,评估分数越低表示执行计划所消耗的处理资源越少,降低了生成较差执行计划的概率。在本申请的一个实施例中,图2为本发明实施例提供的另一种sql语句的执行方法的流程图,如图2所示,在图1的基础上,该可以包括如下步骤:步骤13,基于本次采用第一所选执行计划执行sql语句时所消耗的处理资源的情况,计算得到第一所选执行计划的新评估分数。步骤14,将执行计划关联表中第一所选执行计划的评估分数更新为新评估分数。在本申请实施例中,由于数据库中的数据会发生更新,因此,还可以在采用第一所选执行计划执行sql语句后,对执行计划关联表中第一所选执行计划的评估分数进行更新,以提高执行计划关联表中记录的评估分数的准确度。在本申请的一个实施例中,一个执行计划的评估分数为基于该执行计划被执行的过程中所处理数据的数据行数计算得到的,其中,所处理数据可以包括所扫描数据和所读取数据,计算可以是所扫描数据和所读取数据的行数进行简单的加和,也可以是对所扫描数据和所读取数据的行数先加权再求和。以对所扫描数据和所读取数据的行数先加权再求和为例,评估分数=扫描行数×扫描行数的权重+读取行数×读取行数的权重,假设一个sql语句为从100个学生的名单中查找出分数为95分以上的女生,这100个学生中有50个女生,95分以上的学生有10个,针对该sql语句的一个执行计划为先找出女生再找出95分以上的女生,则该执行计划具体实现步骤为先扫描100行学生数据,找出符合性别为女的50行学生数据,再扫描这50行性别为女的学生数据,从这50行学生数据中读取到分数为95分以上的学生数据,假设95分以上的女生人数有5个,预先设置扫描行数的权重为0.6,读取行数的权重为0.4,则评估分数=(100+50)×0.6+5×0.4=92分。在本申请的一个实施例中,图3为本发明实施例提供的另一种sql语句的执行方法的流程图,如图3所示,可以包括如下步骤:步骤31,针对待执行的sql语句,生成用于执行sql语句的执行计划,作为待选执行计划。关系型数据库获取到sql语句后,可以采用贪婪算法生成用于执行该sql语句的执行计划,作为待选执行计划。步骤32,判断在执行计划关联表中能否查找到待选执行计划的评估分数;当查找到待选执行计划的评估分数时,执行步骤33;当未查找到待选执行计划的评估分数时,执行步骤35。如表1所示,执行计划关联表中存储了针对sql语句的多个执行计划的评估分数,评估分数表示该执行计划上一次被用于执行sql语句时所消耗的处理资源的情况,评估分数越高表示执行计划所消耗的处理资源越多,假设待选执行计划为执行计划3,在执行计划关联表中能查找到执行计划3的评估分数,执行步骤33;假设待选执行计划为执行计划4,在执行计划关联表中不能查找到执行计划5的评估分数,执行步骤35。执行计划评估分数执行计划110执行计划2245执行计划312表1:执行计划关联表步骤33,针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为第一所选执行计划。在执行计划关联表中,选择评估分数最低的执行计划,如表1所示,执行计划1的评估分数为3,在该执行计划关联表中最低,故选择执行计划1。步骤34,采用第一所选执行计划,执行sql语句。上述评估分数可以为基于该第一所选执行计划被执行的过程中所处理数据的数据行数计算得到的,本次采用第一所选执行计划执行sql语句时记录了扫描行数和读取行数,可以基于扫描行数和读取行数加权计算得到第一所选执行计划的新评估分数,新评估分数=扫描行数×扫描行数的权重+读取行数×读取行数的权重。例如,预先设置扫描行数的权重为0.6,读取行数的权重为0.4,采用第一所选执行计划执行sql语句时扫描行数为150行,读取行数为5行,该第一所选执行计划的新评估分数=150×0.6+5×0.4=92分。在一个实施例中,在步骤34之后,还可以基于本次采用第一所选执行计划执行sql语句时所消耗的处理资源的情况,计算得到第一所选执行计划的新评估分数,进而,还可以将执行计划关联表中第一所选执行计划的评估分数更新为新评估分数。假设第一所选执行计划为执行计划3,将执行计划3中的评估分数12改为上述计算得到的新评估分数92,如表2所示。执行计划评估分数执行计划110执行计划2245执行计划392表2:更新后的执行计划关联表步骤35,采用待选执行计划,执行sql语句。假设生成的执行计划为执行计划4,在上述执行计划关联表中未能查找到执行计划4,故采用待选执行计划4执行sql语句。由于执行计划关联表中存储的评估分数不包括执行计划4的评估分数,所以相较于执行计划关联表中已有的评估分数,执行计划4的评估分数可能更低,也就是说,采用执行计划4执行该sql语句所消耗的处理资源可能更少,故采用执行计划4执行sql语句。这样,可以丰富执行计划关联表中的数据,尽可能降低执行计划关联表中的最低评估分数。步骤36,基于本次采用待选执行计划执行sql语句时所消耗的处理资源的情况,计算得到待选执行计划的评估分数。本步骤中,如何计算得到待选执行计划的评估分数,可以采用上述步骤25中计算第一所选执行计划的新评估分数的计算方式,在此不再举例进行详细描述。步骤37,将待选执行计划的评估分数,添加到执行计划关联表中。将待选执行计划的评估分数添加到上述执行计划关联表中,假设上述执行计划4的评估分数为8分,将执行计划4及其评估分数添加至执行计划关联表中,如表3所示。表3:添加后的执行计划关联表在本申请的一个实施例中,图4为本发明实施例提供的另一种sql语句的执行方法的流程图,如图4所示,可以包括如下步骤:步骤41,针对待执行的sql语句,获取数据库中与sql语句相关的数据的统计信息的准确度。统计信息中可以记录该统计信息的准确度,准确度大于等于0小于等于100%,在每次sql语句执行完毕后,cpu(centralprocessingunit,中央处理器)可以另外派发一个线程异步刷新统计信息的准确度,针对待执行的sql语句,获取数据库中与该sql语句相关的数据的统计信息的准确度。步骤42,判断统计信息的准确度是否小于第一预设准确度阈值;如果小于,执行步骤43;如果不小于,执行步骤45。第一预设准确度阈值可以反映出统计信息是否可信赖,低于第一预设准确度阈值的统计信息不再可靠,假设第一预设准确度阈值设置为80%,将上述获取到的统计信息的准确度与80%比较,判断统计信息的准确度是否小于80%;如果小于,执行步骤43;如果不小于,执行步骤45。步骤43,针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为第一所选执行计划。本步骤可以与上述步骤33相同,具体可参考上述步骤33的描述。步骤44,采用第一所选执行计划,执行sql语句。步骤45,基于预先计算的针对sql语句的多个执行计划的执行代价,从针对sql语句的多个执行计划中,选择执行代价最低的执行计划,作为第二所选执行计划;针对sql语句的多个执行计划,预先计算出这多个执行计划的执行代价,执行计划所耗费的计算资源、i/o资源、时间越多,代价越高,选择执行代价最低的执行计划,作为第二所选执行计划。步骤46,采用第二所选执行计划,执行sql语句。步骤47,基于本次采用第二所选执行计划执行sql语句时所消耗的处理资源的情况,计算得到第二所选执行计划的评估分数。本步骤中,如何计算得到第二所选执行计划的评估分数,可以采用上述步骤中计算第一所选执行计划的新评估分数的计算方式,在此不再举例进行详细描述。步骤48,将第二所选执行计划的评估分数,添加到执行计划关联表中。如果上述执行计划关联表中存在第二所选执行计划的评估分数,则将执行计划关联表中第二所选执行计划的评估分数更新为本次计算得到的新评估分数;如果上述执行计划关联表中不存在第二所选执行计划的评估分数,则将第二所选执行计划的评估分数,添加到执行计划关联表中。在一个实施例中,在步骤44之后,还可以基于本次采用第一所选执行计划执行sql语句时所消耗的处理资源的情况,计算得到第一所选执行计划的新评估分数,进而,还可以将执行计划关联表中第一所选执行计划的评估分数更新为新评估分数。在本申请的一个实施例中,可以采用以下步骤刷新统计信息:判断当前时刻与上次刷新统计信息的时刻的时长是否达到预设时长;如果达到预设时长,判断统计信息的准确度是否小于第二预设准确度阈值,其中,第二预设准确度阈值不大于第一预设准确度阈值;如果小于第二预设准确度阈值,刷新统计信息。随着数据库中的数据不断更新,统计信息准确度不断下降,为了能更好的反映数据库中数据的分布情况,需要定期对统计信息刷新,统计信息中记录了上次被刷新的时刻,判断当前时刻与上次刷新统计信息的时刻之间的时长是否达到预设时长,例如当前时刻为2020年1月17日,上次刷新统计信息的时刻为2020年1月15日,预设时长为1天,故达到预设时长,判断统计信息的准确度是否小于第二预设准确度阈值,其中,第二预设准确度阈值不大于第一预设准确度阈值,如果小于则刷新统计信息。由于刷新统计信息需要消耗大量的计算资源和i/o资源,所以设置第二预设准确度阈值不大于第一预设准确度阈值,可以避免在统计信息准确度满足需求的情况下被刷新,从而降低计算资源、i/o资源的消耗。在本申请的一个实施例中,该sql语句的执行方法还可以包括:如果达到预设时长,且小于第二预设准确度阈值,清空执行计划关联表中存储的评估分数。如果当前时刻与上次刷新统计信息的时刻之间的时长达到预设时长,且小于第二预设阈值,清空执行计划关联表中存储的评估分数,在统计信息刷新后,再将生成的执行计划的新评估分数添加到执行计划关联表中。相应的,基于同一发明构思,与本申请实施例提供的上述sql语句的执行方法相对应,本发明实施例还提供了一种sql语句的执行装置,图5a为本发明实施例提供的一种sql语句的执行装置的结构示意图,如图5a所示,该装置可以包括:第一选择单元51,用于针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为第一所选执行计划,其中,执行计划关联表中存储了针对sql语句的多个执行计划的评估分数,一个执行计划的评估分数表示该执行计划上一次被用于执行sql语句时所消耗的处理资源的情况,评估分数越高表示执行计划所消耗的处理资源越多;执行计划关联表中的执行计划表示从数据库中获取sql语句所指示的数据的方式;第一执行单元52,用于采用第一所选执行计划,执行sql语句。在本申请的一个实施例中,进一步的,如图5b所示,该装置还可以包括:计算单元53,用于基于本次采用第一所选执行计划执行sql语句时所消耗的处理资源的情况,计算得到第一所选执行计划的新评估分数;更新单元54,用于将执行计划关联表中第一所选执行计划的评估分数更新为新评估分数。在本申请的一个实施例中,进一步的,如图5c所示,该装置还可以包括:生成单元55,用于在第一选择单元51针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为第一所选执行计划之前,针对待执行的sql语句,生成用于执行sql语句的执行计划,作为待选执行计划;第一判断单元56,用于判断在执行计划关联表中能否查找到待选执行计划的评估分数;当查找到待选执行计划的评估分数时,触发第一选择单元51;当未查找到待选执行计划的评估分数时,触发第二执行单元57;第二执行单元57,用于采用待选执行计划,执行sql语句;基于本次采用待选执行计划执行sql语句时所消耗的处理资源的情况,计算得到待选执行计划的评估分数;将待选执行计划的评估分数,添加到执行计划关联表中。在本申请的一个实施例中,进一步的,如图5d所示,该装置还可以包括:获取单元58,用于在第一选择单元51针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为所选执行计划之前,针对待执行的sql语句,获取数据库中与sql语句相关的数据的统计信息的准确度;第二判断单元59,用于判断统计信息的准确度是否小于第一预设准确度阈值;如果统计信息的准确度小于第一预设准确度阈值,触发第一选择单元51;如果统计信息的准确度不小于第一预设准确度阈值,触发第二选择单元510;第二选择单元510,用于基于预先计算的针对sql语句的多个执行计划的执行代价,从针对sql语句的多个执行计划中,选择执行代价最低的执行计划,作为第二所选执行计划;采用第二所选执行计划,执行sql语句;基于本次采用第二所选执行计划执行sql语句时所消耗的处理资源的情况,计算得到第二所选执行计划的评估分数;将第二所选执行计划的评估分数,添加到执行计划关联表中。进一步的,在本申请的一个实施例中,该装置还可以包括:第三判断单元,用于判断当前时刻与上次刷新统计信息的时刻的时长是否达到预设时长;如果达到预设时长,判断统计信息的准确度是否小于第二预设准确度阈值,其中,第二预设准确度阈值不大于第一预设准确度阈值;刷新单元,用于如果统计信息的准确度小于第二预设准确度阈值,刷新统计信息。在本申请的一个实施例中,该装置还可以包括:清空单元,用于如果达到预设时长,且统计信息的准确度小于第二预设准确度阈值,清空执行计划关联表中存储的评估分数。进一步的,一个执行计划的评估分数为基于该执行计划被执行的过程中所处理数据的数据行数计算得到的。相应的,基于同一发明构思,与本申请实施例提供的上述sql语句的执行方法相对应,本发明实施例还提供了一种电子设备,如图6所示,包括处理器61、通信接口62、存储器63和通信总线64,其中,处理器61,通信接口62,存储器63通过通信总线64完成相互间的通信,存储器63,用于存放计算机程序;处理器61,用于执行存储器63上所存放的程序时,实现如下步骤:针对待执行的sql语句,选择执行计划关联表中评估分数最低的执行计划,作为第一所选执行计划,其中,执行计划关联表中存储了针对sql语句的多个执行计划的评估分数,一个执行计划的评估分数表示该执行计划上一次被用于执行sql语句时所消耗的处理资源的情况,评估分数越高表示执行计划所消耗的处理资源越多;执行计划关联表中的执行计划表示从数据库中获取sql语句所指示的数据的方式;采用第一所选执行计划,执行sql语句。本发明实施例提供的一种电子设备,可以将执行计划和评估分数的对应关系存储到执行计划关联表中,当获取到sql语句时,选择评估分数最低的执行计划用于执行该sql语句,评估分数越低表示执行计划所消耗的处理资源越少,降低了生成较差执行计划的概率。上述电子设备提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于上述电子设备与其他设备之间的通信。存储器可以包括随机存取存储器(randomaccessmemory,ram),也可以包括非易失性存储器(non-volatilememory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,cpu)、网络处理器(networkprocessor,np)等;还可以是数字信号处理器(digitalsignalprocessing,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。相应的,基于同一发明构思,与本申请实施例提供的上述sql语句的执行方法相对应,在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一sql语句的执行方法的步骤。相应的,基于同一发明构思,与本申请实施例提供的上述sql语句的执行方法相对应,在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一sql语句的执行方法。在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、计算机可读存储介质以及计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1