CN110471935B - 一种数据操作的执行方法、装置、设备和存储介质 - Google Patents
一种数据操作的执行方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN110471935B CN110471935B CN201910752923.5A CN201910752923A CN110471935B CN 110471935 B CN110471935 B CN 110471935B CN 201910752923 A CN201910752923 A CN 201910752923A CN 110471935 B CN110471935 B CN 110471935B
- Authority
- CN
- China
- Prior art keywords
- internal connection
- original
- new
- grouping
- tables
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
Abstract
本发明公开了一种数据操作的执行方法、装置、设备和存储介质。其中,该方法包括:获取用户输入的SQL操作语句;如果SQL操作语句中的原始内连接为原始分组的下一级操作且原始分组对应的集函数满足预设条件时,则组合原始内连接指定的表集合中除集函数涉及的核心表之外的其他表;针对每一组合结果,根据该组合结果中的其他表和核心表在所述SQL操作语句中的内连接条件构造新的内连接和分组,并根据新的内连接和分组改造原始内连接和原始分组,得到对应的操作执行计划;采用执行代价最小的操作执行计划,执行SQL操作语句。本发明提供的技术方案,减少内连接得到的中间结果集中的数据量,降低数据操作耗费的执行代价,提高数据操作的执行效率。
Description
技术领域
本发明实施例涉及数据库处理领域,尤其涉及一种数据操作的执行方法、装置、设备和存储介质。
背景技术
在结构化查询语言(Structured Query Language,SQL)数据库中,SQL是一种为数据库建立的操作命令集,针对数据表的内连接和分组操作是其提供的基本功能。其中,内连接表示在关联的多张数据表中查找出符合预设条件的共有记录;分组操作通常与集函数配合使用,例如,分组统计和分组排序等。例如,表A与表B内连接的实现语句可以为:selectA.A_name,B.B_name from A,B where A.A_ID=B.B_ID;表A分组统计的实现语句为:select count(A.A_ID)FROM A GROUP BY A.A_ID;其中count(A.A_ID)为一种求表A中A_ID相同的行记录个数的集函数。
在对多张关联的数据表同时进行内连接和分组操作时,如果分组直接作为内连接的上一级操作,如select count(A.A_ID)FROM A,B where A.A_ID=B.B_ID GROUP BYB.B_ID,由于分组的操作符与内连接的操作符之间是相互独立的,因此通常先对多张关联的数据表依次根据预设的关联条件进行内连接操作,并对内连接后满足关联条件的最终数据表进行分组操作,如果内连接关联的数据表较多,此时每次仅控制两张数据表进行内连接,使得内连接得到的中间数据集中的数据量较大,降低了执行效率。
发明内容
本发明实施例提供了一种数据操作的执行方法、装置、设备和存储介质,降低数据操作耗费的执行代价,提高操作的执行效率。
第一方面,本发明实施例提供了一种数据操作的执行方法,该方法包括:
获取用户输入的SQL操作语句;
如果所述SQL操作语句中的原始内连接为原始分组的下一级操作且所述原始分组对应的集函数满足预设条件时,则组合所述原始内连接指定的表集合中除所述集函数涉及的核心表之外的其他表;
针对每一组合结果,根据该组合结果中的其他表和所述核心表在所述SQL操作语句中的内连接条件构造新的内连接和分组,并根据新的内连接和分组改造所述原始内连接和所述原始分组,得到对应的操作执行计划;
采用执行代价最小的操作执行计划,执行所述SQL操作语句。
第二方面,本发明实施例提供了一种数据操作的执行装置,该装置包括:
操作语句获取模块,用于获取用户输入的SQL操作语句;
表组合模块,用于如果所述SQL操作语句中的原始内连接为原始分组的下一级操作且所述原始分组对应的集函数满足预设条件时,则组合所述原始内连接指定的表集合中除所述集函数涉及的核心表之外的其他表;
执行计划生成模块,用于针对每一组合结果,根据该组合结果中的其他表和所述核心表在所述SQL操作语句中的内连接条件构造新的内连接和分组,并根据新的内连接和分组改造所述原始内连接和所述原始分组,得到对应的操作执行计划;
操作执行模块,用于采用执行代价最小的操作执行计划,执行所述SQL操作语句。
第三方面,本发明实施例提供了一种设备,该设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所述的数据操作的执行方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例所述的数据操作的执行方法。
本发明实施例提供了一种数据操作的执行方法、装置、设备和存储介质,在SQL操作语句中的原始内连接为原始分组的下一级操作且原始分组对应的集函数满足预设条件时,可以根据SQL操作语句中的内连接条件为原始内连接中经过组合得到的不同表集合分别重新构造新的内连接和分组,同时对原始内连接和原始分组进行改造,进而得到不同组合下与SQL操作语句的功能相同的操作执行计划,本方案将SQL操作语句中的原始分组在多张表的内连接过程中进行下放,进而依靠新的分组极大减少内连接得到的中间结果集中的数据量,同时采用执行代价最小的操作执行计划执行SQL操作语句,降低数据操作耗费的执行代价,提高数据操作的执行效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1A为本发明实施例一提供的一种数据操作的执行方法的流程图;
图1B为本发明实施例一提供的方法中新的内连接和分组的构造方法的流程图;
图1C为本发明实施例一提供的方法中原始内连接和原始分组的改造方法的流程图;
图2为本发明实施例二提供的一种数据操作的执行方法的流程图;
图3为本发明实施例三提供的一种数据操作的执行装置的结构示意图;
图4为本发明实施例四提供的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1A为本发明实施例一提供的一种数据操作的执行方法的流程图,本实施例可适用于任一数据库中对SOL操作语句中内连接和分组的合并处理的情况。本实施例提供的一种数据操作的执行方法可以由本发明实施例提供的数据操作的执行装置来执行,该装置可以通过软件和/或硬件的方式来实现,并集成在执行本方法的设备中,在本实施例中执行本方法的设备可以是平板电脑、台式机和笔记本等任意一种可以在数据库中执行数据操作的智能终端。
具体的,参考图1A,该方法可以包括如下步骤:
S110,获取用户输入的SQL操作语句。
其中,SQL操作语句是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。
具体的,在数据库中执行各种对应的数据操作时,用户会根据操作需要输入对应的SQL操作语句,以执行对应的操作,此时数据库客户端首先获取用户输入的SQL操作语句,并对该SQL操作语句进行解析,以便后续根据解析结果选择数据库对象对应的访问路径和执行过程,实现数据的创建、连接、删除及分组等各种操作。
S120,如果SQL操作语句中的原始内连接为原始分组的下一级操作且原始分组对应的集函数满足预设条件时,则组合原始内连接指定的表集合中除集函数涉及的核心表之外的其他表。
本实施例中,对获取的SQL操作语句进行解析后,需要根据解析结果判断该SQL操作语句是否包括内连接操作和分组操作。其中,内连接是指返回关联的多张表中符合条件的共有记录;示例性的,表A与表B内连接的实现语句可以为:select A.A_name,B.B_namefrom A,B where A.A_ID=B.B_ID;或者select A.A_name,B.B_name from A inner joinB on A.A_ID=B.B_ID;此时select A_name,B_name表示内连接后返回的结果集中包括表A的A_name列和表B的B_name列中的数据,将表A与表B中基于A.A_ID=B.B_ID匹配的共有记录返回。
进一步的,分组操作是对数据行集中的不同行进行分组,其中,数据行集可以为一个包括行和列的数据表,分组后的每一个组由其中所有分组对应列的值都相等的行构成。需要说明的是,分组操作常常与集函数配合使用,集函数可以用来对每个分组的行集合进行对应的计算操作,包括求最大值函数max(col)、求最小值函数min(col)、求和函数sum(col)、求平均值函数avg(col)和统计函数count(col)等等。具体的,本实施例中的原始内连接和原始分组是指用户输入的SQL操作语句中未经过改造的内连接和分组。
可选的,由于在SQL操作语句中同时存在依次执行的内连接和分组时,一般在执行完内连接操作后才会再执行分组操作,此时对于多张表内连接时生成的中间结果集中与后续分组无关的数据量较大,因此本实施例可以通过将分组下放,先在指定内连接的多张表中选出个别表先进行新的内连接和分组,在对分组后的表与多张表中剩余的表再次进行内连接和分组,从而减少内连接的中间结果集中的数据量,此时为了保证分组下放后执行的操作结果与原始操作结果的一致性,本实施例中的方案存在一定前提:1)原始内连接为原始分组的下一级操作,也就是确保原始分组的对象为对多张表进行原始内连接后得到的新表,原始内连接与原始分组之间不存在其他额外操作;2)原始分组对应的集函数的参数表示的数据项来自于参与原始内连接的多张表;3)原始分组下的分组项没有来自集函数的参数表示的数据项所在的表。此时针对上述前提,本实施例中原始分组对应的集函数所满足的预设条件可以包括:原始分组对应的集函数涉及的核心表为原始内连接指定的表集合中的至少一个表且该集函数涉及的核心表与原始分组下的分组项不相关。其中,原始内连接指定的表集合为由SQL操作语句中解析出确定参与原始内连接的多张表组成的集合,集函数涉及的核心表为该表集合中包含的集函数所涉及的数据项所在的表。
在本实施例中,通过对用户输入的SQL操作语句进行解析后,如果该SQL操作语句中的原始内连接为原始分组的下一级操作且原始分组对应的集函数满足预设条件时,说明该SQL操作语句中的原始内连接和原始分组满足本实施例设定的前提,此时首先确定该SQL操作语句中参与原始内连接的多张表,得到原始内连接指定的表集合,同时确定原始分组对应的集函数中的参数表示的数据项,进而确定该数据项所在的表,作为本实施例中的核心表,并在原始内连接指定的表集合中选取出除核心表之外的其他表,通过对其他表进行组合,得到后续实现分组下放对应的不同组合结果,以便对每一组合结果执行不同分组下放操作,将SQL操作语句转换为等效功能的执行计划。
以下述SQL操作语句为例进行具体的说明:
select sum(s.c1+1),min(s.c2)
from S,T1,T2,T3,T4where s.c1=t1.c1and t2.c2=t3.c3and t4.c4=s.c4
group by t1.c1,t2.c2;
通过对该SQL操作语句进行解析,说明对表S、表T1、表T2、表T3和表T4进行内连接后再分组,此时原始内连接指定的表集合为{S,T1,T2,T3,T4},原始分组对应的集函数为sum(s.c1+1)和min(s.c2),集函数参数均来自表S中,因此核心表为{S},其它表为{T1,T2,T3,T4}。
此时对其他表进行组合后得到的组合结果如下:
取0个表:{空}
取1个表:{T1},{T2},{T3}和{T4}
取2个表:{T1,T2},{T1,T3},{T1,T4},{T2,T3},{T2,T4}和{T3,T4}
取3个表:{T1,T2,T3},{T1,T2,T4},{T1,T3,T4}和{T2,T3,T4}
取4个表:{T1,T2,T3,T4}
在得到各个组合结果后,后续可以针对每一组合结果进行分组下放。
S130,针对每一组合结果,根据该组合结果中的其他表和核心表在SQL操作语句中的内连接条件构造新的内连接和分组,并根据新的内连接和分组改造原始内连接和原始分组,得到对应的操作执行计划。
具体的,在得到由原始内连接指定的表集合中未参与原始分组对应的集函数的各个表经过组合的各个组合结果后,依次针对每一组合结果,将该组合结果与原始分组对应的集函数涉及的核心表合并成一个新的表集合,并在用户获取的SQL操作语句中对于指定的表集合执行原始内连接时所限定的内连接条件中,查找出用于限定该组合结果中的各表以及核心表的内连接条件,进而根据原始内连接中对该组合结果中的各表以及核心表的内连接条件,对该组合结果中的各表以及核心表经过合并后的新的表集合构造新的内连接和分组,也就是在原始内连接指定的表集合中,依次选出各组合结果中包含的各表,分别与核心表重新合并成新的表集合,后续通过原始内连接中对于新的表集合中各表相关的内连接条件,首先对新的表集合进行与原始内连接和原始分组相关的新的内连接和分组,后续根据新的内连接和分组的结果对原始内连接和原始分组进行改造,通过改造后的内连接和分组对指定的表集合中剩余的表以及经过新的内连接和分组得到的中间结果集再次进行内连接和分组,从而得到与用户输入的SQL操作语句的操作功能相同的改造后的SQL操作语句,作为本实施例中的操作执行计划;通过对得到的每一组合结果执行上述步骤,可以得到每一组合结果对应的不同的操作执行计划,后续通过对各个操作执行计划的执行性能进行分析,选取出最优的操作执行计划来执行本实施例中的SQL操作语句,提高数据操作的执行效率。
需要说明的是,本实施例中的S120和S130为数据操作执行计划的生成阶段内的步骤,并未真正执行用户输入的SQL操作语句。
可选的,如图1B所示,对于新的内连接和分组的具体构造过程进行说明,本实施例中根据该组合结果中的其他表和核心表在SQL操作语句中的内连接条件构造新的内连接和分组,具体可以包括:
S131,根据该组合结果中的其他表和核心表生成对应的核心表集合。
具体的,在得到对于原始内连接指定的表集合中除核心表之外的其他表进行组合后的各个组合结果后,为了保证操作执行计划的全面性,本实施例可以分别将每一组合结果中包含的各个其他表与原始分组对应的集函数涉及的核心表进行合并,得到新的表集合,作为本实施例中的核心表集合,后续针对核心表集合构造新的内连接和分组,减少中间结果集的数据量。
S133,在原始内连接条件中选取出核心表集合中各表之间的内部关联条件,作为新的内连接下的内连接条件。
具体的,由于新的内连接需要与原始内连接的内连接条件之间存在一定匹配关系,以使核心表集合中包含的各表在新的内连接和原始内连接中的内连接功能相同,因此在原始内连接条件中选取出核心表集合中各表之间的内部关联条件,也就是原始内连接条件中与核心表集合中包含的各表相关的内连接条件,作为针对核心表集合所构造的新的内连接下的内连接条件,后续根据该新的内连接条件对核心表集合中的各表进行内连接。
S135,在原始内连接条件中选取出核心表集合中的各表与表集合中除核心表集合之外的其他表关联的数据项,作为新的分组下的分组项。
具体的,为了保证对核心表集合进行新的内连接和分组后得到的中间结果集中存在与原始内连接指定的表集合中除核心表集合之外的其他表关联的数据项,以便后续对该中间结果集与除核心表集合之外的其他表再次进行内连接,本实施例中可以根据原始内连接条件在核心表集合中的各表中确定出与原始内连接指定的表集合中除核心表集合之外的其他表关联的数据项,作为针对核心表集合所构造的新的分组下的分组项,以便根据该分组项进行分组后得到的中间结果集与原始内连接指定的表集合中剩余的表之间存在关联数据项,进而保证两者之间再次进行内连接和分组的正常操作。
S137,采用原始分组对应的集函数、新的内连接下的内连接条件和新的分组下的分组项,构造核心表集合对应的新的内连接和分组。
具体的,在得到针对核心表集合进行新的内连接和分组时对应的新的内连接条件和新的分组项后,由于用户输入的SQL操作语句最终目的是查询通过原始分组对应的集函数计算得到的结果,此时为了保证针对每一组合结果改造后的SQL操作语句与用户输入的SQL操作语句的操作功能相同,需要通过新的内连接和分组后得到的中间结果集中展示有原始分组对应的集函数的计算结果,因此本实施例中直接将原始分组对应的集函数作为新的分组对应的集函数,同时根据新的内连接下的内连接条件和新的分组下的分组项对核心表集合中的各表构造新的内连接和分组,后续将核心表集合中的各表经过新的内连接和分组后得到的中间结果集作为新的表,继续与原始内连接指定的表集合中剩余的表进行内连接和分组,从而减少中间结果集的数据量。
可选的,如图1C所示,对于原始内连接和原始分组的具体改造过程进行说明,本实施例中根据新的内连接和分组改造原始内连接和原始分组,具体可以包括:
S132,根据该组合结果中的其他表和核心表生成对应的核心表集合,并采用新的内连接和分组处理核心表集合,得到对应的新表。
具体的,在根据该组合结果中的其他表和核心表在SQL操作语句中的内连接条件构造新的内连接和分组后,针对每一组合结果,对于由该组合结果中包含的其他表和原始分组对应的集函数涉及的核心表经过合并得到的核心表集合,可以采用已经构造好的新的内连接和分组处理该核心表集合中包含的各表,得到对应的中间结果集,作为本实施例中的新表。
S134,根据新的分组下的分组项,将原始内连接条件中核心表集合中各表涉及的关联条件改造为新表与表集合中除核心表集合之外的其他表之间的关联条件。
具体的,由于后续需要将新表与原始分组指定的表集合中除核心表集合之外的其他表再次进行内连接和分组,此时需要将原始内连接条件修改为新表与表集合中除核心表集合之外的其他表之间限定的关系,由于新的分组下的分组项为核心表集合中包含的各表与原始内连接指定的表集合中除核心表集合之外的其他表关联的数据项,也就是分组项为新表中与表集合中除核心表集合之外的其他表之间存在关联关系的数据项,因此本实施例中可以根据新的分组下的分组项,将原始内连接条件中核心表集合中各表涉及的关联条件修改为新表中与分组项对应的数据项与表集合中除核心表集合之外的其他表之间的关联条件,与原始内连接条件中包含的表集合中除核心表集合之外的各个其他表之间的关联条件共同组成改造后的内连接条件,以便后续继续对新表和原始内连接指定的表集合中除核心表集合之外的其他表进行内连接。
S136,将新的分组对应的集函数作为目标参数,改造原始分组对应的集函数参数,并根据新表与表集合中除核心表集合之外的其他表之间的关联条件和原始分组下的分组项,生成对应的操作执行计划。
具体的,由于新的分组对应的集函数为原始分组对应的集函数,为了得到与原始分组对应的集函数相同的计算结果,本实施例中可以将新的分组对应的集函数作为新表中的目标参数,同时将原始分组对应的集函数中的参数修改为新表中的目标参数,同时根据新表与表集合中除核心表集合之外的其他表之间的关联条件(改造后的内连接条件)和原始分组下的分组项,将用户输入的SQL操作语句改造为具备相同操作功能的SQL操作语句,也就是本实施例中的操作执行计划。
此时对于原始分组对应的集函数参数的改造,需要对原始分组的集函数类型进行区分,对于最大值函数max(col)、最小值函数min(col)和求和函数sum(col)等,由于此类集函数在作为新的分组对应的集函数后,还可以继续作为原始分组改造后对应的集函数,能够保证改造后的计算结果与原始分组对应集函数的执行结果一致,因此可以直接将原始分组对应的集函数类型作为原始分组改造后的集函数类型,仅对其集函数参数进行替换;而对于平均值函数avg(col)和统计函数count(col)等,为了保证计算结果的一致性,需要对该类集函数类型进行转化;示例性的,如果原始分组对应的集函数为统计函数,而该统计函数为新的分组对应的集函数,此时改造后的分组对应的集函数参数为该统计函数的统计结果,因此对于原始分组对应的统计函数,可以修改为对新的分组对应的统计函数得到统计值求和,此时将原始分组对应的集函数更新为求和函数,并将原始分组对应的统计函数在新的分组下的统计值作为目标参数,设置为该求和函数的参数。
接下来通过上述SQL擦做语句的示例对新的内连接和分组的构造过程以及原始内连接和原始分组的改造过程进行详细的说明:
用户输入的SQL操作语句如下:
select sum(s.c1+1),min(s.c2)
from S,T1,T2,T3,T4where s.c1=t1.c1and t2.c2=t3.c3and t4.c4=s.c4
group by t1.c1,t2.c2;
此时原始内连接指定的表集合为{S,T1,T2,T3,T4},原始分组对应的集函数为sum(s.c1+1)和min(s.c2),集函数参数均来自表S中,因此核心表为{S},其它表为{T1,T2,T3,T4};
其他表{T1,T2,T3,T4}经过组合后的各个组合结果如下:
取0个表:{空}
取1个表:{T1},{T2},{T3}和{T4}
取2个表:{T1,T2},{T1,T3},{T1,T4},{T2,T3},{T2,T4}和{T3,T4}
取3个表:{T1,T2,T3},{T1,T2,T4},{T1,T3,T4}和{T2,T3,T4}
取4个表:{T1,T2,T3,T4}
1)针对组合结果:{空},核心表集合还是为{S},此时由于核心表集合中仅包含一个表,确定原始内连接条件中核心表集合{S}的内部关联条件(新的内连接下的内连接条件)为空,而原始内连接条件中核心表集合{S}与原始内连接指定的表集合中除核心表集合之外的其他表{T1,T2,T3,T4}关联的数据项(新的分组下的分组项)为s.c1和s.c4,同时新的分组对应的集函数为原始分组对应的集函数sum(s.c1+1)和min(s.c2);同时,将核心表集合经过新的内连接和分组后得到的中间结果集作为新表v,此时将原始内连接条件中与新的分组下的分组项关联的条件s.c1=t1.c1和t4.c4=s.c4改造为新表v相关的条件v.c1=t1.c1和t4.c4=v.c4,将新的分组对应的集函数作为新表v中的目标参数s1和s2,进而将原始分组对应的集函数修改为sum(s1)和min(s2);最终改造后的SQL操作语句如下:
select sum(s1),min(s2)
from(select sum(s.c1+1)s1,min(s.c2)s2,c1,c4from S group by s.c1,s.c4)v,T1,T2,T3,T4
where v.c1=t1.c1and t2.c2=t3.c3and t4.c4=v.c4
group by t1.c1,t2.c2;
2)针对组合结果:{T1},核心表集合为{S,T1},此时原始内连接条件中核心表集合{S,T1}的内部关联条件(新的内连接下的内连接条件)为s.c1=t1.c1,原始内连接条件中核心表集合{S,T1}与原始内连接指定的表集合中除核心表集合之外的其他表{T2,T3,T4}关联的数据项(新的分组下的分组项)为s.c4,同时新的分组对应的集函数为原始分组对应的集函数sum(s.c1+1)和min(s.c2);同时,将核心表集合经过新的内连接和分组后得到的中间结果集作为新表v,此时将原始内连接条件中与新的分组下的分组项关联的条件t4.c4=s.c4改造为新表v相关的条件t4.c4=v.c4,将新的分组对应的集函数作为新表v中的目标参数s1和s2,进而将原始分组对应的集函数修改为sum(s1)和min(s2);最终改造后的SQL操作语句如下:
select sum(s1),min(s2)
from(select sum(s.c1+1)s1,min(s.c2)s2,c4from S,T1wheres.c1=t1.c1group by s.c4)v,T2,T3,T4
Where t2.c2=t3.c3and t4.c4=v.c4
group by t1.c1,t2.c2;
后续可以按照上述步骤依次针对剩余的不同组合结果进行对应的改造,得到不同组合结果对应的操作执行计划。
而对于组合结果{T1,T2,T3,T4},改造后也是对{S,T1,T2,T3,T4}进行内连接后分组,与用户输入的SQL操作语句的执行过程一致,相当于分组未下放。
S140,采用执行代价最小的操作执行计划,执行SQL操作语句。
具体的,对于每一组合结果对应的操作执行计划,本实施例可以基于现有的代价计算公式计算各个操作执行计划在后续执行时所需要耗费的执行代价,从而选取出执行代价最小的操作执行计划,在计划执行阶段采用该操作执行计划执行用户输入的SQL操作语句,得到对应的数据操作结果,提高数据操作的执行效率。
本实施例提供的技术方案,在SQL操作语句中的原始内连接为原始分组的下一级操作且原始分组对应的集函数满足预设条件时,可以根据SQL操作语句中的内连接条件为原始内连接中经过组合得到的不同表集合分别重新构造新的内连接和分组,同时对原始内连接和原始分组进行改造,进而得到不同组合下与SQL操作语句的功能相同的操作执行计划,本方案将SQL操作语句中的原始分组在多张表的内连接过程中进行下放,进而依靠新的分组极大减少内连接得到的中间结果集中的数据量,同时采用执行代价最小的操作执行计划执行SQL操作语句,降低数据操作耗费的执行代价,提高数据操作的执行效率。
实施例二
图2为本发明实施例二提供的一种数据操作的执行方法的流程图。本实施例是在上述实施例的基础上进行优化。具体的,本实施例可以对新的内连接和分组的构造过程和原始内连接和原始分组的改造过程中的细节进行优化。
如图2所示,本实施例可以包括如下步骤:
S201,获取用户输入的SQL操作语句。
S202,如果SQL操作语句中的原始内连接为原始分组的下一级操作且原始分组对应的集函数满足预设条件时,则组合原始内连接指定的表集合中除集函数涉及的核心表之外的其他表。
S203,针对每一组合结果,根据该组合结果中的其他表和核心表生成对应的核心表集合。
S204,在原始内连接条件中选取出核心表集合中各表之间的内部关联条件,作为新的内连接下的内连接条件。
S205,在原始内连接条件中选取出核心表集合中的各表与表集合中除核心表集合之外的其他表之间的外部关联条件。
可选的,原始内连接条件中包含原始内连接指定的表集合中不同表之间的内连接关系,此时由于分组项需要保证中间结果集与表集合中除核心表集合之外的其他表能够准确进行内连接和分组,因此首先需要在原始内连接条件中选取出该核心表集合中的各表与表集合中除核心表集合之外的其他表之间的外部关联条件。
S206,确定外部关联条件中为核心表集合中的各表所指定的数据项,作为新的分组下的分组项。
可选的,在确定在原始内连接条件中核心表集合中的各表与表集合中除核心表集合之外的其他表之间的外部关联条件后,直接将该外部关联条件中为核心表集合中的各表所指定的数据项,作为本实施中新的分组下的分组项。
示例性的,针对组合结果:{T1},核心表集合为{S,T1},此时原始内连接条件中核心表集合{S,T1}的内部关联条件(新的内连接下的内连接条件)为s.c1=t1.c1,原始内连接条件中核心表集合{S,T1}与原始内连接指定的表集合中除核心表集合之外的其他表{T2,T3,T4}之间的外部关联条件为t4.c4=s.c4,此时根据该外部关联条件t4.c4=s.c4确定新的分组下的分组项为s.c4。
S207,采用原始分组对应的集函数、新的内连接下的内连接条件和新的分组下的分组项,构造核心表集合对应的新的内连接和分组。
S208,采用新的内连接和分组处理核心表集合,得到对应的新表。
S209,根据新的分组下的分组项,将原始内连接条件中核心表集合中各表涉及的关联条件改造为新表与表集合中除核心表集合之外的其他表之间的关联条件。
S210,根据新表与表集合中除核心表集合之外的其他表之间的关联条件和原始分组下的分组项,生成对应的操作执行计划。
S211,基于预设的代价模型计算操作执行计划的执行代价。
具体的,在针对每一组合结果得到对应的操作执行计划后,可以基于预设的代价模型分别计算各个操作执行计划的执行代价,以便后续选取出执行代价最小的操作执行计划,来执行本实施例中的SQL操作语句,提高数据操作的执行效率。
S212,采用执行代价最小的操作执行计划,执行SQL操作语句。
本实施例提供的技术方案,在SQL操作语句中的原始内连接为原始分组的下一级操作且原始分组对应的集函数满足预设条件时,可以根据SQL操作语句中的内连接条件为原始内连接中经过组合得到的不同表集合分别重新构造新的内连接和分组,同时对原始内连接和原始分组进行改造,进而得到不同组合下与SQL操作语句的功能相同的操作执行计划,本方案将SQL操作语句中的原始分组在多张表的内连接过程中进行下放,进而依靠新的分组极大减少内连接得到的中间结果集中的数据量,同时采用执行代价最小的操作执行计划执行SQL操作语句,降低数据操作耗费的执行代价,提高数据操作的执行效率。
实施例三
图3为本发明实施例三提供的一种数据操作的执行装置的结构示意图,如图3所示,该装置可以包括:
操作语句获取模块310,用于获取用户输入的SQL操作语句;
表组合模块320,用于如果SQL操作语句中的原始内连接为原始分组的下一级操作且原始分组对应的集函数满足预设条件时,则组合原始内连接指定的表集合中除集函数涉及的核心表之外的其他表;
执行计划生成模块330,用于针对每一组合结果,根据该组合结果中的其他表和核心表在SQL操作语句中的内连接条件构造新的内连接和分组,并根据新的内连接和分组改造原始内连接和原始分组,得到对应的操作执行计划;
操作执行模块340,用于采用执行代价最小的操作执行计划,执行SQL操作语句。
本实施例提供的技术方案,在SQL操作语句中的原始内连接为原始分组的下一级操作且原始分组对应的集函数满足预设条件时,可以根据SQL操作语句中的内连接条件为原始内连接中经过组合得到的不同表集合分别重新构造新的内连接和分组,同时对原始内连接和原始分组进行改造,进而得到不同组合下与SQL操作语句的功能相同的操作执行计划,本方案将SQL操作语句中的原始分组在多张表的内连接过程中进行下放,进而依靠新的分组极大减少内连接得到的中间结果集中的数据量,同时采用执行代价最小的操作执行计划执行SQL操作语句,降低数据操作耗费的执行代价,提高数据操作的执行效率。
进一步的,上述执行计划生成模块330,可以包括:
核心表集合生成单元,用于根据该组合结果中的其他表和核心表生成对应的核心表集合;
内连接条件确定单元,用于在原始内连接条件中选取出核心表集合中各表之间的内部关联条件,作为新的内连接下的内连接条件;
分组项确定单元,用于在原始内连接条件中选取出核心表集合中的各表与表集合中除核心表集合之外的其他表关联的数据项,作为新的分组下的分组项;
新操作构造单元,用于采用原始分组对应的集函数、新的内连接下的内连接条件和新的分组下的分组项,构造核心表集合对应的新的内连接和分组。
进一步的,上述分组项确定单元,可以具体用于:
在原始内连接条件中选取出核心表集合中的各表与表集合中除核心表集合之外的其他表之间的外部关联条件;
确定外部关联条件中为核心表集合中的各表所指定的数据项。
进一步的,上述执行计划生成模块330,还可以包括:
新表确定单元,用于根据该组合结果中的其他表和核心表生成对应的核心表集合,并采用新的内连接和分组处理核心表集合,得到对应的新表;
原始内连接改造单元,用于根据新的分组下的分组项,将原始内连接条件中核心表集合中各表涉及的关联条件改造为新表与表集合中除核心表集合之外的其他表之间的关联条件;
原始分组改造单元,用于将新的分组对应的集函数作为目标参数,改造原始分组对应的集函数参数,并根据新表与表集合中除核心表集合之外的其他表之间的关联条件和原始分组下的分组项,生成对应的操作执行计划。
进一步的,上述数据操作的执行装置,还可以包括:
执行代价计算模块,用于基于预设的代价模型计算所述操作执行计划的执行代价。
进一步的,上述预设条件可以包括:原始分组对应的集函数涉及的核心表为原始内连接指定的表集合中的至少一个表且该集函数涉及的核心表与原始分组下的分组项不相关。
本实施例提供的数据操作的执行装置可适用于上述任意实施例提供的数据操作的执行方法,具备相应的功能和有益效果。
实施例四
图4为本发明实施例四提供的一种设备的结构示意图。如图4所示,该设备包括处理器40、存储装置41和通信装置42;设备中处理器40的数量可以是一个或多个,图4中以一个处理器40为例;设备的处理器40、存储装置41和通信装置42可以通过总线或其他方式连接,图4中以通过总线连接为例。
存储装置41作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的数据操作的执行方法对应的模块。处理器40通过运行存储在存储装置41中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的数据操作的执行方法。
存储装置41可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置41可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置41可进一步包括相对于处理器40远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
通信装置42可用于实现网络连接或者移动数据连接。
本实施例提供的一种设备可用于执行上述任意实施例提供的数据操作的执行方法,具备相应的功能和有益效果。
实施例五
本发明实施例五还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时可实现上述任意实施例中的数据操作的执行方法。该方法具体可以包括:
获取用户输入的SQL操作语句;
如果SQL操作语句中的原始内连接为原始分组的下一级操作且原始分组对应的集函数满足预设条件时,则组合原始内连接指定的表集合中除集函数涉及的核心表之外的其他表;
针对每一组合结果,根据该组合结果中的其他表和核心表在SQL操作语句中的内连接条件构造新的内连接和分组,并根据新的内连接和分组改造原始内连接和原始分组,得到对应的操作执行计划;
采用执行代价最小的操作执行计划,执行SQL操作语句。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的数据操作的执行方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述数据操作的执行装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种数据操作的执行方法,其特征在于,包括:
获取用户输入的结构化查询语言SQL操作语句;
如果所述SQL操作语句中的原始内连接为原始分组的下一级操作且所述原始分组对应的集函数满足预设条件时,则组合所述原始内连接指定的表集合中除所述集函数涉及的核心表之外的其他表;
针对每一组合结果,根据该组合结果中的其他表和所述核心表在所述SQL操作语句中的内连接条件构造新的内连接和分组,并根据新的内连接和分组改造所述原始内连接和所述原始分组,得到对应的操作执行计划;
采用执行代价最小的操作执行计划,执行所述SQL操作语句;
其中,所述根据该组合结果中的其他表和所述核心表在所述SQL操作语句中的内连接条件构造新的内连接和分组,包括:
根据该组合结果中的其他表和所述核心表生成对应的核心表集合;
在原始内连接条件中选取出所述核心表集合中各表之间的内部关联条件,作为新的内连接下的内连接条件;
在原始内连接条件中选取出所述核心表集合中的各表与所述表集合中除所述核心表集合之外的其他表关联的数据项,作为新的分组下的分组项;
采用原始分组对应的集函数、新的内连接下的内连接条件和新的分组下的分组项,构造所述核心表集合对应的新的内连接和分组;
所述根据新的内连接和分组改造所述原始内连接和所述原始分组,包括:
根据该组合结果中的其他表和所述核心表生成对应的核心表集合,并采用新的内连接和分组处理所述核心表集合,得到对应的新表;
根据新的分组下的分组项,将原始内连接条件中所述核心表集合中各表涉及的关联条件改造为所述新表与所述表集合中除所述核心表集合之外的其他表之间的关联条件;
将新的分组对应的集函数作为目标参数,改造所述原始分组对应的集函数参数,并根据所述新表与所述表集合中除所述核心表集合之外的其他表之间的关联条件和原始分组下的分组项,生成对应的操作执行计划。
2.根据权利要求1所述的方法,其特征在于,在原始内连接条件中选取出所述核心表集合中的各表与所述表集合中除所述核心表集合之外的其他表关联的数据项,包括:
在原始内连接条件中选取出所述核心表集合中的各表与所述表集合中除所述核心表集合之外的其他表之间的外部关联条件;
确定所述外部关联条件中为所述核心表集合中的各表所指定的数据项。
3.根据权利要求1所述的方法,其特征在于,在得到对应的操作执行计划之后,还包括:
基于预设的代价模型计算所述操作执行计划的执行代价。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述预设条件包括:所述原始分组对应的集函数涉及的核心表为所述原始内连接指定的表集合中的至少一个表且该集函数涉及的核心表与原始分组下的分组项不相关。
5.一种数据操作的执行装置,其特征在于,包括:
操作语句获取模块,用于获取用户输入的SQL操作语句;
表组合模块,用于如果所述SQL操作语句中的原始内连接为原始分组的下一级操作且所述原始分组对应的集函数满足预设条件时,则组合所述原始内连接指定的表集合中除所述集函数涉及的核心表之外的其他表;
执行计划生成模块,用于针对每一组合结果,根据该组合结果中的其他表和所述核心表在所述SQL操作语句中的内连接条件构造新的内连接和分组,并根据新的内连接和分组改造所述原始内连接和所述原始分组,得到对应的操作执行计划;
操作执行模块,用于采用执行代价最小的操作执行计划,执行所述SQL操作语句;
其中,所述执行计划生成模块,包括:
核心表集合生成单元,用于根据该组合结果中的其他表和所述核心表生成对应的核心表集合;
内连接条件确定单元,用于在原始内连接条件中选取出所述核心表集合中各表之间的内部关联条件,作为新的内连接下的内连接条件;
分组项确定单元,用于在原始内连接条件中选取出所述核心表集合中的各表与所述表集合中除所述核心表集合之外的其他表关联的数据项,作为新的分组下的分组项;
新操作构造单元,用于采用原始分组对应的集函数、新的内连接下的内连接条件和新的分组下的分组项,构造所述核心表集合对应的新的内连接和分组;
新表确定单元,用于根据该组合结果中的其他表和核心表生成对应的核心表集合,并采用新的内连接和分组处理核心表集合,得到对应的新表;
原始内连接改造单元,用于根据新的分组下的分组项,将原始内连接条件中核心表集合中各表涉及的关联条件改造为新表与表集合中除核心表集合之外的其他表之间的关联条件;
原始分组改造单元,用于将新的分组对应的集函数作为目标参数,改造原始分组对应的集函数参数,并根据新表与表集合中除核心表集合之外的其他表之间的关联条件和原始分组下的分组项,生成对应的操作执行计划。
6.一种计算机设备,其特征在于,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-4中任一所述的数据操作的执行方法。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-4中任一所述的数据操作的执行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910752923.5A CN110471935B (zh) | 2019-08-15 | 2019-08-15 | 一种数据操作的执行方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910752923.5A CN110471935B (zh) | 2019-08-15 | 2019-08-15 | 一种数据操作的执行方法、装置、设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110471935A CN110471935A (zh) | 2019-11-19 |
CN110471935B true CN110471935B (zh) | 2022-02-18 |
Family
ID=68511408
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910752923.5A Active CN110471935B (zh) | 2019-08-15 | 2019-08-15 | 一种数据操作的执行方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110471935B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111427890B (zh) * | 2020-03-24 | 2023-11-14 | 上海达梦数据库有限公司 | 一种多表连接处理方法、装置、设备及存储介质 |
CN111506602B (zh) * | 2020-04-20 | 2023-05-09 | 上海达梦数据库有限公司 | 数据查询方法、装置、设备和存储介质 |
CN113535756B (zh) * | 2021-07-30 | 2023-05-30 | 上海达梦数据库有限公司 | 数据查询方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101593203A (zh) * | 2009-05-12 | 2009-12-02 | 用友软件股份有限公司 | 带有前处理和后处理的数据库复合查询系统及方法 |
CN104317964A (zh) * | 2014-11-14 | 2015-01-28 | 中国建设银行股份有限公司 | 一种基于iBatis的对象关系映射方法及系统 |
CN106227799A (zh) * | 2016-07-21 | 2016-12-14 | 江和慧 | 一种基于分布式数据库的sql语句处理方法 |
CN106250519A (zh) * | 2016-08-04 | 2016-12-21 | 曙光信息产业(北京)有限公司 | 用于并行数据库的数据查询方法和装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8095340B2 (en) * | 1992-11-17 | 2012-01-10 | Health Hero Network, Inc. | Home power management system |
WO2001052056A2 (en) * | 2000-01-14 | 2001-07-19 | Saba Software, Inc. | Method and apparatus for a business applications management system platform |
US10545935B2 (en) * | 2015-04-20 | 2020-01-28 | Oracle International Corporation | System and method for providing access to a sharded database using a cache and a shard technology |
CN106933914A (zh) * | 2015-12-31 | 2017-07-07 | 北京国双科技有限公司 | 多数据表的数据处理方法及装置 |
CN108415912B (zh) * | 2017-02-09 | 2021-11-09 | 阿里巴巴集团控股有限公司 | 基于MapReduce模型的数据处理方法和设备 |
US10002146B1 (en) * | 2017-02-13 | 2018-06-19 | Sas Institute Inc. | Distributed data set indexing |
-
2019
- 2019-08-15 CN CN201910752923.5A patent/CN110471935B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101593203A (zh) * | 2009-05-12 | 2009-12-02 | 用友软件股份有限公司 | 带有前处理和后处理的数据库复合查询系统及方法 |
CN104317964A (zh) * | 2014-11-14 | 2015-01-28 | 中国建设银行股份有限公司 | 一种基于iBatis的对象关系映射方法及系统 |
CN106227799A (zh) * | 2016-07-21 | 2016-12-14 | 江和慧 | 一种基于分布式数据库的sql语句处理方法 |
CN106250519A (zh) * | 2016-08-04 | 2016-12-21 | 曙光信息产业(北京)有限公司 | 用于并行数据库的数据查询方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110471935A (zh) | 2019-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110471935B (zh) | 一种数据操作的执行方法、装置、设备和存储介质 | |
US10769147B2 (en) | Batch data query method and apparatus | |
US10452632B1 (en) | Multi-input SQL-MR | |
US9576026B2 (en) | System and method for distributed SQL join processing in shared-nothing relational database clusters using self directed data streams | |
US8849871B2 (en) | Efficient pushdown of joins in a heterogeneous database system involving a large-scale low-power cluster | |
KR20170139556A (ko) | 데이터 소스들을 쿼리하기 위한 시스템 및 방법 | |
US11301470B2 (en) | Control method for performing multi-table join operation and corresponding apparatus | |
EP3251030B1 (en) | Workload aware data placement for join-based query processing in a cluster | |
CN111382347A (zh) | 一种对象特征的处理和信息推送方法、装置和设备 | |
CN111008521B (zh) | 生成宽表的方法、装置及计算机存储介质 | |
CN109299101B (zh) | 数据检索方法、装置、服务器和存储介质 | |
CN104731969A (zh) | 分布式环境下海量数据连接聚集查询方法、装置和系统 | |
CN110502532A (zh) | 远程数据库对象的优化方法、装置、设备和存储介质 | |
CN110928900B (zh) | 多表数据的查询方法、装置、终端以及计算机存储介质 | |
CN108549688B (zh) | 一种数据操作的优化方法、装置、设备和存储介质 | |
CN112631754A (zh) | 数据处理方法、装置、存储介质及电子装置 | |
CN112036931A (zh) | 一种实时标签计算方法、装置、计算机设备及存储介质 | |
CN110442616B (zh) | 一种针对大数据量的页面访问路径分析方法与系统 | |
CN107203550B (zh) | 一种数据处理方法和数据库服务器 | |
CN114969046A (zh) | 一种哈希连接的处理方法、存储介质与设备 | |
CN110162574B (zh) | 数据重分布方式的确定方法、装置、服务器及存储介质 | |
CN109710643B (zh) | 外连接管理方法、装置、服务器及存储介质 | |
US6421657B1 (en) | Method and system for determining the lowest cost permutation for joining relational database tables | |
CN114490095B (zh) | 请求结果的确定方法和装置、存储介质及电子装置 | |
CN114443659A (zh) | 联接表的方法和装置 |
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 |