查询语句优化装置和查询语句优化方法

文档序号:6378039阅读:151来源:国知局

专利名称::查询语句优化装置和查询语句优化方法
技术领域
:本发明涉及数据库查询领域,具体而言,涉及一种查询语句优化装置和一种查询语句优化方法。
背景技术
:如今,数据库已成为一个成熟软件系统中不可或缺的必要组成部分,而对数据库的查询操作,则是数据库系统中,最简单,最常用的操作。但是随着企业业务复杂度的不断提高,对数据库的查询操作也变得越来越复杂,这就需要编写更加复杂的数据库查询语句,即SQL语句,来访问数据库。常见的复杂SQL语句一般都包含嵌套子查询,简单的只嵌套一层,复杂的将会嵌套好几层。嵌套子查询能解决一些复杂的业务需求,但是很多时候,子查询会包含一些冗余的字段信息,即在查询中没有必要出现的字段信息,这样在执行查询时,就会影响执行效率。现有的技术优化了表的关联关系,和逻辑关系,但没有优化嵌套子查询,即主从表的嵌套关系,不能从根本上解决SQL语句执行上的效率问题。因此,需要一种新的技术方案,将SQL语句子查询中的冗余字段信息过滤掉,将复杂SQL语句优化展平,从而提高SQL语句的执行效率。
发明内容本发明所要解决的技术问题在于,提供一种新的技术方案,将SQL语句子查询中的冗余字段信息过滤掉,将复杂SQL语句优化展平,从而提高SQL语句的执行效率。有鉴于此,本发明提供一种查询语句优化装置,包括查询定位模块,获取所述原始查询语句中的外部查询和子查询;查询合并模块,将所述外部查询和所述子查询合并为新外部查询;查询语句生成模块,根据所述新外部查询,生成新查询语句。应用本技术方案,可以定位至查询语句中的外部查询和子查询,从而将外部查询和子查询进行合并操作,去掉嵌套子查询,以实现展平、精简SQL语句的目的。在上述技术方案中,优选地,所述查询定位模块从所述原始查询语句中检索特定字符串,并根据检索到的首个特定字符串获取所述外部查询,根据检索到的其他特定字符串确定所述子查询。应用本技术方案,根据检索到的特定字符串的不同,获取到外部查询和子查询。在上述技术方案中,优选地,还包括冗余字段过滤模块,获取所述外部查询对应的第一查询字段和所述子查询对应的第二查询字段,过滤掉所述第二查询字段中未包含在所述第一查询字段中的字段,所述查询合并模块还根据所述第一查询字段和经过滤后的所述第二查询字段,确定所述新外部查询对应的查询字段,所述查询语句生成模块根据所述新外部查询以及所述新外部查询的查询字段,生成所述新查询语句。应用本技术方案,对比外部查询和子查询的信息,可以将冗余字段过滤掉,生成精简的查询语句,从而提高SQL语句的执行效率。在上述技术方案中,优选地,还包括脚本对象化模块,生成所述外部查询和所述子查询的对象,所述查询合并模块将所述外部查询和所述子查询的对象合并为新外部查询的对象;对象脚本化模块,根据所述新外部查询的对象处理生成脚本,所述查询语句生成模块将所述脚本作为所述新查询语句。应用本技术方案,通过脚本对象化、对象脚本化的操作,将原始的SQL语句加载到内存中进行处理,以及将新的查询对象导出给优化的SQL语句。在上述技术方案中,优选地,还包括语法校验模块,对所述新查询语句进行语法校验,并在校验成功时输出所述新查询语句,在校验失败时输出异常提示。应用本技术方案,新的查询语句在语法校验成功时,进行展平输出,在语法校验失败时,输出异常提示,从而确保展平后语句的正确性。本发明还提供了一种查询语句优化方法,包括步骤202,获取所述原始查询语句中的外部查询和子查询;步骤204,将所述外部查询和所述子查询合并为新外部查询;步骤206,根据所述新外部查询,生成新查询语句。应用本技术方案,可以定位至查询语句中的外部查询和子查询,从而将外部查询和子查询进行合并操作,去掉嵌套子查询,以实现展平、精简SQL语句的目的。在上述技术方案中,优选地,所述步骤202包括从所述原始查询语句中检索特定字符串,并根据检索到的首个特定字符串获取所述外部查询,根据检索到的其他特定字符串确定所述子查询。应用本技术方案,根据检索到的特定字符串的不同,获取到外部查询和子查询。在上述技术方案中,优选地,还包括获取所述外部查询对应的第一查询字段和所述子查询对应的第二查询字段,过滤掉所述第二查询字段中未包含在所述第一查询字段中的字段;所述步骤204还包括根据所述第一查询字段和经过滤后的所述第二查询字段,确定所述新外部查询对应的查询字段;步骤206包括根据所述新外部查询以及所述新外部查询的查询字段,生成所述新查询语句。应用本技术方案,对比外部查询和子查询的信息,可以将冗余字段过滤掉,生成精简的查询语句,从而提高SQL语句的执行效率。在上述技术方案中,优选地,所述步骤202还包括生成所述外部查询和所述子查询的对象;所述步骤204包括将所述外部查询和所述子查询的对象合并为新外部查询的对象;所述步骤206包括根据所述新外部查询的对象处理生成脚本,并将所述脚本作为所述新查询语句。应用本技术方案,通过脚本对象化、对象脚本化的操作,将原始的SQL语句加载到内存中进行处理,以及将新的查询对象导出给优化的SQL语句。在上述技术方案中,优选地,还包括对所述新查询语句进行语法校验,并在校验成功时输出所述新查询语句,在校验失败时输出异常提示。应用本技术方案,新的查询语句在语法校验成功时,进行展平输出,在语法校验失败时,输出异常提示,从而确保展平后语句的正确性。图I示出了根据本发明的实施例的查询语句优化装置框图;图2示出了根据本发明的实施例的查询语句优化方法的流程图;图3示出了根据本发明的实施例的查询语句优化的流程图;图4示出了根据本发明的实施例的查询语句优化模块框图5示出了根据本发明的实施例的SQL脚本对象化结构图;图6示出了根据本发明的实施例的SQL对象脚本化流程图。具体实施例方式为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。图I示出了根据本发明的实施例的查询语句优化装置框图。如图I所示,本发明的查询语句优化装置100包括查询定位模块102,获取所述·原始查询语句中的外部查询和子查询;查询合并模块104,将所述外部查询和所述子查询合并为新外部查询;查询语句生成模块106,根据所述新外部查询,生成新查询语句。应用本技术方案,可以定位至查询语句中的外部查询和子查询,从而将外部查询和子查询进行合并操作,去掉嵌套子查询,以实现展平、精简SQL语句的目的。在上述技术方案中,优选地,所述查询定位模块102从所述原始查询语句中检索特定字符串,并根据检索到的首个特定字符串获取所述外部查询,根据检索到的其他特定字符串确定所述子查询。应用本技术方案,根据检索到的特定字符串的不同,获取到外部查询和子查询。在上述技术方案中,优选地,还包括冗余字段过滤模块108,获取所述外部查询对应的第一查询字段和所述子查询对应的第二查询字段,过滤掉所述第二查询字段中未包含在所述第一查询字段中的字段,所述查询合并模块104还根据所述第一查询字段和经过滤后的所述第二查询字段,确定所述新外部查询对应的查询字段,所述查询语句生成模块106根据所述新外部查询以及所述新外部查询的查询字段,生成所述新查询语句。应用本技术方案,通过脚本对象化、对象脚本化的操作,将原始的SQL语句加载到内存中进行处理,及将新的查询对象导出给优化的SQL语句。在上述技术方案中,优选地,还包括脚本对象化模块110,生成所述外部查询和所述子查询的对象,所述查询合并模块104将所述外部查询和所述子查询的对象合并为新外部查询的对象;对象脚本化模块112,根据所述新外部查询的对象处理生成脚本,所述查询语句生成模块106将所述脚本作为所述新查询语句。应用本技术方案,简化了SQL语句展平和过滤冗余字段的过程,使操作更加灵活、方便。在上述技术方案中,优选地,还包括语法校验模块114,对所述新查询语句进行语法校验,并在校验成功时输出所述新查询语句,在校验失败时输出异常提示。应用本技术方案,新的查询语句在语法校验成功时,进行展平输出,在语法校验失败时,输出异常提示,从而确保展平后语句的正确性。图2示出了根据本发明的实施例的查询语句优化方法的流程图。如图2所示,本发明的查询语句优化方法包括步骤202,获取所述原始查询语句中的外部查询和子查询;步骤204,将所述外部查询和所述子查询合并为新外部查询;步骤206,根据所述新外部查询,生成新查询语句。应用本技术方案,可以定位至查询语句中的外部查询和子查询,从而将外部查询和子查询进行合并操作,去掉嵌套子查询,以实现展平、精简SQL语句的目的。在上述技术方案中,优选地,所述步骤202包括从所述原始查询语句中检索特定字符串,并根据检索到的首个特定字符串获取所述外部查询,根据检索到的其他特定字符串确定所述子查询。应用本技术方案,根据检索到的特定字符串的不同,获取到外部查询和子查询。在上述技术方案中,优选地,还包括获取所述外部查询对应的第一查询字段和所述子查询对应的第二查询字段,过滤掉所述第二查询字段中未包含在所述第一查询字段中的字段;所述步骤204还包括根据所述第一查询字段和经过滤后的所述第二查询字段,确定所述新外部查询对应的查询字段;步骤206包括根据所述新外部查询以及所述新外部查询的查询字段,生成所述新查询语句。应用本技术方案,对比外部查询和子查询的信息,可以将冗余字段过滤掉,生成精简的查询语句,从而提高SQL语句的执行效率。在上述技术方案中,优选地,所述步骤202还包括生成所述外部查询和所述子查询的对象;所述步骤204包括将所述外部查询和所述子查询的对象合并为新外部查询的对象;所述步骤206包括根据所述新外部查询的对象处理生成脚本,并将所述脚本作为所述新查询语句。应用本技术方案,通过脚本对象化、对象脚本化的操作,将原始的SQL语句加载到内存中进行处理,以及将新的查询对象导出给优化的SQL语句。在上述技术方案中,优选地,还包括对所述新查询语句进行语法校验,并在校验成功时输出所述新查询语句,在校验失败时输出异常提示。应用本技术方案,新的查询语句在语法校验成功时,进行展平输出,在语法校验失败时,输出异常提示,从而确保展平后语句的正确性。图3示出了根据本发明的实施例的查询语句优化的流程图。如图3所示,本发明的查询语句优化的具体流程如下步骤302,加载原始SQL语句。步骤304,使用SQL解析器将原始SQL语句解析成SQL对象。通过SQL解析器,对复杂SQL语句进行解析,将SQL脚本,解析为SQL对象,之所以做脚本对象化的处理,是因为对象操作起来比字符串更加灵活和方便。步骤306,定位原始SQL语句中的子查询。定位SQL语句中的子查询,同样做对象化处理,方便后续的操作。步骤308,过滤子查询中的冗余字段。根据外部查询的SQL对象和子查询的SQL对象,可以比较各个查询的字段信息,进而判断出哪些字段为冗余字段,冗余字段就是对查询结果没有任何影响的字段,这些字段没有必要出现在查询语句中,因此,为了提高SQL语句的执行效率,将冗余字段过滤掉。步骤310,将子查询与外部查询合并。把子查询和外部查询进行合并操作,这样就去掉了嵌套子查询。如果有多层嵌套,每一层都采取上面的方式对其进行处理。步骤312,使用SQL翻译器将SQL对象翻译成标准的SQL语句。步骤314,进行SQL语法校验。如果通过了校验,进入步骤318;如果没有通过校验,进入步骤316。步骤316,抛出异常。步骤318,生成展平后的SQL语句。为了能更好的理解该方案,这里以一个简单的例子作为辅助说明。例如有这样一条嵌套子查询的SQL语句selectt.a,t.b,t.cfrom(selecta,b,c,d,e,ffromt);经过SQL解析器解析后会生成一个Select对象,字段列表包含t.a,t.b,t.c,会生成From对象,里面包含子查询SubSelect对象,SubSelect对象的字段列表包含t.a,t.b,t.c,t.d,t.e,t.fο而这条语句最终是要查询t表的a,b,c三个字段,子查询中的d,e,f字段,是冗余字段,因此将他们过滤掉。然后将SubSelect和Selelct对象合并为一个Select对象,保留Select的FieldList字段和SubSelect中的Table等对象。最终,用SQL翻译器,将新的Selelct对象翻译为标准SQL语句selectt.a,t.b,t.cfromt。如果校验通过,这就是最终结果。图4示出了根据本发明的实施例的查询语句优化模块框图。如图4所示,本发明的查询语句优化模块包括SQL语句加载模块402,SQL脚本对象化模块404,SQL子查询定位模块406,SQL优化合并模块408,SQL对象脚本化模块410,SQL语法校验模块412,通过上述模块将SQL语句展平后输出。各模块详细实现说明如下SQL语句加载模块402:该模块主要使用SQL语句加载器加载原始SQL语句。加载器实现简单,就是读取一条SQL语句,以供解析器解析使用,读取SQL语句时不做任何处理,保持原样。SQL脚本对象化模块404:该模块主要使用SQL脚本解析器解析SQL脚本。脚本解析器将一条SQL语句解析成一个Select对象,子查询解析为SubSelect对象。其中,要查询的字段信息,放在一个列表中保存,比如叫做FieldList。将SQL脚本解析为对象,操作更加灵活、方便。解析过程及Select对象主要结构如图5所示。如图5所示,脚本被解析器解析后,按SQL语句的结构解析出其中的select对象(定位到外部查询)、fieldlist字段列表、from对象、table对象以及subselect对象(定位到子查询)。SQL子查询定位模块406:该模块主要使用子查询定位器定位SQL子查询。其实,子查询定位的过程包含在脚本解析的过程中,如果在解析From对象的时候,判断,如果有形如“(select%)”的字符串,就将其定义为子查询,对应解析为SubSelect对象。SQL优化合并模块408:该模块是整个展平方法的主要模块,实现了过滤子查询中冗余字段,将子查询与外部查询合并的功能。SQL解析时,会生成对应的Select对象和SubSelect对象,字段信息放入FieldList中保存。我们利用两个对象的FiledList进行判断,在SubSelect的FieldList中,而不在Select的FieldList中的,就是冗余字段,过滤掉,然后将SubSelect和Select对象合并为一个Select对象,保留Select的FieldList字段和SubSelect中的Table等对象。SQL对象脚本化模块410:该模块使用SQL翻译器将合并后的Select对象,翻译为标准的SQL语句。和解析器原理相反,其翻译过程如图6所示,Select对象由SQL翻译器604输出为标准的SQL语句606。SQL语法校验模块412:校验SQL语法是否符合SQL语法规范,比如表名、字段名是否符合规范等。以上结合附图详细说明了本发明的技术方案。通过本发明的技术方案,根据外部查询和子查询,可以比较各个查询的字段信息,进而判断出哪些字段为冗余字段,进而将冗余字段过滤掉,提高SQL语句的执行效率,同时,将外部查询和子查询进行合并操作,去掉嵌套子查询,以实现展平、精简SQL语句的目的。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。权利要求1.一种查询语句优化装置,其特征在于,包括查询定位模块,获取所述原始查询语句中的外部查询和子查询;查询合并模块,将所述外部查询和所述子查询合并为新外部查询;查询语句生成模块,根据所述新外部查询,生成新查询语句。2.根据权利要求I所述的查询语句优化装置,其特征在于,所述查询定位模块从所述原始查询语句中检索特定字符串,并根据检索到的首个特定字符串获取所述外部查询,根据检索到的其他特定字符串确定所述子查询。3.根据权利要求I所述的查询语句优化装置,其特征在于,还包括冗余字段过滤模块,获取所述外部查询对应的第一查询字段和所述子查询对应的第二查询字段,过滤掉所述第二查询字段中未包含在所述第一查询字段中的字段,所述查询合并模块还根据所述第一查询字段和经过滤后的所述第二查询字段,确定所述新外部查询对应的查询字段,所述查询语句生成模块根据所述新外部查询以及所述新外部查询的查询字段,生成所述新查询语句。4.根据权利要求I所述的查询语句优化装置,其特征在于,还包括脚本对象化模块,生成所述外部查询和所述子查询的对象,所述查询合并模块将所述外部查询和所述子查询的对象合并为新外部查询的对象;对象脚本化模块,根据所述新外部查询的对象处理生成脚本,所述查询语句生成模块将所述脚本作为所述新查询语句。5.根据权利要求I至4中任一项所述的查询语句优化装置,其特征在于,还包括语法校验模块,对所述新查询语句进行语法校验,并在校验成功时输出所述新查询语句,在校验失败时输出异常提示。6.一种查询语句优化方法,其特征在于,包括步骤202,获取所述原始查询语句中的外部查询和子查询;步骤204,将所述外部查询和所述子查询合并为新外部查询;步骤206,根据所述新外部查询,生成新查询语句。7.根据权利要求6所述的查询语句优化方法,其特征在于,所述步骤202包括从所述原始查询语句中检索特定字符串,并根据检索到的首个特定字符串获取所述外部查询,根据检索到的其他特定字符串确定所述子查询。8.根据权利要求6所述的查询语句优化方法,其特征在于,在所述步骤204之前,还包括获取所述外部查询对应的第一查询字段和所述子查询对应的第二查询字段,过滤掉所述第二查询字段中未包含在所述第一查询字段中的字段;所述步骤204还包括根据所述第一查询字段和经过滤后的所述第二查询字段,确定所述新外部查询对应的查询字段;步骤206包括根据所述新外部查询以及所述新外部查询的查询字段,生成所述新查询语句。9.根据权利要求6所述的查询语句优化方法,其特征在于,所述步骤202还包括生成所述外部查询和所述子查询的对象;所述步骤204包括将所述外部查询和所述子查询的对象合并为新外部查询的对象;所述步骤206包括根据所述新外部查询的对象处理生成脚本,并将所述脚本作为所述新查询语句。10.根据权利要求6至9中任一项所述的查询语句优化方法,其特征在于,还包括对所述新查询语句进行语法校验,并在校验成功时输出所述新查询语句,在校验失败时输出异常提示。全文摘要本发明提供一种查询语句优化装置,包括查询定位模块,获取所述原始查询语句中的外部查询和子查询;查询合并模块,将所述外部查询和所述子查询合并为新外部查询;查询语句生成模块,根据所述新外部查询,生成新查询语句。相应地,本发明还提供一种查询语句优化方法。应用本技术方案,根据外部查询和子查询,可以比较各个查询的字段信息,进而判断出哪些字段为冗余字段,进而将冗余字段过滤掉,提高SQL语句的执行效率,同时,将外部查询和子查询进行合并操作,去掉嵌套子查询,以实现展平、精简SQL语句的目的。文档编号G06F17/30GK102902778SQ201210370960公开日2013年1月30日申请日期2012年9月28日优先权日2012年9月28日发明者张一桐申请人:用友软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1