CN107798025B - 存储过程的运行、编译方法、装置和数据库系统 - Google Patents

存储过程的运行、编译方法、装置和数据库系统 Download PDF

Info

Publication number
CN107798025B
CN107798025B CN201610809314.5A CN201610809314A CN107798025B CN 107798025 B CN107798025 B CN 107798025B CN 201610809314 A CN201610809314 A CN 201610809314A CN 107798025 B CN107798025 B CN 107798025B
Authority
CN
China
Prior art keywords
sql
statement
group
execution engine
stored procedure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610809314.5A
Other languages
English (en)
Other versions
CN107798025A (zh
Inventor
王国平
朱俊华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201610809314.5A priority Critical patent/CN107798025B/zh
Publication of CN107798025A publication Critical patent/CN107798025A/zh
Application granted granted Critical
Publication of CN107798025B publication Critical patent/CN107798025B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation

Abstract

本发明公开了一种存储过程的运行、编译方法、装置和数据库系统,属于数据库领域。方法包括:数据库执行引擎在要执行的语句为SQL语句时,将该语句所在的SQL组发送至SQL执行引擎,以便于SQL执行引擎在执行该SQL组中的语句时共用相同的子表达式的计算结果,该语句所在的SQL组中的语句不存在依赖关系且存在相同的子表达式。本发明通过在要执行的语句为SQL语句时,将该语句所在的SQL组发送给SQL执行引擎,以便于SQL执行引擎在执行SQL组中SQL语句时能够共用相同的子表达式的计算结果,解决了相关技术中SQL执行引擎在执行多个SQL语句时花费的时间仍然较长的问题,达到了加快存储过程的运行速度的效果。

Description

存储过程的运行、编译方法、装置和数据库系统
技术领域
本发明涉及数据库领域,特别涉及一种存储过程的存储过程的运行、编译方法、装置和数据库系统。
背景技术
存储过程(英文:Stored Procedure)是存储于数据库系统中的一组能够完成特定功能的语句集,存储过程经过第一次编译后再次调用不需要再次编译,用户可以通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来运行存储过程。
存储过程可以包括结构化查询语言(英文:Structured Query Language;简称:SQL)语句(SQL语句通常为一个表达式,该表达式可以包括至少一个子表达式)和流程控制语句(一个流程控制语句可以构成一个流程控制语句块,该流程控制语句块可以包括多个SQL语句)等,而数据库系统通常包括存储过程执行引擎和SQL执行引擎,存储过程执行引擎用于运行存储过程,而SQL执行引擎用于执行存储过程中的SQL语句,存储过程执行引擎在运行存储过程的过程中,会依次执行存储过程中的语句,在执行任一语句前,会先判断该语句是否为SQL语句,并在该语句是SQL语句时将该语句发送至SQL执行引擎由SQL执行引擎执行(若该语句不是SQL语句则执行该语句并判断该语句的后一语句是否为SQL语句),并在SQL执行引擎返回执行结果后,判断该语句的后一语句是否为SQL语句,并以同样方式处理该后一语句,由此可知,存储过程在运行时若遇到SQL语句,要等到SQL执行引擎执行该SQL语句并向存储过程执行引擎返回执行结果后,存储过程执行引擎才能够继续执行接下来的语句,导致整个存储过程运行较为缓慢。
为了解决上述存储过程运行较为缓慢的问题,相关技术中提供一种存储过程的运行方法,在该方法中,首先可以编译存储过程,并在编译存储过程时,获取其中的多个SQL语句之间的依赖关系,并建立依赖关系表,其中,SQL语句A依赖SQL语句B是指SQL语句A的执行要依赖SQL语句B的执行结果,反之,SQL语句A不依赖SQL语句B是指SQL语句A的执行不依赖SQL语句B的执行结果。在编译完成后,可以进行存储过程的运行,在运行时,若遇到一个SQL语句A,则可以不等待SQL语句A执行完,而直接从依赖关系表中确定不依赖该SQL语句A的SQL语句B并执行该SQL语句B,加快了存储过程的运行。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:上述方式通过将不存在依赖关系的多个SQL语句发往SQL执行引擎,无需等待SQL引擎返回执行结果,加快了存储过程的运行,但SQL执行引擎在执行多个不存在依赖关系的SQL语句时花费的时间仍然较长。
发明内容
为了解决现有技术中SQL执行引擎在执行多个不存在依赖关系的SQL语句时花费的时间仍然较长的问题,本发明实施例提供了一种存储过程的运行、编译方法、装置和数据库系统。所述技术方案如下:
根据本发明实施例的第一方面,提供了一种存储过程的运行方法,用于数据库系统中的存储过程执行引擎,该数据库系统可以包括存储过程执行引擎和SQL执行引擎,存储过程执行引擎要运行的存储过程中的SQL语句被分成了至少一个SQL组,其中每个SQL组中的至少一个SQL语句之间不存在依赖关系且具有相同的子表达式(英文:commonsubexpression),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组中的语句具有的相同的多重表集合可以为{A,B,C},第一语句所在的SQL组中的语句共有的连接谓词为{p1,p2,p3},则可以判断以A、B、C为顶点,p1、p2和p3为边构成的图形是否连通,并在该图像连通时,说明第一语句所在的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语句的信息,该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组,可以包括:
步骤a、设置i=1;
步骤b、在SQL组队列中存在第一SQL组与存储过程中第i个SQL语句满足预设条件时,将第i个SQL语句设置在第一SQL组中,预设条件为第i个SQL语句与第一SQL组中的语句不存在依赖关系且存在相同的子表达式,且SQL组队列中在第一SQL组后的SQL组与第i个SQL语句不存在依赖关系且不存在相同的子表达式(这样可以避免第i个SQL语句被分到的SQL组在某个SQL之前,且第i个SQL语句依赖该某个SQL组中的语句),或预设条件为第一SQL组为组队列的最后一个SQL组且与第i个SQL语句不存在依赖关系且存在相同的子表达式;
步骤c、在SQL组队列中不存在满足预设条件的SQL组时,建立第二SQL组并将第i个SQL语句设置在第二SQL组中;
步骤d、将i+1的值作为新的i,重复执行步骤b至d,直至存储过程中SQL语句划分至SQL组中。
需要说明的是,在当前未建立有SQL组时,也可以执行步骤c来新建立一个SQL组,并将第i个SQL语句设置在新建立的SQL组中。一种可选的实现中,上述预设条件中还可以包括第一SQL组中的语句还与所述第i个SQL语句属于同一个流程控制语句块。属于同一个流程控制语句块以及具有相同的子表达式的说明可以参考本发明的第一方面,在此不再赘述。
一种可选的实现中,在步骤c之后,存储过程编译引擎可以将第二SQL组设置在SQL组队列的末位,以对SQL组队列进行维护。
根据本发明的第四方面,提供一种存储过程的运行装置,用于数据库系统中的存储过程执行引擎,该数据库系统包括存储过程执行引擎和SQL执行引擎,该装置包括至少一个单元,该至少一个单元用于实现上述第一方面或第一方面中任意一种可能的实现方式所提供的存储过程的运行方法。
根据本发明实施例的第五方面,提供一种存储过程的运行装置,用于数据库系统中的SQL执行引擎,该数据库系统包括存储过程执行引擎和SQL执行引擎,该装置包括至少一个单元,该至少一个单元用于实现上述第二方面或第二方面中任意一种可能的实现方式所提供的存储过程的运行方法。
根据本发明实施例的第六方面,提供一种存储过程的编译装置,用于数据库系统中的存储过程编译引擎,该装置包括至少一个单元,该至少一个单元用于实现上述第三方面或第三方面中任意一种可能的实现方式所提供的存储过程的运行方法
根据本发明实施例的第七方面,提供一种数据库系统,包括存储过程执行引擎和SQL执行引擎,该存储过程执行引擎可以包括第四方面提供的存储过程的运行装置,SQL执行引擎可以包括第五方面提供的存储过程的运行装置。
一种可选的实现中,该数据库系统还可以包括:存储过程编译引擎,该存储过程编译引擎可以包括第六方面提供的存储过程的编译装置。
上述第四至第七方面所获得的技术效果与第一至第三方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
综上所述,本发明实施例提供的技术方案带来的有益效果是:
通过在要执行的语句为SQL语句时,将该语句所在的SQL组发送给SQL执行引擎,该SQL组包括多个不存在依赖关系且存在相同的子表达式的SQL语句,以便于该SQL执行引擎在执行SQL组中的多个SQL语句时能够共用相同的子表达式的计算结果,避免了相同的子表达式的重复计算,解决了相关技术中SQL执行引擎在执行多个不存在依赖关系的SQL语句时花费的时间仍然较长的问题,达到了加快存储过程的运行速度,提高数据库系统的性能的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例各个实施例所涉及的数据库系统的结构示意图;
图2是本发明实施例示出的一种存储过程的运行方法的流程图;
图3-1是本发明实施例提供的一种存储过程的编译方法的流程图;
图3-2是图3-1所示方法中判断预设条件的流程图;
图4是本发明实施例示出的一种存储过程的运行装置的框图;
图5是本发明实施例示出的一种存储过程的运行装置的框图;
图6-1是本发明实施例示出的一种存储过程的编译装置的框图;
图6-2是本发明实施例示出的另一种存储过程的编译装置的框图。
通过上述附图,已示出本发明明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本发明构思的范围,而是通过参考特定实施例为本领域技术人员说明本发明的概念。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
请参考图1,其示出了本发明各个实施例所涉及的数据库系统的结构示意图,该数据库系统10可以包括:存储过程执行引擎11、SQL执行引擎12和存储过程编译引擎13。
存储过程执行引擎11用于运行存储过程,存储过程执行引擎11与SQL执行引擎建立有连接。
SQL执行引擎12用于执行存储过程中的SQL语句。
存储过程编译引擎13用于编译存储过程。
图2是本发明实施例示出的一种存储过程的运行方法的流程图,本实施例以该存储过程的运行方法应用于图1所示的数据库系统中来进行说明。该存储过程的运行方法可以包括如下几个步骤:
步骤201、存储过程执行引擎在要执行第一语句时,判断第一语句是否为SQL语句。在第一语句是SQL语句时,执行步骤202,在第一语句不是SQL语句时,执行步骤208。
在使用本发明实施例提供的存储过程的运行方法时,存储过程执行引擎可以根据存储过程中的顺序,依次遍历存储过程中的语句并在要执行第一语句时(第一语句为存储过程中的语句)时,判断第一语句是否为SQL语句。
步骤202、存储过程执行引擎判断第一语句是否为SQL组中在存储过程中的顺序最靠前的SQL语句。在第一语句为SQL组中在存储过程中的顺序最靠前的SQL语句时。执行步骤203,在第一语句不为SQL组中在存储过程中的顺序最靠前的SQL语句时,执行步骤207。
在第一语句为SQL语句时,存储过程执行引擎可以判断第一语句是否为SQL组中在存储过程中的顺序最靠前的SQL语句。
SQL组中的每个SQL语句均为存储过程中的语句,这每个SQL语句在存储过程中存在有一个顺序。示例性的,存储过程中有5个SQL语句为A、B、C、D、E,他们在存储过程中的执行顺序为A、B、C、D、E依次向后,若第一语句为这5个语句中的一个,则存储过程引擎可以判断第一语句是否为这5个语句中的第一个语句。
此外,第一语句所在的SQL组中的语句之间不存在依赖关系且存在相同的子表达式。SQL组中的语句之间存在相同的子表达式可以是指该SQL组中的所有SQL存在至少一个相同的子表达式,而SQL组中的语句之间不存在依赖关系是指SQL组中任意两个SQL语句之间不存在依赖关系。
步骤203、存储过程执行引擎将第一语句所在的SQL组发送至SQL执行引擎。执行步骤204。
存储过程执行引擎在第一语句为SQL组中在存储过程中的顺序最靠前的SQL语句时,可以将第一语句所在的SQL组发送至SQL执行引擎。
在第一语句为SQL组中在存储过程中的顺序最靠前的SQL语句时,说明存储过程执行引擎还未遇到过第一语句所在的SQL组中的其它SQL语句,即存储过程执行引擎还未获取该SQL组中SQL语句的执行结果,此时存储过程执行引擎可以将第一语句所在的SQL组发送至SQL执行引擎。
步骤204、SQL执行引擎执行第一语句所在的SQL组中的语句并获取第一语句所在的SQL组中的语句的执行结果。执行步骤205。
在存储过程执行引擎向SQL执行引擎发送了第一语句所在的SQL组后,SQL执行引擎可以执行第一语句所在的SQL组中的语句并获取第一语句所在的SQL组中的语句的执行结果,SQL执行引擎在获取执行结果时,可以共用相同的子表达式的计算结果,以避免相同的子表达式的重复计算,加快了存储过程的运行速度,提高了数据库系统的性能。
本发明实施例中的SQL执行引擎在执行SQL组中的多个SQL语句时,可以应用到多查询优化(英文:Multiple-query Optimization)技术,多查询优化技术是数据库系统为了提升多个SQL语句的执行速度的一种优化技术。在应用了多查询优化技术后,若SQL组中的多个SQL语句中存在相同的子表达式,则SQL执行引擎可以在执行SQL组中的语句时,公用该相同的子表达式的计算结果,示例性的,一个SQL组中包括SQL语句Select*From R WhereR.a=5和SQL语句Select*From R Where R.b=6,这两个SQL语句包括相同的子表达式Select*From R,若单独执行这两个SQL语句,则表R需要被扫描两次,但应用了多查询优化技术后,SQL执行引擎可以共用子表达式Select*From R的计算结果,SQL引擎只需要扫描表R一次即可,减少了计算量,提高了数据库系统的性能。
步骤205、SQL执行引擎向存储过程执行引擎发送执行结果。执行步骤206。
SQL执行引擎在获取了第一语句所在的SQL组中SQL语句的执行结果后,可以向存储过程执行引擎发送执行结果。
步骤206、存储过程执行引擎缓存SQL执行引擎返回的SQL组中的语句的执行结果。
存储过程执行引擎获取了SQL执行引擎返回的SQL组中的语句的执行结果后,可以缓存该执行结果,缓存的执行结果可以在执行该SQL组中的语句时直接使用。之后存储过程执行引擎可以继续运行存储过程。
步骤207、存储过程执行引擎获取第一语句的执行结果。
在第一语句不为SQL组中在存储过程中的顺序最靠前的SQL语句时,说明存储过程执行引擎遇到过第一语句所在的SQL组中在存储过程中的顺序最靠前的SQL语句,并将第一语句所在的SQL组中的SQL组发送给了SQL执行引擎,SQL执行引擎向存储过程执行引擎返回了该SQL组中SQL语句的执行结果,即存储过程执行引擎在之前已经获取了第一语句的执行结果,因而存储过程执行引擎可以从SQL执行引擎返回的执行结果中直接获取第一语句的执行结果。这样就节省了计算第一语句的时间,提高了数据库系统的性能。
步骤208、存储过程执行引擎执行第一语句。
在第一语句不是SQL语句时,存储过程执行引擎可以执行第一语句。存储过程执行引擎在执行完第一语句后,可以继续返回步骤201,继续判断第一语句的后一语句是否为SQL语句,并根据步骤202至步骤208的方式处理第一语句的后一语句。
综上所述,本发明实施例提供的存储过程的运行方法,通过在要执行的语句为SQL语句时,将该语句所在的SQL组发送给SQL执行引擎,该SQL组包括多个不存在依赖关系且存在相同的子表达式的SQL语句,以便于该SQL执行引擎在执行SQL组中的多个SQL语句时能够共用相同的子表达式的计算结果,避免了相同的子表达式的重复计算,解决了相关技术中SQL执行引擎在执行多个不存在依赖关系的SQL语句时花费的时间仍然较长的问题,达到了加快存储过程的运行速度,提高数据库系统的性能的效果。
图3-1是本发明实施例提供的一种存储过程的编译方法的流程图,本实施例以该存储过程的编译方法应用于图1所示的数据库系统中来进行说明。该存储过程的编译方法可以用于编译图2所示实施例中的存储过程,该存储过程的编译方法可以包括如下几个步骤:
步骤301、存储过程编译引擎获取存储过程中SQL语句的信息。
在使用发明实施例提供的存储过程的编译方法时,存储过程编译引擎首先可以遍历存储过程,并获取其中的SQL语句的信息,该SQL语句的信息可以包括存储过程中的多个SQL语句中,SQL语句之间是否存在依赖关系的信息以及SQL语句之间是否存在相同的子表达式的信息。示例性的,存储过程中包括A、B、C和D4个SQL语句,存储过程编译引擎遍历了存储过程后,获取了A和B没有依赖关系,A、B和C具有相同的子表达式。
步骤302、存储过程编译引擎设置i=1。
在获取了SQL语句的信息后,存储过程编译引擎首先可以设置一个i,并使i=1。该i用于标识存储过程中的SQL语句的编号,示例性的,存储过程中有10个SQL语句,则这10个SQL语句的编号可以为1、2、3···9、10。
步骤303、在SQL组队列中存在第一SQL组与存储过程中第i个SQL语句满足预设条件时,存储过程编译引擎将第i个SQL语句设置在第一SQL组中。
存储过程编译引擎可以判断当前的SQL组队列中是否存在一个SQL组能够将第i个SQL语句设置在其中,而是否能够将第i个SQL语句放入一个SQL组的判断条件(即预设条件)可以为第i个SQL语句与第一SQL组中的语句不存在依赖关系且存在相同的子表达式,且SQL组队列中在第一SQL组后的SQL组与第i个SQL语句不存在依赖关系且不存在相同的子表达式(这样可以避免第i个SQL语句被分到的SQL组在某个SQL之前,且第i个SQL语句依赖该某个SQL组中的语句),或预设条件为第一SQL组为组队列的最后一个SQL组且与第i个SQL语句不存在依赖关系且存在相同的子表达式。
判断一个SQL组与第i个SQL语句是否满足预设条件可以有多种方式,如图3-2所示,一种方式可以包括下面几个子步骤:
子步骤3031、存储过程编译引擎设置x=n。
其中,x代表SQL组队列中SQL组的序号,n为SQL组队列中SQL组的总数量。
子步骤3032、存储过程编译引擎判断第i个SQL语句与第n个SQL组中的语句是否存在依赖关系。在第i个SQL语句不与第n个SQL组中的语句存在依赖关系时,执行步骤3033,在第i个SQL语句与第n个SQL组中的语句存在依赖关系时,执行步骤3035。
子步骤3033、存储过程编译引擎判断第i个SQL语句与第n个SQL组中的语句是否满足预设子条件。在第i个SQL语句与第n个SQL组中的语句满足预设子条件时,执行步骤3034,第i个SQL语句不与第n个SQL组中的语句满足预设子条件,执行步骤3036
预设子条件可以为第i个SQL语句与第n个SQL组中的语句存在相同的子表达式。可选的,预设子条件还可以包括第i个SQL语句与第n个SQL组中的语句位于同一流程控制语句块。
其中,判断第i个SQL语句与第n个SQL组中的语句是否存在相同的子表达式的过程可以包括:
1)判断第i个SQL语句与第n个SQL组中的语句是否具有相同的多重表集合。
2)在第i个SQL语句与第n个SQL组中的语句具有相同的多重表集合时,判断以相同的多重表集合中的表为顶点,以第i个SQL语句与第n个SQL组中的语句共有的连接谓词作为边的图形是否连通。
3)在图形连通时,确定第i个SQL语句与第n个SQL组中的语句具有相同的子表达式。SQL语句构成的图形是否连通的判断可以参考相关技术,在此不再赘述。
子步骤3034,存储过程编译引擎确定第n个SQL组满足预设条件。
在第i个SQL语句与第n个SQL组中的语句满足预设子条件时,存储过程编译引擎可以确定第n个SQL组满足预设条件。
子步骤3035、存储过程编译引擎确定当前的SQL组队列中不存在一个SQL组能够将第i个SQL语句设置在其中。
第i个SQL语句不与第n个SQL组中的语句存在依赖关系时,存储过程编译引擎可以确定当前的SQL组队列中不存在一个SQL组能够将第i个SQL语句设置在其中。此时可以继续执行步骤304。
子步骤3036、存储过程编译引擎确定第n个SQL组不满足预设条件,并将n-1作为新的n,重复子步骤3031至3036,直至n=1。
若存储过程编译引擎通过子步骤3031至3036确定第i个SQL语句无法设置在第1个SQL组中,则可以确定SQL组队列中不存在满足预设条件的SQL组,此时可以继续执行步骤304。即存储过程编译引擎以SQL组队列中,SQL组的建立时间的逆顺序,从SQL组队列中的最后一个SQL组开始,依次判断每个SQL组是否能够将第i个SQL语句设置在其中,并在SQL组队列中没有SQL组能够设置第i个SQL语句时,建立新的SQL组,并将第i个SQL语句设置在该新建立的SQL组。
步骤304、在SQL组队列中不存在满足预设条件的SQL组时,存储过程编译引擎建立第二SQL组并将第i个SQL语句设置在第二SQL组中。
存储过程编译引擎建立第二SQL组并将第i个SQL语句设置在第二SQL组中之后,可以将第二SQL组设置在SQL组队列的末位,这样就对SQL组队列进行了维护,使得SQL组队列中记录有最新建立的SQL组。
步骤305、存储过程编译引擎将i+1的值作为新的i,重复执行步骤302至305,直至存储过程中SQL语句划分至SQL组中。
存储过程编译引擎可以依照步骤302至305的方式,将存储过程中的SQL语句全部划分到SQL组中。
需要说明的是,在当前未建立有SQL组时,也可以执行步骤304来新建立一个SQL组,并将第i个SQL语句设置在新建立的SQL组中。现以一个存储过程来举例说明,如下方的存储过程所示:
CREATE PROCEOURE example{p1 in long,p2 out long,p3 out long,p4 outlong,p5 out long)AS
DECLARE
var_a long;
var_b 1ong;
BEGIN
var_a=0;
var_b=0;
p2=0;
p3=0;
p4=0;
p5=0;
SELECT COUNT(*)INTO var_a FROM A WHERE A.a1=p1;
SELECT COUNT(*)INTO p2 FROM A WHERE A.a2=p1;
IF(var_a>10)
THEN
SELECT count(*)INTO p3 FROM A,B,C WHERE A.a1=B.b1 and B.b2=C.c1 andA.a1=p1;
SELECT count(*)INTO var_b FROM A,B,C WHERE A.a1=B.b1 and B.b2=C.c1and A.a2=p1;
SELECT count(*)INTO p3 FROM A,B,C WHERE A.a1=B.b1 and A.a2=C.c1 andA.a3=p1;
ENDIF
SELECT count(*)INTO p5 FROM A WHERE A.a3=var_b;
END
其中,IF和ENDIF之间为内层的流程控制语句块B2,IF和ENDIF之外的为外层的流程控制语句块B1,SELECT COUNT(*)INTO var_a FROM A WHERE A.a1=p1为SQL语句S1,属于B1,SELECT COUNT(*)INTO p2 FROM A WHERE A.a2=p1为SQL语句S2,属于B1。
SELECT count(*)INTO p3 FROM A,B,C WHERE A.a1=B.b1 and B.b2=C.c1andA.a1=p1为SQL语句S3;
SELECT count(*)INTO var_b FROM A,B,C WHERE A.a1=B.b1 and B.b2=C.c1and A.a2=p1为SQL语句S4;
SELECT count(*)INTO p3 FROM A,B,C WHERE A.a1=B.b1 and A.a2=C.c1 andA.a3=p1为SQL语句S5;S3、S4和S5属于B2。
SELECT count(*)INTO p5 FROM A WHERE A.a3=var_b为SQL语句S6,属于B1。
按照步骤302至步骤305的方式将该存储过程中的SQL语句S1至S6进行分组后的分组结果可以如表1所示。
表1
Figure GDA0002364696410000141
Figure GDA0002364696410000151
在表1中左侧一列表示SQL语句,右边一列表示分组情况,同一行表示对该行的SQL语句进行分组的结果,示例性的,对SQL语句S4进行分组时,首先可以判断S4与SQL组{S1,S2}中的S1和S2是否有依赖关系,若没有依赖关系则判断S4与S1和S2是否满足预设子条件,若S4与S1和S2不满足预设子条件,则以同样方式判断S4是否能够设置在SQL组{S3}中。
综上所述,本发明实施例提供的存储过程的编译方法,通过将存储过程中的SQL语句分为至少一个SQL组,且SQL组中包括多个不存在依赖关系且存在相同的子表达式的SQL语句,以便于SQL执行引擎在执行SQL组中的多个SQL语句时能够共用相同的子表达式的计算结果,避免了相同的子表达式的重复计算,解决了相关技术中SQL执行引擎在执行多个不存在依赖关系的SQL语句时花费的时间仍然较长的问题,达到了加快存储过程的运行速度,提高数据库系统的性能的效果。
下述为本公开装置实施例,可以用于执行本公开方法实施例。对于本公开装置实施例中未披露的细节,请参照本公开方法实施例。
图4是发明实施例示出的一种存储过程的运行装置的框图,用于图1所示的数据库系统中的存储过程执行引擎,该存储过程的运行装置可以通过软件、硬件或者两者的结合实现成为存储过程执行引擎的部分或者全部。该存储过程的运行装置可以包括:
SQL组发送单元410,用于执行上述实施例中的步骤203。
执行结果获取单元420,用于执行上述实施例中的步骤206。
可选地,SQL组发送单元410,还用于执行上述实施例中的步骤202。
可选地,存储过程的运行装置还包括:
结果获取单元430,用于执行上述实施例中的步骤207。
可选地,第一语句所在的SQL组中的语句属于同一个流程控制语句块。
可选地,在第一语句所在的SQL组中的语句具有相同的多重表集合,且以多重表集合中的数据表为顶点,第一语句所在的SQL组中的语句共有的连接谓词为边构成的图形连通时,第一语句所在的SQL组中的语句存在相同的子表达式。
综上所述,本发明实施例提供的存储过程的运行装置,通过在要执行的语句为SQL语句时,将该语句所在的SQL组发送给SQL执行引擎,该SQL组包括多个不存在依赖关系且存在相同的子表达式的SQL语句,以便于该SQL执行引擎在执行SQL组中的多个SQL语句时能够共用相同的子表达式的计算结果,避免了相同的子表达式的重复计算,解决了相关技术中SQL执行引擎在执行多个不存在依赖关系的SQL语句时花费的时间仍然较长的问题,达到了加快存储过程的运行速度,提高数据库系统的性能的效果。
图5是本发明实施例示出的一种存储过程的运行装置的框图,用于图1所示的数据库系统中的SQL执行引擎,该存储过程的运行装置可以通过软件、硬件或者两者的结合实现成为SQL执行引擎的部分或者全部。该存储过程的运行装置可以包括:
SQL组获取单元510,用于获取存储过程执行引擎发送的第一语句所在的SQL组,第一语句为存储过程中的语句,第一语句所在的SQL组中包括至少一个语句且至少一个语句均为SQL语句,第一语句所在的SQL组中的语句之间不存在依赖关系且存在相同的子表达式;
SQL语句执行单元520,用于执行上述实施例中的步骤204;
执行结果发送单元530,用于执行上述实施例中的步骤205。
可选地,第一语句所在的SQL组中的语句属于同一个流程控制语句块。
可选地,在第一语句所在的SQL组中的语句具有相同的多重表集合,且以多重表集合中的数据表为顶点,第一语句所在的SQL组中的语句共有的连接谓词为边构成的图形连通时,第一语句所在的SQL组中的语句存在相同的子表达式。
综上所述,本发明实施例提供的存储过程的运行装置,通过获取存储过程执行引擎发送的SQL组,该SQL组包括多个不存在依赖关系且存在相同的子表达式的SQL语句,并在执行SQL组中的多个SQL语句时能够共用相同的子表达式的计算结果,避免了相同的子表达式的重复计算,解决了相关技术中SQL执行引擎在执行多个不存在依赖关系的SQL语句时花费的时间仍然较长的问题,达到了加快存储过程的运行速度,提高数据库系统的性能的效果。
图6-1是本发明实施例示出的一种存储过程的编译装置的框图,用于图1所示的数据库系统中的存储过程编译引擎,该存储过程的运行装置可以通过软件、硬件或者两者的结合实现成为存储过程编译引擎的部分或者全部。该存储过程的编译装置可以包括:
信息获取单元610,用于执行上述实施例中的步骤301;
分组单元620,用于执行上述实施例中的步骤302至步骤305。
可选地,如图6-2所示,分组单元610,包括:
顺序分组子单元611,用于执行上述实施例中的步骤301至步骤304。
综上所述,本发明实施例提供的存储过程的编译装置,通过将存储过程中的SQL语句分为至少一个SQL组,且SQL组中包括多个不存在依赖关系且存在相同的子表达式的SQL语句,以便于SQL执行引擎在执行SQL组中的多个SQL语句时能够共用相同的子表达式的计算结果,避免了相同的子表达式的重复计算,解决了相关技术中SQL执行引擎在执行多个不存在依赖关系的SQL语句时花费的时间仍然较长的问题,达到了加快存储过程的运行速度,提高数据库系统的性能的效果。
此外,本发明实施例还提供一种数据库系统,该数据库系统包括:存储过程执行引擎和SQL执行引擎,存储过程执行引擎包括图4所示的存储过程的运行装置;SQL执行引擎包括图5所示的存储过程的运行装置。
可选的,数据库系统还包括:存储过程编译引擎,存储过程编译引擎包括图6-1所示的存储过程的编译装置。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (24)

1.一种存储过程的运行方法,其特征在于,用于数据库系统中的存储过程执行引擎,所述数据库系统包括所述存储过程执行引擎和结构化查询语言SQL执行引擎,所述方法包括:
在要执行的第一语句为SQL语句时,将所述第一语句所在的SQL组发送至所述SQL执行引擎,以便于所述SQL执行引擎执行所述第一语句所在的SQL组中的语句并在执行所述第一语句所在的SQL组中的语句时共用相同的子表达式的计算结果,所述第一语句为存储过程中的语句,所述第一语句所在的SQL组中包括至少一个语句且所述至少一个语句均为SQL语句,所述第一语句所在的SQL组中的语句之间不存在依赖关系且存在相同的子表达式;
获取所述SQL执行引擎返回的所述SQL组中的语句的执行结果。
2.根据权利要求1所述的方法,其特征在于,所述将所述第一语句所在的SQL组发送至所述SQL执行引擎,包括:
判断所述第一语句是否为所述SQL组中在所述存储过程中的顺序最靠前的SQL语句;
在所述第一语句为所述SQL组中在所述存储过程中的顺序最靠前的SQL语句时,将所述第一语句所在的SQL组发送至所述SQL执行引擎。
3.根据权利要求2所述的方法,其特征在于,在所述判断所述第一语句是否为所述SQL组中在所述存储过程中的顺序最靠前的SQL语句之后,所述方法还包括:
在所述第一语句不为所述SQL组中在所述存储过程中的顺序最靠前的SQL语句时,获取所述第一语句的执行结果,所述第一语句的执行结果是所述存储过程执行引擎在要执行所述SQL组中在所述存储过程中的顺序最靠前的SQL语句时,将所述SQL组发送至所述SQL执行引擎后所述SQL执行引擎返回的。
4.根据权利要求1所述的方法,其特征在于,在所述第一语句所在的SQL组中的语句具有相同的多重表集合,且以所述多重表集合中的数据表为顶点,所述第一语句所在的SQL组中的语句共有的连接谓词为边构成的图形连通时,所述第一语句所在的SQL组中的语句存在相同的子表达式。
5.一种存储过程的运行方法,其特征在于,用于数据库系统中的SQL执行引擎,所述数据库系统包括存储过程执行引擎和所述SQL执行引擎,所述方法包括:
获取所述存储过程执行引擎发送的第一语句所在的SQL组,所述第一语句为存储过程中的语句,所述第一语句所在的SQL组中包括至少一个语句且所述至少一个语句均为SQL语句,所述第一语句所在的SQL组中的语句之间不存在依赖关系且存在相同的子表达式;
执行所述第一语句所在的SQL组中的语句并获取所述第一语句所在的SQL组中的语句的执行结果,在获取所述执行结果时,共用所述相同的子表达式的计算结果;
向所述存储过程执行引擎发送所述执行结果。
6.根据权利要求5所述的方法,其特征在于,在所述第一语句所在的SQL组中的语句具有相同的多重表集合,且以所述多重表集合中的数据表为顶点,所述第一语句所在的SQL组中的语句共有的连接谓词为边构成的图形连通时,所述第一语句所在的SQL组中的语句存在相同的子表达式。
7.一种存储过程的编译方法,其特征在于,用于数据库系统中的存储过程编译引擎,所述数据库系统包括所述存储过程编译引擎和SQL执行引擎,所述方法包括:
编译存储过程时,获取所述存储过程中SQL语句的信息,所述SQL语句的信息包括所述存储过程中的SQL语句之间是否存在依赖关系的信息及所述存储过程中的SQL语句之间是否存在相同的子表达式的信息;
根据所述SQL语句的信息将所述存储过程中的SQL语句分成至少一个SQL组,所述至少一个SQL组中任一SQL组中的语句间不存在依赖关系且存在相同的子表达式,所述SQL执行引擎在执行所述任一SQL组中的语句时,能够共用所述相同的子表达式的计算结果。
8.根据权利要求7所述的方法,其特征在于,所述根据所述SQL语句的信息将所述存储过程中的SQL语句分成至少一个SQL组,包括:
按照所述存储过程中SQL语句的先后顺序,依次将所述存储过程中的SQL语句分成至少一个SQL组。
9.根据权利要求8所述的方法,其特征在于,当前存在有至少一个SQL组,且所述至少一个SQL组中的SQL组按照建立的时间先后排列为SQL组队列,
所述按照所述存储过程中SQL语句的先后顺序,依次将所述存储过程中的SQL语句分成至少一个SQL组,包括:
步骤a、设置i=1;
步骤b、在所述SQL组队列中存在第一SQL组与所述存储过程中第i个SQL语句满足预设条件时,将所述第i个SQL语句设置在所述第一SQL组中,所述预设条件为所述第i个SQL语句与所述第一SQL组中的语句不存在依赖关系且存在相同的子表达式,且所述SQL组队列中在所述第一SQL组后的SQL组与所述第i个SQL语句不存在依赖关系且不存在相同的子表达式,或所述预设条件为所述第一SQL组为所述组队列的最后一个SQL组且与所述第i个SQL语句不存在依赖关系且存在相同的子表达式;
步骤c、在所述SQL组队列中不存在满足所述预设条件的SQL组时,建立第二SQL组并将所述第i个SQL语句设置在所述第二SQL组中;
步骤d、将i+1的值作为新的i,重复执行步骤b至d,直至所述存储过程中SQL语句划分至SQL组中。
10.根据权利要求9所述的方法,其特征在于,在所述第i个SQL语句与所述第一SQL组具有相同的多重表集合,且以所述多重表集合中的数据表为顶点,所述第i个SQL语句以及所述第一SQL组中的语句共有的连接谓词为边构成的图形连通时,所述第i个SQL语句与所述第一SQL组中的语句存在相同的子表达式。
11.根据权利要求9所述的方法,其特征在于,在所述建立第二SQL组并将所述SQL语句设置在所述第二SQL组中之后,所述方法还包括:
将所述第二SQL组设置在所述SQL组队列的末位。
12.一种存储过程的运行装置,其特征在于,用于数据库系统中的存储过程执行引擎,所述数据库系统包括所述存储过程执行引擎和SQL执行引擎,所述存储过程的运行装置包括:
SQL组发送单元,用于在要执行的第一语句为SQL语句时,将所述第一语句所在的SQL组发送至所述SQL执行引擎,以便于所述SQL执行引擎执行所述第一语句所在的SQL组中的语句并在执行所述第一语句所在的SQL组中的语句时共用相同的子表达式的计算结果,所述第一语句为存储过程中的语句,所述第一语句所在的SQL组中包括至少一个语句且所述至少一个语句均为SQL语句,所述第一语句所在的SQL组中的语句之间不存在依赖关系且存在相同的子表达式;
执行结果获取单元,用于获取所述SQL执行引擎返回的所述SQL组中的语句的执行结果。
13.根据权利要求12所述的存储过程的运行装置,其特征在于,所述SQL组发送单元,用于:
判断所述第一语句是否为所述SQL组中在所述存储过程中的顺序最靠前的SQL语句;
在所述第一语句为所述SQL组中在所述存储过程中的顺序最靠前的SQL语句时,将所述第一语句所在的SQL组发送至所述SQL执行引擎。
14.根据权利要求13所述的存储过程的运行装置,其特征在于,所述存储过程的运行装置还包括:
结果获取单元,用于在所述第一语句不为所述SQL组中在所述存储过程中的顺序最靠前的SQL语句时,获取所述第一语句的执行结果,所述第一语句的执行结果是所述存储过程执行引擎在要执行所述SQL组中在所述存储过程中的顺序最靠前的SQL语句时,将所述SQL组发送至所述SQL执行引擎后所述SQL执行引擎返回的。
15.根据权利要求12所述的存储过程的运行装置,其特征在于,在所述第一语句所在的SQL组中的语句具有相同的多重表集合,且以所述多重表集合中的数据表为顶点,所述第一语句所在的SQL组中的语句共有的连接谓词为边构成的图形连通时,所述第一语句所在的SQL组中的语句存在相同的子表达式。
16.一种存储过程的运行装置,其特征在于,用于数据库系统中的SQL执行引擎,所述数据库系统包括存储过程执行引擎和所述SQL执行引擎,所述存储过程的运行装置包括:
SQL组获取单元,用于获取所述存储过程执行引擎发送的第一语句所在的SQL组,所述第一语句为存储过程中的语句,所述第一语句所在的SQL组中包括至少一个语句且所述至少一个语句均为SQL语句,所述第一语句所在的SQL组中的语句之间不存在依赖关系且存在相同的子表达式;
SQL语句执行单元,用于执行所述第一语句所在的SQL组中的语句并获取所述第一语句所在的SQL组中的语句的执行结果,在获取所述执行结果时,共用所述相同的子表达式的计算结果;
执行结果发送单元,用于向所述存储过程执行引擎发送所述执行结果。
17.根据权利要求16所述的存储过程的运行装置,其特征在于,在所述第一语句所在的SQL组中的语句具有相同的多重表集合,且以所述多重表集合中的数据表为顶点,所述第一语句所在的SQL组中的语句共有的连接谓词为边构成的图形连通时,所述第一语句所在的SQL组中的语句存在相同的子表达式。
18.一种存储过程的编译装置,其特征在于,用于数据库系统中的存储过程编译引擎,所述数据库系统包括所述存储过程编译引擎和SQL执行引擎,所述存储过程的运行装置包括:
信息获取单元,用于编译存储过程时,获取所述存储过程中SQL语句的信息,所述SQL语句的信息包括所述存储过程中的SQL语句之间是否存在依赖关系的信息及所述存储过程中的SQL语句之间是否存在相同的子表达式的信息;
分组单元,用于根据所述SQL语句的信息将所述存储过程中的SQL语句分成至少一个SQL组,所述至少一个SQL组中任一SQL组中的语句间不存在依赖关系且存在相同的子表达式,所述SQL执行引擎在执行所述任一SQL组中的语句时,能够共用所述相同的子表达式的计算结果。
19.根据权利要求18所述的存储过程的编译装置,其特征在于,所述分组单元,包括:
顺序分组子单元,用于按照所述存储过程中SQL语句的先后顺序,依次将所述存储过程中的SQL语句分成至少一个SQL组。
20.根据权利要求19所述的存储过程的编译装置,其特征在于,当前存在有至少一个SQL组,且所述至少一个SQL组中的SQL组按照建立的时间先后排列为SQL组队列,
所述顺序分组子单元,用于:
步骤a、设置i=1;
步骤b、在所述SQL组队列中存在第一SQL组与所述存储过程中第i个SQL语句满足预设条件时,将所述第i个SQL语句设置在所述第一SQL组中,所述预设条件为所述第i个SQL语句与所述第一SQL组中的语句不存在依赖关系且存在相同的子表达式,且所述SQL组队列中在所述第一SQL组后的SQL组与所述第i个SQL语句不存在依赖关系且不存在相同的子表达式,或所述预设条件为所述第一SQL组为所述组队列的最后一个SQL组且与所述第i个SQL语句不存在依赖关系且存在相同的子表达式;
步骤c、在所述SQL组队列中不存在满足所述预设条件的SQL组时,建立第二SQL组并将所述第i个SQL语句设置在所述第二SQL组中;
步骤d、将i+1的值作为新的i,重复执行步骤b至d,直至所述存储过程中SQL语句划分至SQL组中。
21.根据权利要求20所述的存储过程的编译装置,其特征在于,在所述第i个SQL语句与所述第一SQL组具有相同的多重表集合,且以所述多重表集合中的数据表为顶点,所述第i个SQL语句以及所述第一SQL组中的语句共有的连接谓词为边构成的图形连通时,所述第i个SQL语句与所述第一SQL组中的语句存在相同的子表达式。
22.根据权利要求20所述的存储过程的编译装置,其特征在于,所述顺序分组子单元,还用于将所述第二SQL组设置在所述SQL组队列的末位。
23.一种数据库系统,其特征在于,所述数据库系统包括:存储过程执行引擎和SQL执行引擎,
所述存储过程执行引擎包括权利要求12至15任一所述的存储过程的运行装置;
所述SQL执行引擎包括权利要求16或17所述的存储过程的运行装置。
24.根据权利要求23所述的数据库系统,其特征在于,所述数据库系统还包括:存储过程编译引擎,
所述存储过程编译引擎包括权利要求18至22任一所述的存储过程的编译装置。
CN201610809314.5A 2016-09-05 2016-09-05 存储过程的运行、编译方法、装置和数据库系统 Active CN107798025B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610809314.5A CN107798025B (zh) 2016-09-05 2016-09-05 存储过程的运行、编译方法、装置和数据库系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610809314.5A CN107798025B (zh) 2016-09-05 2016-09-05 存储过程的运行、编译方法、装置和数据库系统

Publications (2)

Publication Number Publication Date
CN107798025A CN107798025A (zh) 2018-03-13
CN107798025B true CN107798025B (zh) 2020-06-02

Family

ID=61530071

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610809314.5A Active CN107798025B (zh) 2016-09-05 2016-09-05 存储过程的运行、编译方法、装置和数据库系统

Country Status (1)

Country Link
CN (1) CN107798025B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108959571B (zh) * 2018-07-04 2020-12-04 上海达梦数据库有限公司 Sql语句的运算方法、装置、终端设备及存储介质
CN109445881A (zh) * 2018-11-02 2019-03-08 拉卡拉支付股份有限公司 脚本运行方法、装置、电子设备及存储介质
CN110032574B (zh) * 2019-03-07 2021-02-02 北京东方国信科技股份有限公司 Sql语句的处理方法及装置
CN112711602B (zh) * 2019-10-25 2023-04-28 金篆信科有限责任公司 一种存储过程的运行方法、装置,数据库系统及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101385029A (zh) * 2006-02-15 2009-03-11 微软公司 物化外联接视图的维护
CN103092970A (zh) * 2013-01-24 2013-05-08 华为技术有限公司 一种数据库操作方法及设备
CN103714058A (zh) * 2012-09-28 2014-04-09 Sap股份公司 数据库查询的优化
CN104077530A (zh) * 2013-03-27 2014-10-01 国际商业机器公司 用于评估数据访问语句的安全性的方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130091266A1 (en) * 2011-10-05 2013-04-11 Ajit Bhave System for organizing and fast searching of massive amounts of data

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101385029A (zh) * 2006-02-15 2009-03-11 微软公司 物化外联接视图的维护
CN103714058A (zh) * 2012-09-28 2014-04-09 Sap股份公司 数据库查询的优化
CN103092970A (zh) * 2013-01-24 2013-05-08 华为技术有限公司 一种数据库操作方法及设备
CN104077530A (zh) * 2013-03-27 2014-10-01 国际商业机器公司 用于评估数据访问语句的安全性的方法和装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
列数据库的SQL查询语句编译与优化;甄真 等;《计算机工程》;20130630;第39卷(第6期);第60-65页 *

Also Published As

Publication number Publication date
CN107798025A (zh) 2018-03-13

Similar Documents

Publication Publication Date Title
US20220405284A1 (en) Geo-scale analytics with bandwidth and regulatory constraints
CN107798025B (zh) 存储过程的运行、编译方法、装置和数据库系统
CN104885078B (zh) 用于大规模并行处理数据库集群中的两阶段查询优化的方法
US9773041B2 (en) Methods and apparatus of shared expression evaluation across RDBMS and storage layer
JP3266351B2 (ja) データベース管理システムおよび問合せの処理方法
US11704347B2 (en) Adaptive interpretation and compilation of database queries
US7475056B2 (en) Query processing in a parallel single cursor model on multi-instance configurations, using hints
US9576026B2 (en) System and method for distributed SQL join processing in shared-nothing relational database clusters using self directed data streams
US20140351239A1 (en) Hardware acceleration for query operators
US10956417B2 (en) Dynamic operation scheduling for distributed data processing
US11468061B2 (en) Incremental simplification and optimization of complex queries using dynamic result feedback
CN111581234B (zh) Rac多节点数据库查询方法、装置及系统
CN108509453B (zh) 一种信息处理方法及装置
US11250059B2 (en) Optimizing graph queries by performing early pruning
Valvåg et al. Cogset: a high performance MapReduce engine
US9880823B1 (en) Method for translating multi modal execution dependency graph with data interdependencies to efficient application on homogenous big data processing platform
US20220035813A1 (en) Query optimization method and apparatus
US20220414100A1 (en) Decentralized query evaluation for a distributed graph database
CN113590651A (zh) 一种基于hql的跨集群数据处理系统及方法
CN113076332A (zh) 一种数据库预编译查询语句的执行方法
JP3538322B2 (ja) データベース管理システムおよび問合せの処理方法
CN117390040B (zh) 基于实时宽表的业务请求处理方法、设备及存储介质
US20230072930A1 (en) Database query splitting
CN110362397B (zh) 一种具有延迟约束功能的气泡执行方法
US20190188298A1 (en) Cost based function optimization for coupled systems

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant