SQL语句自动优化方法、装置、计算机设备以及存储介质与流程

文档序号:18464746发布日期:2019-08-17 02:21阅读:149来源:国知局
SQL语句自动优化方法、装置、计算机设备以及存储介质与流程

本发明涉及计算机技术领域,尤其涉及一种sql语句自动优化方法、装置、计算机设备以及存储介质。



背景技术:

当今社会,一切皆数字化。随着大数据时代的到来,数据库经常需要在海量数据中,选出满足特定需求的数据来完成查询操作。结构化查询语言(structuredquerylanguage,简称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语句自动优化装置的示意性框图;

图5是本发明实施例提供的一种sql语句自动优化装置的另一示意性框图;

图6是本发明实施例提供的一种sql语句自动优化装置的另一示意性框图;

图7是本发明实施例提供的一种sql语句自动优化装置的另一示意性框图;

图8是本发明实施例提供的一种sql语句自动优化装置的另一示意性框图;

图9是本发明实施例提供的一种计算机设备的结构组成示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。

还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

请参阅图1和图2,图1为本发明实施例提供的一种sql语句自动优化方法的应用场景示意图,图2为本发明实施例提供的一种sql语句自动优化方法的流程示意图。该sql语句自动优化方法应用于服务器或终端中,其中终端可以是智能手机、平板电脑、笔记本电脑、台式电脑、个人数字助理和穿戴式设备等具有通信功能的电子设备。作为一应用,如图1所示,该sql语句自动优化方法应用于服务器10中,该服务器10可以为分布式服务平台中的一台服务器,该服务器10执行sql语句指令,并将执行结果反馈在终端20中。

需要说明的是,图1中仅仅示意出一台终端20,在实际操作过程中,服务器10可以将执行结果反馈至多台终端20中。

请参阅图2,图2为本发明实施例提供的一种sql语句自动优化方法的示意流程图。如图2所示,该方法包括以下步骤s101~s104。

s101,获取用户输入的sql语句的执行计划,并向用户返回所述执行计划所需的第一时间耗费和第一资源耗费;其中资源优选为中央处理器的内存资源。

在本发明实施例中,所述第一时间耗费指的是所述sql语句的执行计划在执行时所消耗的时长,所述第一资源耗费指的是所述sql语句的执行计划在执行时占用中央处理器的内存资源的大小,其中,占用中央处理器的内存资源的大小可以用占用中央处理器内存资源的百分比来表示,比如:占用中央处理器的内存资源的比例为10%或者20%等,具体的百分比数需要根据实际应用进行确定,在此不作限制。

其中,所述第一时间耗费可以通过系统开始执行所述sql语句的执行计划后,即相应在系统的日志文件中出现针对所述sql语句的执行计划的日志后,从增加针对所述所述sql语句的执行计划的日志的时间,到执行所述sql语句的执行计划对应的函数结束的时间,计算得到所述sql语句的执行计划执行过程的时间耗费;所述第一资源耗费可以通过预设时间函数获取系统的中央处理器在运行时的不同工作时间,并根据所获取的工作时间利用预设计算公式得到所述第一资源耗费,其中,计算在预设时间内系统的中央处理器忙碌的时间占比,可以通过预设时间函数getsystemtime()得到当前系统的中央处理器的运行时间,以及在该运行时间段内中央处理器的三种不同的工作时间(自开机以来):空闲时间、主控电路时间和用户时间,根据中央处理器的三种不同的工作时间以及预设计算公式:内存使用率=(主控电路时间+用户时间-空闲时间)/(主控电路时间+用户时间),可计算得出系统的中央处理吕在当前运行时间段内的第一资源耗费。

需要说明的是,本实施例中所述sql语句的执行计划的改变受到sql语句中语句排序的因素所影响,例如:sql语句中查询条件顺序的变化、sql语句中数据表顺序的变化等等。若sql语句对语句中的查询条件和数据表进行了重新排序,则sql语句的执行计划发生了改变。

在一些实施方式中,获取用户输入的sql语句的执行计划,可以通过执行计算机指令信息的方式进行获取,例如,首先可以由用户手动输入sql语句,然后通过触发计算机指令信息预执行用户输入的sql语句,从而获得sql语句的执行计划。

具体地,获取输入的sql语句的执行计划包括如下步骤:

执行explainplanfor指令获取输入的sql语句的执行计划。

其中,explainplanfor是sql数据库中的一条用于读取执行计划的指令信息。

在一些实施方式中,用户还可以通过dbms_xplan.display_cursor输入sql_id参数直接获取,本发明实施例对此不做限制。

s102,解析所述sql语句,读取查询条件、所有查询所用的数据表以及每张所述数据表的数据量和索引。

优选地,解析所述sql语句为调用正则表达式解析所述sql语句。

正则表达式,又称规则表达式,最初是由unix中的工具软件普及得来,通常缩写成“regex”,用于检索、替换那些符合某个模式或者规则的文本。

s103,调整所述查询条件中的非法查询条件,其中所述非法查询条件为干扰所述索引执行的查询条件。

优选地,非法查询条件优选为使用in的查询条件,则调整查询条件中非法查询条件包括如下步骤:

使用or运算符将使用in的查询条件分解为至少一个使用"="预算符的查询条件。

其中,or运算符是指查询条件中使用多个字段进行过滤。

在一些实施方式中,非法查询条件优选为使用"isnull"的查询条件,则调整查询条件中的非法查询条件包括如下步骤:

使用位图索引调整查询条件中非法查询条件。

s104,遍历调整后的查询条件的排序和所有查询所用的数据表的排序,重新获取调整后的sql语句的执行计划,并向用户返回调整后的执行计划所需的第二时间耗费和第二资源耗费。

在本发明实施例中,在遍历调整后的查询条件的排序和所有查询所用的数据表的排序之后,便重新获取调整后的sql语句的执行计划,因为调整后的sql语句对语句中的查询条件和数据表进行了重新排序,所以调整后的sql语句的执行计划发生了改变,执行计划的变化必然会影响到执行计划的时间耗费和资源耗费,因此,在重新获取调整后的sql语句的执行计划的同时,需要重新获取调整后的执行计划所需的第二时间耗费和第二资源耗费,其中,获取调整后的sql语句的执行计划的方式与步骤s101一致,即通过执行explainplanfor指令重新获取调整后的sql语句的执行计划,所述第二时间耗费指的是所述sql语句的执行计划在执行时所消耗的时长,所述第二资源耗费指的是所述sql语句的执行计划在执行时占用中央处理器的内存资源的大小。

具体地,如图3所示,在遍历调整后的查询条件的排序和所有查询所用的数据表排序之前,包括如下步骤s1004:

s1004,对调整后的查询条件和所有查询所用的数据表进行排序。

应当理解的是,遍历调整后的查询条件的排序和所有查询所用的数据表的排序可以参考表间连接的排序合并连接。排序合并连接的工作方式是分别将关联的两张表按照它们各自要连接的列排序,然后将已经排序的两个源表合并,虽然由于排序存在,增加了连接,但是可以缩减在嵌套循环连接中发生的随机读取量,其工作流程如下:

1)判断第一源表是否已经排序,如果已经排序,则到第3)步,否则到第2)步;

2)第一个源表排序;

3)判断第二源表是否已经排序,如果已经排序,则到第5)步,否则到第4)步;

4)第二个源表排序;

5)对已经排过序的两个源表进行合并操作,并生成最终的结果集。

在一些实施方式中,源表的排序可以分为下面几种情况:

最优排序,执行时数据全部在内存中,内存是随着数据读入逐步分配的;

一遍排序,数据量大而无法一次全部读入内存时,将一次能够处理的数据量读入内存并对其排序;

多遍排序,开始时与一遍排序类似,但是其针对的情况是所有数据都处理完并写至磁盘。当达到内存的上限时,就将已排序的数据集转储到磁盘。重复这个过程,直到处理完所有的输入数据。

在实际中,用户可以根据自己需要选择最优排序、一遍排序或者多遍排序,本发明实施例对此不做限制。

s105,分别比较所述第一时间耗费、第二时间耗费以及所述第一资源耗费、第二资源耗费,获取并返回时间耗费短且资源耗费少的执行计划。

在本发明实施例中,将所获得的调整后的执行计划所需的第二时间耗费与调整前的执行计划的第一时间耗费进行比较,将所获得的调整后的执行计划所需的第二资源耗费与调整前的执行计划的第一资源耗费进行比较,根据比较结果确定时间耗费短且资源耗费少的执行计划作为本实施例所需的执行计划。比如,调整前的sql语句的执行计划所需的第一时间耗费为10秒,调整后的sql语句的执行计划所需的第二时间耗费为7秒,则说明调整后的sql语句的执行计划的时间耗费短;调整前的sql语句的执行计划所需的第一资源耗费为10%,调整后的sql语句的执行计划所需的第二资源耗费为6.5%,则说明调整后的sql语句的执行计划的资源耗费少,最后将时间耗费短且资源耗费少的执行计划确定为本实施例所需的执行计划,即调整后的sql语句的执行计划。

与现有技术相比,本发明实施例一种sql语句自动优化方法具有如下有益效果:

本发明实施例一种sql语句自动优化方法通过对干扰索引执行的非法查询条件的调整以及对调整后的查询条件的排序与所有查询所用的表排序的遍历,最终得到了满足耗费时间短且占用资源少的执行计划,在一定程度上缩短了调整sql语句优化的时间,提高sql语句性能测试效率。

请参阅图4,对应上述一种sql语句自动优化方法,本发明实施例还提出一种sql语句自动优化装置,该装置100包括输入获取单元101、解析读取单元102、调整单元103、遍历返回单元104以及比较获取单元105,其中,

输入获取单元101,用于获取用户输入的sql语句的执行计划,并向用户返回所述执行计划所需的第一时间耗费和第一资源耗费;

解析读取单元102,用于解析所述sql语句,读取查询条件、所有查询所用的数据表以及每张所述数据表的数据量和索引;

调整单元103,用于调整所述查询条件中的非法查询条件,其中所述非法查询条件为干扰所述索引执行的查询条件;

遍历返回单元104,用于遍历调整后的查询条件的排序和所有查询所用的数据表的排序,重新获取调整后的sql语句的执行计划,并向用户返回调整后的执行计划所需的第二时间耗费和第二资源耗费。

比较获取单元105,用于分别比较所述第一时间耗费、第二时间耗费以及所述第一资源耗费、第二资源耗费,获取并返回时间耗费短且资源耗费少的执行计划。

优选地,如图5所示,所述输入获取单元101包括执行单元101a,用于通过执行explainplanfor指令获取输入的sql语句的执行计划。

优选地,如图6所示,所述解析读取单元102包括调用单元102a,用于调用正则表达式解析sql语句。

优选地,如图7所示,所述调整单元103包括分解单元103a,用于使用or运算符将使用in的查询条件分解为至少一个使用"="预算符的查询条件。

在一些实施方式中,如图8所示,所述sql语句自动优化装置还包括排序单元1004,用于在遍历调整后的查询条件的排序和所有查询所用的数据表的排序之前对调整后的查询条件和所有查询所用的数据表进行排序。

上述sql语句自动优化装置与上述sql语句自动优化方法一一对应,其具体的原理和过程与上述实施例所述方法相同,不再赘述。

上述sql语句自动优化装置可以实现为一种计算机程序的形式,计算机程序可以在如图9所示的计算机设备上运行。

图9为本发明一种计算机设备的结构组成示意图。该设备可以是终端,也可以是服务器,其中,终端可以是智能手机、平板电脑、笔记本电脑、台式电脑、个人数字助理和穿戴式装置等具有通信功能和语音输入功能的电子装置。服务器可以是独立的服务器,也可以是多个服务器组成的服务器集群。参照图9,该计算机设备500包括通过系统总线501连接的处理器502、非易失性存储介质503、内存储器504和网络接口505。其中,该计算机设备500的非易失性存储介质503可存储操作系统5031和计算机程序5032,该计算机程序5032被执行时,可使得处理器502执行一种sql语句自动优化方法。该计算机设备500的处理器502用于提供计算和控制能力,支撑整个计算机设备500的运行。该内存储器504为非易失性存储介质503中的计算机程序5032的运行提供环境,该计算机程序被处理器执行时,可使得处理器502执行一种sql语句自动优化方法。计算机设备500的网络接口505用于进行网络通信。本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

其中,所述处理器502执行所述计算机程序时实现如下操作:

获取用户输入的sql语句的执行计划,并向用户返回所述执行计划所需的第一时间耗费和第一资源耗费;

解析所述sql语句,读取查询条件、所有查询所用的数据表以及每张所述数据表的数据量和索引;

调整所述查询条件中的非法查询条件,其中所述非法查询条件为干扰所述索引执行的查询条件;

遍历调整后的查询条件的排序和所有查询所用的数据表的排序,重新获取调整后的sql语句的执行计划,并向用户返回调整后的执行计划所需的第二时间耗费和第二资源耗费;

分别比较所述第一时间耗费、第二时间耗费以及所述第一资源耗费、第二资源耗费,获取并返回时间耗费短且资源耗费少的执行计划。

在一个实施例中,所述获取输入的sql语句的执行计划包括如下步骤:

通过执行explainplanfor指令获取输入的sql语句的执行计划。

在一个实施例中,所述解析所述sql语句包括如下步骤:

调用正则表达式解析所述sql语句。

在一个实施例中,所述调整所述查询条件中的非法查询条件包括如下步骤:

使用or运算符将使用in的查询条件分解为至少一个使用"="预算符的查询条件。

在一个实施例中,所述处理器502执行所述计算机程序时还实现如下操作:

对调整后的查询条件和所有查询所用的数据表进行排序。

本领域技术人员可以理解,图9中示出的计算机设备的实施例并不构成对计算机设备具体构成的限定,在其他实施例中,计算机设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。例如,在一些实施例中,计算机设备仅包括存储器及处理器,在这样的实施例中,存储器及处理器的结构及功能与图9所示实施例一致,在此不再赘述。

本发明提供了一种计算机可读存储介质,计算机可读存储介质存储有一个或者一个以上计算机程序,所述一个或者一个以上计算机程序可被一个或者一个以上的处理器执行,以实现以下步骤:

获取用户输入的sql语句的执行计划,并向用户返回所述执行计划所需的第一时间耗费和第一资源耗费;

解析所述sql语句,读取查询条件、所有查询所用的数据表以及每张所述数据表的数据量和索引;

调整所述查询条件中的非法查询条件,其中所述非法查询条件为干扰所述索引执行的查询条件;

遍历调整后的查询条件的排序和所有查询所用的数据表的排序,重新获取调整后的sql语句的执行计划,并向用户返回调整后的执行计划所需的第二时间耗费和第二资源耗费;

分别比较所述第一时间耗费、第二时间耗费以及所述第一资源耗费、第二资源耗费,获取并返回时间耗费短且资源耗费少的执行计划。

在一个实施例中,所述获取输入的sql语句的执行计划包括如下步骤:

通过执行explainplanfor指令获取输入的sql语句的执行计划。

在一个实施例中,所述解析所述sql语句包括如下步骤:

调用正则表达式解析所述sql语句。

在一个实施例中,所述调整所述查询条件中的非法查询条件包括如下步骤:

使用or运算符将使用in的查询条件分解为至少一个使用"="预算符的查询条件。

在一个实施例中,所述一个或者一个以上计算机程序可被一个或者一个以上的处理器执行,以实现以下步骤:

对调整后的查询条件和所有查询所用的数据表进行排序。

本发明前述的存储介质包括:磁碟、光盘、只读存储记忆体(read-onlymemory,rom)等各种可以存储程序代码的介质。

本发明所有实施例中的单元可以通过通用集成电路,例如cpu(centralprocessingunit,中央处理器),或通过asic(applicationspecificintegratedcircuit,专用集成电路)来实现。

本发明实施例sql语句自动优化方法中的步骤可以根据实际需要进行顺序调整、合并和删减。

本发明实施例sql语句自动优化装置中的单元可以根据实际需要进行合并、划分和删减。

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

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