远程数据库对象的优化方法、装置、设备及存储介质与流程

文档序号:20440795发布日期:2020-04-17 22:23阅读:126来源:国知局
本发明实施例涉及数据库
技术领域
:,尤其涉及一种远程数据库对象的优化方法、装置、设备及存储介质。
背景技术
::数据库链接(databaselink)简称为dblink,它记录了远程数据库的连接和路径信息,用于建立本地数据库与远程数据库的联系。当通过dblink访问的远程数据库对象对应的远程数据网络传输量过于庞大,则会严重影响本地数据库中结构化查询语言(structuredquerylanguage,sql)的执行效率。目前针对原始sql、子sql、视图这种可以独立执行的sql中远程数据库对象的一种优化方法为:(1)如果原始sql有且只涉及一个远程数据库的数据库对象(即不包含本地数据库或其它远程数据库的数据库对象),则将原始sql直接发送到对应的远程数据库执行,本地数据库负责接收对应远程数据库返回的远程数据并向上传递,最终输出给用户;(2)不满足第一种情况时,如果原始sql的子sql有且只涉及一个远程数据库,则将子sql(子sql可以作为原始sql的任意组成部分)发送到指定的远程数据库执行,本地数据库负责接收对应远程数据库返回的数据,并基于原始sql执行对所接收远程数据的后续处理;(3)不满足前两种情况时,如果sql的查询对象(from项)是视图,则考虑视图的定义sql是否满足第一或第二两种情况,如果满足,则按照前两种情况中对应的方法对视图的定义sql进行优化。上述优化方法存在的一个问题在于:要求可优化sql中的所有数据库对象只涉及一个远程数据库,即满足可优化sql的条件过于严格,一旦sql涉及本地数据库或其它远程数据库的数据库对象,则不能执行优化。技术实现要素:本发明实施例提供一种远程数据库对象的优化方法,以实现在减少或消除远程数据库节点返回本地数据库节点数据量的同时,降低远程数据库对象优化对待优化sql语句的要求,增加对远程数据库对象进行优化时的可优化场景。第一方面,本发明实施例提供了一种远程数据库对象的优化方法,该方法包括:基于解析目标结构化查询语言sql语句所得的各个语法项,结合预设的标识变量,得到所述目标sql语句对应的优化sql语句;基于所述优化sql语句得到所述目标sql语句对应的目标执行计划,所述目标执行计划用于指示将所述优化sql语句发送至所述标识变量对应的远程数据库节点执行;执行所述目标执行计划,以优化所述远程数据库节点的网络数据传输量。第二方面,本发明实施例还提供了一种远程数据库对象的优化装置,该装置包括:语句优化模块,用于基于解析目标结构化查询语言sql语句所得的各个语法项,结合预设的标识变量,得到所述目标sql语句对应的优化sql语句;计划生成模块,用于基于所述优化sql语句得到所述目标sql语句对应的目标执行计划,所述目标执行计划用于指示将所述优化sql语句发送至所述标识变量对应的远程数据库节点执行;计划执行模块,用于执行所述目标执行计划,以优化所述远程数据库节点的网络数据传输量。第三方面,本发明实施例还提供了一种远程数据库对象的优化设备,该设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序;所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例第一方面所述的远程数据库对象的优化方法。第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如本发明实施例第一方面所述的远程数据库对象的优化方法。本发明实施例通过得到目标sql语句对应待发送至相应远程数据库节点执行的优化sql语句及对应的目标执行计划,在减少或消除远程数据库节点返回本地数据库节点数据量的同时,降低了远程数据库对象优化对待优化sql语句的要求,增加了对远程数据库对象进行优化时的可优化场景。附图说明图1是本发明实施例一提供的一种远程数据库对象的优化方法的流程示意图;图2是本发明实施例二提供的一种远程数据库对象的优化方法的流程示意图;图3是本发明实施例三提供的一种远程数据库对象的优化装置的结构示意图;图4是本发明实施例四提供的一种远程数据库对象的优化设备的结构示意图。具体实施方式下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。实施例一图1为本发明实施例一提供的一种远程数据库对象的优化方法的流程示意图,本实施例可适用于增加对涉及本地数据库或其它远程数据库的数据库对象的sql的可优化场景的情况,该方法可以由远程数据库对象的优化装置来执行,该装置可以通过软件和/或硬件的方式实现,并可集成在远程数据库对象的优化设备中。可以理解的是,一条sql语句是由多个语法项组成的,一条sql语句可包含的语法项分别为:select项、from项、where项、group项、having项、orderby项等,一条sql语句中被访问的各数据库对象被包含在第一语法项from项中。本发明实施例的主要目的在于降低现有的对sql语句进行整体优化的条件,增加对涉及本地数据库或其它远程数据库的数据库对象的sql的扩展优化场景,并且本发明实施例针对的是sql语句的from项以外的其他项中包含本地数据库或其它远程数据库的数据库对象的情况进行优化,因此,from项中包含本地数据库或其它远程数据库的数据库对象的情况,不属于本发明实施例针对的优化场景。需要说明的是,一条sql语句的所有语法项还可能包含子sql语句,本发明实施例所述的优化方法既适用于不包含子sql语句的sql语句,也适用于包含子sql语句的sql语句。为了简化对本发明实施例所述优化方法的阐述,以下均以不包含子sql语句的目标sql语句进行说明。如图1所示,本实施例提供的远程数据库对象的优化方法,具体包括如下步骤:s101、基于解析目标结构化查询语言sql语句所得的各个语法项,结合预设的标识变量,得到所述目标sql语句对应的优化sql语句。其中,所述目标sql语句是指原始待执行的sql语句,可选地,所述目标sql语句为针对原始sql语句、子sql语句以及视图等可以独立执行的sql语句。所述标识变量是指用于指示所述目标远程数据库对象所属的远程数据库的变量;可选地,所述标识变量的变量值为所述目标sql语句中目标远程数据库对象所属远程数据库的标识号id,其中,将所述目标sql语句的from项只包含属于同一个远程数据库的远程数据库对象时的各所述远程数据库对象确定为所述目标sql语句的目标远程数据库对象;可选地,在结合预设的标识变量,得到所述目标sql语句对应的优化sql语句之前,将所述标识变量初始化为空。可选地,解析目标sql语句,得到所述目标sql语句对应的第一语法项和第二语法项,其中,所述第一语法项为所述目标sql语句中第一个被执行的语法项,所述第二语法项为所述目标sql语句中除所述第一语法项以外的其他语法项;依次检查所述第一语法项中包含的所有第一待查询对象,并基于各所述第一待查询对象和所述标识变量的当前变量值确定所述标识变量对应的目标变量值;依次检查所属第二语法项包含的所有第二待查询对象,并基于各所述第二待查询对象和所述目标变量值确定所述目标sql语句包含的至少一个扩展优化对象;基于各所述扩展优化对象,结合各所述语法项,得到所述目标sql语句对应的优化sql语句。其中,所述第一语法项即所述目标sql语句的from项;所述第二语法项即所述目标sql语句中from项以外的其他语法项。所述第一待查询对象即所述from项中包含的数据库对象。所述第二待查询对象即所述目标sql语句中from项以外的其他语法项中包含的数据库对象。所述扩展优化对象可以理解为所述目标sql语句from项以外的其他语法项中包含的符合本发明实施例新增的扩展优化场景的数据库对象。可以理解的是,from项中包含本地数据库或其它远程数据库的数据库对象的情况,不属于本发明实施例针对的优化场景,因此,通过对目标sql语句解析,得到目标sql语句的各个语法项,并依次检查目标sql语句的第一语法项from项中包含的所有数据库对象,可以确认所述目标sql语句的from项是否只包含远程数据库对象,以及包含的所有远程数据库对象是否属于同一远程数据库。只有在from项只包含远程数据库对象,且所有远程数据库对象属于同一远程数据库时,才能进一步执行本发明实施例的后续优化步骤,此时,可将from项包含的远程数据库对象确定为目标远程数据库对象。设置标识变量的目的即在于对from项所包含数据库对象是否归属于同一远程数据库进行判断。在检查完from项后,通过检查from项以外的其他语法项可以确定所述目标sql语句中是否有符合本发明实施例扩展优化场景的本地数据库或其他远程数据库(即目标远程数据库对象所属远程数据库之外的其他远程数据库)的数据库对象,并将符合本发明实施例扩展优化场景的本地数据库或其他远程数据库的数据库对象确定为所述目标sql语句的扩展优化对象。在具体优化时,本发明实施例采用将各所述扩展优化对象转化为以一个对应的参数变量表示的形式,并建立各所述参数变量与相应扩展优化对象所属表达式之间的映射关系,由此,得到所述目标sql语句对应的优化sql语句;之后,通过确定各扩展优化对象所属表达式的结果值,并根据各扩展优化对象所属表达式与对应参数变量之间的映射关系来确定各参数变量的结果值,并与所述优化sql语句一起发送至所述标识变量对应的远程数据库节点。其中,所述扩展优化对象所属表达式可以理解为包含所述扩展优化对象的表达式,即将所述扩展优化对象从单纯的数据库对象延展为包含所述数据库对象的表达式。需要说明的是,本发明实施例中,包含扩展优化对象的表达式中可以只包含所述扩展优化对象,即将目标sql语句中以单纯数据库对象形式出现的扩展优化对象看作一种特殊的扩展优化对象表达式,此时,所述扩展优化对象所属的表达式即为所述扩展优化对象本身。可以理解的是,对于查询类的sql语句,应用本发明实施例所述的优化方法,可实现直接在远程数据库节点执行对目标远程数据库对象的查询操作,从而减少目标远程数据库对象返回本地数据库节点的数据量,降低对应远程数据库节点的网络数据传输量;而对于插入、更新或删除类的sql语句,应用本发明实施例所述的优化方法,可实现直接在远程数据库节点实现执行对目标远程数据库对象的插入、更新或删除操作,从而不必再将目标远程数据库对象的任何数据返回本地数据库节点,而只需要将相应操作执行成功或失败的结果返回本地数据库节点即可。而要使from项以外的其他语法项中包含的本地数据库或其他远程数据库的数据库对象可以作为本发明实施例所述的扩展优化对象,从而可以将所述本地数据库或其他远程数据库的数据库对象转化为参数变量表示的形式,以实现对目标远程数据库对象的优化,则所述本地数据库或其他远程数据库的数据库对象必须满足一定的条件。可选地,所述符合本发明实施例可优化场景的本地数据库或其他远程数据库的数据库对象需满足下列任一条件:(1)所述本地数据库或其他远程数据库的数据库对象为包中定义的变量且对应返回数据的类型为预设数据类型。其中,预设数据类型是指常见数据库系统都支持的基本数据类型,如:数值类型(int、bigint、dec等)、字符串类型(char、varchar等)、日期时间类型(date、timestamp等)、时间间隔类型、大字段等常规数据类型。(2)所述本地数据库或其他远程数据库的数据库对象为确定性函数或包中定义的确定性函数且对应返回数据的类型为预设数据类型。其中,所述确定性函数在多次重复计算时返回值是固定唯一的。(3)所述本地数据库或其他远程数据库的数据库对象为常量且对应返回数据的类型为预设数据类型。需要说明的是,不同数据库系统可以作为常量的数据库对象可能不同,需要视具体情况而定。本发明实施例中将条件(1)和(2)中的数据库对象视为等价于常量的数据库对象。本发明实施例所述的预设类型数据库对象既包括条件(3)中本身定义为常量的数据库对象,也包括条件(1)和(2)中等价于常量的数据库对象,且所述预设类型数据库对象需满足对应返回数据的类型为预设数据类型,可选地,所述预设数据类型如条件(1)所述。可以理解的是,当数据类型为复杂数据类型时则无法采用本发明实施例的优化方法,如类(type)在各大数据库内部存储结构和实现都不统一,本地数据库定义的type数据类型发送给远程数据库时可能无法识别,即使能够识别也可能对应type虽然同名或id相同但定义不一致,从而造成执行结果错误甚至引发服务器崩溃。s102、基于所述优化sql语句得到所述目标sql语句对应的目标执行计划,所述目标执行计划用于指示将所述优化sql语句发送至所述标识变量对应的远程数据库节点执行。其中,执行计划可以理解为一条sql语句在数据库中实际执行时对应的执行操作步骤;通常,执行计划为由各类操作符组成树形结构。所述目标执行计划可以理解为基于优化后的目标sql语句生成的执行计划。可以理解的是,每条sql语句在执行前,都会由数据库查询优化器分析出一个资源占用最少或执行最快的查询执行方案,作为该sql语句的执行计划。在得到目标sql语句的优化sql语句后,基于将所述优化sql语句发送至所述标识变量对应的远程数据库节点执行的方案,生成本地数据库节点对应的执行计划,即所述目标执行计划。s103、执行所述目标执行计划,以优化所述远程数据库节点的网络数据传输量。可选地,确定各所述扩展优化对象所属表达式的结果值,并根据相应的映射关系链表,将各所述结果值对应确定为对应参数变量的结果值;通过执行所述目标执行计划,将各所述参数变量的结果值与所述优化sql语句一起发送至所述标识变量对应的远程数据库节点执行,以优化所述远程数据库节点的网络数据传输量。可以理解的是,将扩展优化对象所属表达式转化为参数变量后,可在执行所述目标执行计划之前先获取各参数变量对应的结果值,并通过执行所述目标执行计划,将各结果值与所述优化sql语句一起发送至所述标识变量对应的远程数据库节点,由此,在远程数据库节点,以参数绑定的方式执行所述优化sql语句,一次性实现直接在远程数据库节点对目标远程数据库对象进行插入、删除、更新或查询操作,从而减少或消除目标远程数据库对象返回本地数据库节点的数据,实现对远程数据库节点网络数据传输量的优化。本发明实施例通过得到目标sql语句对应待发送至标识变量所指示的远程数据库节点进行执行的优化sql语句及对应的目标执行计划,在减少或消除远程数据库节点返回本地数据库节点数据量的同时,降低了远程数据库对象优化对待优化sql语句的要求,增加了远程数据库对象的可优化场景。实施例二图2是本发明实施例二提供的一种远程数据库对象的优化方法的流程示意图,本实施例在实施例一的基础上进一步优化。本实施例将所述基于解析目标结构化查询语言sql语句所得的各个语法项,结合预设的标识变量,得到所述目标sql语句对应的优化sql语句,具体化为:解析目标sql语句,得到所述目标sql语句对应的第一语法项和第二语法项,其中,所述第一语法项为所述目标sql语句中第一个被执行的语法项,所述第二语法项为所述目标sql语句中除所述第一语法项以外的其他语法项;依次检查所述第一语法项中包含的所有第一待查询对象,并基于各所述第一待查询对象和所述标识变量的当前变量值确定所述标识变量对应的目标变量值;依次检查所述第二语法项包含的所有第二待查询对象,并基于各所述第二待查询对象和所述目标变量值确定所述目标sql语句包含的至少一个扩展优化对象;基于各所述扩展优化对象,结合各所述语法项,得到所述目标sql语句对应的优化sql语句。本实施例还将所述执行所述目标执行计划,以优化所述远程数据库节点的网络数据传输量,具体化为:确定各所述扩展优化对象所属表达式的结果值,并根据相应的映射关系链表,将各所述结果值对应确定为相应参数变量的结果值;通过执行所述目标执行计划,将各所述参数变量的结果值与所述优化sql语句一起发送至所述标识变量对应的远程数据库节点执行,以优化所述远程数据库节点的网络数据传输量。如图2所示,本实施例提供的远程数据库对象的优化方法,具体包括如下步骤:s201、解析目标sql语句,得到所述目标sql语句对应的第一语法项和第二语法项。其中,所述第一语法项为所述目标sql语句中第一个被执行的语法项,所述第二语法项为所述目标sql语句中除所述第一语法项以外的其他语法项。s202、依次检查所述第一语法项包含的所有第一待查询对象,并基于各所述第一待查询对象和所述标识变量的当前变量值确定所述标识变量对应的目标变量值。可选地,在检查所述所述第一语法项之前,设置标识变量,并初始化为空。示例性的,由于当前检查的目标sql语句对应的远程数据库未知,设置相应的标识变量,记为opt_dblink,设置为空。具体地,所述基于各所述第一待查询对象和所述标识变量的当前变量值确定所述标识变量对应的目标变量值,包括如下操作:s2021、针对每个第一待查询对象,当所述第一待查询对象为远程数据库对象时,确定所述标识变量的当前变量值;否则,结束优化。s2022、若所述当前变量值为空,则将所述第一待查询对象确定为所述目标sql语句的目标远程数据库对象,并将所述目标远程数据库对象所对应属远程数据库的id确定为所述标识变量的当前目标变量值。s2023、若所述当前变量值非空,且所述当前变量值对应的远程数据库对象与所述第一待查询对象属于所述当前变量值同一个指示的远程数据库,则将所述第一待查询对象确定为所述目标sql语句中待优化的目标远程数据库对象,并将所述当前变量值确定为所述标识变量对应的目标变量值。示例性的,查询对象一般为表或视图,或者数据库对象同义词。from项的具体检查方法如下:(1)当查询对象为本地数据库对象时,结束优化,退出;(2)当查询对象为远程数据库对象时:如果opt_dblink为空,则设置opt_dblink的值,例如,设置opt_dblink的值为远程数据库对象所属远程数据库的id;如果opt_dblink为非空,则检查opt_dblink与当前查询对象是否属于同一个远程数据库,如果不是,则结束优化,退出。s203、依次检查所述第二语法项包含的所有第二待查询对象,并基于各所述第二待查询对象和所述目标变量值确定所述目标sql语句包含的至少一个扩展优化对象。可选地,步骤s203包括如下操作:s2031、针对每个第二待查询对象,当所述第二待查询对象不属于所述目标变量值指示的远程数据库时,判断所述第二待查询对象是否为预设类型数据库对象。其中,所述预设类型数据库对象为作为或等价于常量且对应返回数据的类型为预设数据类型的数据库对象。可以理解的是,本发明实施例在于对目标sql语句from项以外的语法项中包含本地数据库或其他数据库的数据库对象的场景进行优化,当所述第二待查询对象属于所述目标变量值指示的远程数据库时,可直接采用现有的远程数据库对象优化方法进行优化,而不属于本发明实施例针对的优化场景。s2032、若所述第二待查询对象为预设类型数据库对象,则将所述第二待查询对象确定为所述目标sql语句中的扩展优化对象。可以理解的是,当所述第二待查询对象不属于预设类型数据库对象时,说明所述第二待查询对象不符合本发明实施例的可优化场景。示例性的,将现有方法中造成dblink不能整体优化但满足本发明实施例新增dblink整体优化场景(即所述扩展优化场景)的数据库对象称为“新增可优化对象”(即所述符合本发明实施例可优化场景的本地数据库或其他远程数据库的数据库对象),为“新增可优化对象”设置一个链表,记为opt_arr,初始化长度为0。检查from项以外的其他语法项包含的所有数据库对象(即第二待查询对象),当第二待查询对象不属于opt_dblink对应的远程数据库时,额外判断当前的第二待查询对象是否满足本发明实施例的扩展优化场景,即所述第二待查询对象是否为“新增可优化对象”,若是,则将该第二待查询对象确定为扩展优化对象,并将所述扩展优化对象所属表达式添加到opt_arr中,否则,结束优化,退出。s204、基于各所述扩展优化对象,结合各所述语法项,得到所述目标sql语句对应的优化sql语句。具体地,步骤s204包括如下操作:s2041、针对每个扩展优化对象,将所述扩展优化对象所属的语法项确定为待优化语法项,并将所述目标sql语句中除各所述待优化语法项之外的其他语法项确定为第三语法项。其中,待优化语法项可以理解为from项以外的其他语法项中包含扩展优化对象的语法项。所述第三语法项可以理解为所述目标sql语句的各所述语法项中除各所述待优化语法项之外的其他语法项。所述sql语法顺序可以理解为sql语句的书写顺序,示例性的,sql语句的语法顺序如:selectdistinct<select_list>from<left_table><join_type>join<right_table>on<join_condition>where<where_condition>groupby<group_by_list>having<having_condition>orderby<order_by_condition>limit<limit_number>s2042、将各所述待优化语法项中扩展优化对象所属表达式替换为一个对应的参数变量,得到各所述待优化语法项对应的优化语法项,并生成各所述参数变量与相应扩展优化对象所属表达式之间的映射关系链表。其中,所述映射关系链表用于指示各所述扩展优化对象所属表达式与相应参数变量之间的映射关系,即各所述扩展优化对象所属表达式与各所述参数变量具有一一对应关系。s2043、将各所述优化语法项和第三语法项按照sql语法顺序进行串联,得到所述目标sql语句对应的优化sql语句。可以理解的是,本发明实施例基于解析目标sql语句所得的各个语法项实现对目标sql语句的优化,实质上是将各所述待优化语法项中的扩展优化对象所属表达式替换为一个对应的参数变量,由此实现对个待优化语法项,得到优化后的待优化语法项,即各所述优化语法项。对目标sql语句解析可以得到各所述语法项,而按照sql语法顺序将各所述优化语法项和第三语法项串联起来,即可得到优化后的目标sql语句,即所述优化sql语句。s205、基于所述优化sql语句得到所述目标sql语句对应的目标执行计划,所述目标执行计划用于指示将所述优化sql语句发送至所述标识变量对应的远程数据库节点执行。s206、确定各所述扩展优化对象所属表达式的结果值,并根据相应的映射关系链表,将各所述结果值对应确定为相应参数变量的结果值。示例性的,将opt_arr中的“新增可优化对象”所属表达式依次转换为绑定参数变量,并记录绑定参数变量与“新增可优化对象”所属表达式的对应取值的映射关系。s207、通过执行所述目标执行计划,将各所述参数变量的结果值与所述优化sql语句一起发送至所述标识变量对应的远程数据库节点执行,以优化所述远程数据库节点的网络数据传输量。示例性的,设有本地数据库包test_package,test_package中的sql访问了远程数据库对象test_table,同时,sql还访问了本地包test_package中全局变量s_componentid。--本地创建dblink,名称为lnk01,连接oracle。createlinklnk01connect'oracle'withsystemidentifiedby"sysdba"using'192.168.0.16/orcl';--在lnk01远程数据库创建表对象test_table,并插入大量数据,具体插入数据这里不列出createtabletest_table("sid"nvarchar2(100),"lot"nvarchar2(100),"componentid"nvarchar2(25));--在本地数据库创建包对象test_packagecreateorreplacepackagetest_packageass_componentidvarchar2(25);proceduretest_a();end;/createorreplacepackagebodytest_packageasproceduretest_procisbeginselect*fromtest_table@lnk01wherecomponentid=s_componentid;deletefromtest_table@lnk01wherecomponentid=s_componentid;end;end;/执行下列语句:calltest_package.test_proc();相当于执行:select*fromtest_table@lnk01wherecomponentid=s_componentid;deletefromtest_table@lnk01wherecomponentid=s_componentid;使用现有的远程数据对象优化方法时,由于上述两条sql语句同时包含本地和远程数据库对象,导致不能整体优化,其对应的初始执行计划如下:(1)select查询语句的初始执行计划(即优化前select查询语句对应对应的执行计划)1#nset:[343,250000,144]2#prjt:[343,250000,144];exp_num(3),is_atom(false)3#slct:[343,250000,144];4#remotescan:[10,10000000,144]test_table@lnk01select查询语句包含本地包变量导致不能整体优化,“#remote_scan”发送语句“selectsid,lot,componentidfromtest_table”到lnk01对应的远程数据库节点执行,并获取远程数据库节点执行完成后返回的数据,向上传递最终输出给用户;“3#slct”对获取的远程数据进行过滤,过滤条件为“componentid=s_componentid”。由于远程数据通过网络传输到本地数据库节点才进行过滤,导致不满足条件的远程数据也有网络开销代价,影响了执行效率。(2)delete删除语句的初始执行计划(即优化前delete删除语句对应的执行计划)1#remotedelete:[0,0,0]2#ntts:[343,250000,96];for_mdis(false)3#prjt:[343,250000,96];exp_num(1),is_atom(false)4#slct:[343,250000,96];5#remotescan:[10,10000000,96]test_table@lnk01delete删除语句包含本地包变量导致不能整体优化,“#remote_scan”发送语句“selectsid,lot,componentidfromtest_table”到lnk01对应的远程数据库节点执行,并获取远程数据库执行完成后返回的数据,向上传递最终输出给用户;“4#slct”对获取的远程数据进行过滤,过滤条件为“componentid=s_componentid”,并将满足过滤条件的数据向上传递;“1#remotedelete”根据过滤后的数据,逐行对link01远程数据库对象test_table进行删除操作。可以看出,由于需要将远程数据库对象的数据传到本地数据库再进行过滤,当远程数据库对象的数据量巨大,而满足过滤条件的数据其实很少时,网络传输了大量的无效数据,导致执行性能非常低下。通过检查确定,上述两个sql语句的from相中均只包含一个远程数据库对象test_table@lnk01,且where项(from项以外的其他语法项)中包含本地包test_package中的全局变量s_componentid,上述sql语句中造成不能使用现有方法进行整体优化的数据库对象满足本发明实施例所述“数据库对象为包中定义的变量,且类型为常规数据类型”的可优化场景,因此,可以使用本发明方法进行整体优化。使用本发明方法优化后的执行计划如下:(1)select查询语句的目标执行计划(即优化后select查询语句对应的执行计划)1#nset:[10,1000,144]2#prjt:[10,1000,144];exp_num(3),is_atom(false)3#remotescan:[10,1000,144]tmpremotetab1008@lnk01其中,select查询语句整体优化后发送给lnk01对应远程数据库节点的sql语句为“selectsid,lot,componentidfromtest_tablewherecomponentid=:1”,“:1”表示绑定参数序号,对应表达式为“s_componentid”。“3#remotescan”在发送sql之前优先计算获取“s_componentid”的值,并将“s_componentid”的值与sql一起直接发送给lnk01对应远程数据库执行。可以看出,优化后,上述select查询语句对应的过滤条件在远程数据库节点执行,本地执行计划不再包含slct2过滤操作符,本地数据库节点只需要负责接收远程数据库返回的数据,并向上传递最终输出给用户即可。(2)delete删除语句的目标执行计划(即优化后delete删除语句对应的执行计划)1#remotedelete:[0,0,0]delete语句整体优化后执行计划尤为简单明了,“1#remotedelete”发送lnk01对应远程数据库的sql语句为“deletefromtest_tablewherecomponentid=:1”,其中“:1”表示绑定参数序号,对应表达式为“s_componentid”,“1#remotedelete”在发送sql之前优先计算获取“s_componentid”的值,并将“s_componentid”的值与sql一起直接发送给lnk01对应远程数据库执行。可以看出,优化后,上述delete删除语句不再需要将远程数据库对象test_table的数据通过网络传输回本地数据库节点,而是对test_table的查询、过滤以及删除直接在远程数据库节点执行,本地数据库节点只需要获取远程数据库节点返回的响应消息,并确定delete语句是否执行成功即可,如果失败则将错误码返回给用户,如果成功则返回影响行数。本发明实施例通过得到目标sql语句对应待发送至标识变量所指示的远程数据库节点进行执行的优化sql语句及对应的目标执行计划,在减少或消除远程数据库节点返回本地数据库节点数据量的同时,降低了远程数据库对象优化对待优化sql语句的要求,增加了对远程数据库对象进行优化时的可优化场景。实施例三图3是本发明实施例三提供的一种远程数据库对象的优化装置的流程示意图,本实施例可适用于增加对涉及本地数据库或其他远程数据库的数据库对象的sql的可优化场景的情况,该装置可以通过软件和/或硬件的方式实现,该装置具体包括:语句优化模块301、计划生成模块302以及计划执行模块303,其中,语句优化模块301,用于基于解析目标结构化查询语言sql语句所得的各个语法项,结合预设的标识变量,得到所述目标sql语句对应的优化sql语句;计划生成模块302,用于基于所述优化sql语句得到所述目标sql语句对应的目标执行计划,所述目标执行计划用于指示将所述优化sql语句发送至所述标识变量对应的远程数据库节点执行;计划执行模块303,用于执行所述目标执行计划,以优化所述远程数据库节点的网络数据传输量。在上述各实施例的基础上,所述标识变量的变量值为所述目标sql语句中目标远程数据库对象所属远程数据库的标识号id;相应地,所述装置,还包括:变量设置模块,用于在结合预设的标识变量,得到所述目标sql语句对应的优化sql语句之前,将所述标识变量初始化为空。在上述各实施例的基础上,语句优化模块301,包括:语法解析单元,用于解析目标sql语句,得到所述目标sql语句对应的第一语法项和第二语法项,其中,所述第一语法项为所述目标sql语句中第一个被执行的语法项,所述第二语法项为所述目标sql语句中除所述第一语法项以外的其他语法项;第一检查单元,用于依次检查所述第一语法项中包含的所有第一待查询对象,并基于各所述第一待查询对象和所述标识变量的当前变量值确定所述标识变量对应的目标变量值;第二检查单元,用于依次检查所述第二语法项包含的所有第二待查询对象,并基于各所述第二待查询对象和所述目标变量值确定所述目标sql语句包含的至少一个扩展优化对象;语句优化单元,用于基于各所述扩展优化对象,结合各所述语法项,得到所述目标sql语句对应的优化sql语句。在上述各实施例的基础上,所述第一检查单元,包括:变量确定子单元,用于针对每个第一待查询对象,当所述第一待查询对象为远程数据库对象时,确定所述标识变量的当前变量值;否则,结束优化;第一确定子单元,用于若所述当前变量值为空,则将所述第一待查询对象确定为所述目标sql语句的目标远程数据库对象,并将所述目标远程数据库对象所对应属远程数据库的id确定为所述标识变量的当前目标变量值;第二确定子单元,用于若所述当前变量值非空,且所述当前变量值对应的远程数据库对象与所述第一待查询对象属于所述当前变量值同一个指示的远程数据库,则将所述第一待查询对象确定为所述目标sql语句中待优化的目标远程数据库对象,并将所述当前变量值确定为所述标识变量对应的目标变量值。在上述各实施例的基础上,所述第二检查单元,包括:类型判断子单元,用于针对每个第二待查询对象,当所述第二待查询对象不属于所述目标变量值指示的远程数据库时,判断所述第二待查询对象是否为预设类型数据库对象,所述预设类型数据库对象为作为或等价于常量且对应返回数据的类型为预设数据类型的数据库对象。扩展确定子单元,用于若所述第二待查询对象为预设类型数据库对象,则将所述第二待查询对象确定为所述目标sql语句中的扩展优化对象。在上述各实施例的基础上,所述语句优化单元,包括:语法项确定子单元,用于针对每个扩展优化对象,将所述扩展优化对象所属的语法项确定为待优化语法项,并将所述目标sql语句中除各所述待优化语法项之外的其他语法项确定为第三语法项;语法项优化子单元,用于将各所述待优化语法项中扩展优化对象所属表达式替换为一个对应的参数变量,得到各所述待优化语法项对应的优化语法项,并生成各所述参数变量与相应扩展优化对象所属表达式之间的映射关系链表;语法项串联子单元,用于将各所述优化语法项和第三语法项按照sql语法顺序进行串联,得到所述目标sql语句对应的优化sql语句。在上述各实施例的基础上,计划执行模块303,包括:变量赋值单元,用于确定各所述扩展优化对象所属表达式的结果值,并根据相应的映射关系链表,将各所述结果值对应确定为相应参数变量的结果值;计划执行单元,用于通过执行所述目标执行计划,将各所述参数变量的结果值与所述优化sql语句一起发送至所述标识变量对应的远程数据库节点执行,以优化所述远程数据库节点的网络数据传输量。本发明实施例所提供的远程数据库对象的优化装置可执行本发明任一实施例所提供的远程数据库对象的优化方法,具备执行方法相应的功能模块和有益效果。实施例四图4为本发明实施例四提供的一种远程数据库对象的优化设备的结构示意图,如图4所示,该设备包括处理器40、存储器41、输入装置42和输出装置43;该设备中处理器40的数量可以是一个或多个,图4中以一个处理器40为例;该设备中的处理器40、存储器41、输入装置42和输出装置43可以通过总线或其他方式连接,图4中以通过总线连接为例。存储器41作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的远程数据库对象的优化方法对应的程序指令/模块(例如,远程数据库对象的优化装置中的语句优化模块301、计划生成模块302以及计划执行模块303)。处理器40通过运行存储在存储器41中的软件程序、指令以及模块,从而执行远程数据库对象的优化设备的各种功能应用以及数据处理,即实现上述的远程数据库对象的优化方法。存储器41可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器41可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器41可进一步包括相对于处理器40远程设置的存储器,这些远程存储器可以通过网络连接至远程数据库对象的优化设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。输入装置42可用于接收输入的数字或字符信息,以及产生与远程数据库对象的优化设备的用户设置以及功能控制有关的键信号输入。输出装置43可包括显示屏等显示设备。实施例五本发明实施例五还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种远程数据库对象的优化方法,该方法包括:基于解析目标结构化查询语言sql语句所得的各个语法项,结合预设的标识变量,得到所述目标sql语句对应的优化sql语句;基于所述优化sql语句得到所述目标sql语句对应的目标执行计划,所述目标执行计划用于指示将所述优化sql语句发送至所述标识变量对应的远程数据库节点执行;执行所述目标执行计划,以优化所述远程数据库节点的网络数据传输量。当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任一实施例所提供的远程数据库对象的优化方法中的相关操作。通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。值得注意的是,上述远程数据库对象的优化装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1