CN108549688B - 一种数据操作的优化方法、装置、设备和存储介质 - Google Patents
一种数据操作的优化方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN108549688B CN108549688B CN201810321734.8A CN201810321734A CN108549688B CN 108549688 B CN108549688 B CN 108549688B CN 201810321734 A CN201810321734 A CN 201810321734A CN 108549688 B CN108549688 B CN 108549688B
- Authority
- CN
- China
- Prior art keywords
- table key
- key value
- current
- matching
- key values
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据操作的优化方法、装置、设备和存储介质。该方法包括:获取用户输入的SQL操作语句;在SQL操作语句中包括外连接操作和分组操作且分组操作对应的集函数为统计函数时,生成第一表对应的哈希表;依次获取第二表对应的第二表键值,作为当前第二表键值,并将当前第二表键值与哈希表中的第一表键值进行匹配,在匹配成功时,根据对应的第一表键值的重复次数以及历史匹配次数,确定当前匹配次数,直至第二表键值全部匹配完成;根据统计函数对应的统计标识、第一表键值的重复次数以及当前匹配次数,确定分组操作的输出结果。本发明实施例可以节约数据库内存的占用资源,提高数据操作的执行效率。
Description
技术领域
本发明实施例涉及数据库处理领域,尤其涉及一种数据操作的优化方法、装置、设备和存储介质。
背景技术
在关系数据库中,结构化查询语言(Structured Query Language,SQL)是一种为数据库建立的操作命令集,数据表的外连接和分组操作是其提供的基本功能。其中,外连接包括左外连接和右外连接,且左外连接与右外连接可以转化;分组操作通常与集函数配合使用,例如,分组统计和分组排序等。例如,表A与表B左外连接的实现语句为:SELECT A_IDFROM A LEFT OUTER JOIN B ON A_ID=B_ID;其中,表A为左表,表B为右表;表A分组统计的实现语句为:SELECT A_ID,COUNT(A_ID)FROM A GROUP BY A_ID;其中COUNT(A_ID)与GROUPBY A_ID配合,为求表A中A_ID相同的行记录个数的集函数。
在对数据表同时进行外连接和分组统计时,通常解析用户输入的SQL语句,选择数据库对象的访问路径和执行过程,生成对应的包含该SQL语句整体执行过程的执行计划树。其中,执行计划树的每个节点由一个对应的操作符构成,数据从执行计划树的叶子节点经执行计划树各层次节点的处理,流向根节点,对该SQL语句按照特定的访问路径进行访问,最后生成执行结果返回给用户。
现有技术中,使用一个操作符来实现左外连接,使用另一操作符实现分组,这两个操作符是相互独立的。当同时存在左外连接和分组统计操作,且均采用哈希方法实现时,在采用两个操作符分别实现时,需要根据同一键值生成两个内容相同的哈希表分别进行处理,浪费内存资源,降低了执行效率。
发明内容
本发明实施例提供了一种数据操作的优化方法、装置、设备和存储介质,以节约内存占用资源,提高执行效率。
第一方面,本发明实施例提供了一种数据操作的优化方法,该方法包括:
获取用户输入的SQL操作语句;
在所述SQL操作语句中包括外连接操作和分组操作,且所述外连接操作和所述分组操作满足预设条件且所述分组操作对应的集函数为统计函数时,生成外连接中的第一表对应的哈希表,所述哈希表包括所述第一表中的第一表键值及对应的第一表键值的重复次数;
依次获取所述外连接中第二表对应的第二表键值,作为当前第二表键值,并将所述当前第二表键值与所述哈希表中的第一表键值进行匹配,在所述当前第二表键值与所述第一表键值匹配成功时,根据对应的第一表键值的重复次数以及历史匹配次数,确定所述第一表键值的当前匹配次数,直至所述第二表键值全部匹配完成;
根据所述SQL操作语句中的统计函数对应的统计标识、所述对应的第一表键值的重复次数以及当前匹配次数,确定所述分组操作的输出结果。
第二方面,本发明实施例提供了一种数据操作的优化装置,该装置包括:
操作语句获取模块,用于获取用户输入的SQL操作语句;
哈希表生成模块,用于在所述SQL操作语句中包括外连接操作和分组操作,且所述外连接操作和所述分组操作满足预设条件且所述分组操作对应的集函数为统计函数时,生成外连接中的第一表对应的哈希表,所述哈希表包括所述第一表中的第一表键值及对应的第一表键值的重复次数;
键值匹配模块,用于依次获取所述外连接中第二表对应的第二表键值,作为当前第二表键值,并将所述当前第二表键值与所述哈希表中的第一表键值进行匹配,在所述当前第二表键值与所述第一表键值匹配成功时,根据对应的第一表键值的重复次数以及历史匹配次数,确定所述第一表键值的当前匹配次数,直至所述第二表键值全部匹配完成;
输出确定模块,用于根据所述SQL操作语句中的统计函数对应的统计标识、所述对应的第一表键值的重复次数以及当前匹配次数,确定所述分组操作的输出结果。
第三方面,本发明实施例提供了一种设备,该设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所述的数据操作的优化方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例所述的数据操作的优化方法。
本发明实施例提供的一种数据操作的优化方法、装置、设备和存储介质,在外连接操作与分组操作同时存在时,通过在数据库中执行外连接操作的同时执行分组操作,共享一个哈希表,节约了数据库内存的占用资源,提高了数据操作的执行效率,优化了操作执行过程。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明实施例一提供的一种数据操作的优化方法的流程图;
图2为本发明实施例二提供的一种数据操作的优化方法的流程图;
图3为本发明实施例三提供的一种数据操作的优化装置的结构示意图;
图4为本发明实施例四提供的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种数据操作的优化方法的流程图,本实施例可适用于数据库技术中任一种对SOL操作语句中外连接操作和分组操作的合并处理的情况。本实施例提供的一种数据操作的优化方法可以由本发明实施例提供的数据操作的优化装置来执行,该装置可以通过软件和/或硬件的方式来实现,并集成在执行本方法的设备中,在本实施例中执行本方法的设备可以是平板电脑、台式机和笔记本等任意一种可以在数据库中执行数据操作的智能终端。具体的,参考图1,该方法可以包括如下步骤:
S110,获取用户输入的SQL操作语句。
其中,在数据库中执行各种数据操作时,用户会根据需要输入对应的SQL操作语句,执行对应的操作。可选的,SQL操作语句是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。
具体的,在数据库中执行各种对应的数据操作时,首先需要获取用户输入的SQL操作语句,并对该SQL操作语句进行解析,从而根据解析结果选择数据库对象对应的访问路径和执行过程,实现数据的创建、连接、删除及分组等各种操作。
S120,在SQL操作语句中包括外连接操作和分组操作,外连接操作和分组操作满足预设条件且分组操作对应的集函数为统计函数时,生成外连接中的第一表对应的哈希表。
其中,所述哈希表包括所述第一表中的第一表键值及对应的第一表键值的重复次数。
本实施例中,对获取的SQL操作语句进行解析后,需要根据解析结果判断该SQL操作语句是否包括外连接操作和分组操作。具体的,外连接操作可以包括左外连接和右外连接,其中,左外连接是返回该左外连接对应的SQL操作语句中指定的左表中的全部行,无论在右表中是否有对应的匹配行,以及右表中与指定左表中的行相匹配的行,如果左表的某行在右表中没有匹配行,则在返回的结果集行中该行对应的右表中所有选择列表的值设为空值。示例性的,表A与表B左外连接的实现语句为:SELECT A_ID FROM A LEFT OUTER JOINB ON A_ID=B_ID;需要说明的是,SELECT A_ID表示返回A_ID列中的数据,LEFT OUTERJOIN表示左外连接,表A为左表,表B为右表,A_ID=B_ID表示匹配关系。例如,表A的A_ID列的数据为1、1、3、5,表B的B_ID列的数据为1、1、5、8,由于表A中的数据3在表B中没有匹配的值,因此返回表中数据3对应的B_ID列的值为NULL,表B中的数据8在表A中没有匹配的值,因此不返回数据8的值。
进一步的,右外连接为左外连接的反向连接,返回该右外连接对应的SQL操作语句中指定的右表中的全部行,无论在左表中是否有对应的匹配行,以及左表中与右表中的行相匹配的行,如果右表的某行在左表中没有匹配行,则在返回的结果集行中该行对应的左表中所有选择列表的值设为空值。示例性的,表A与表B右外连接的实现语句为:SELECT B_ID FROM A RIGHT OUTER JOIN B ON A_ID=B_ID;需要说明的是,SELECT B_ID表示返回B_ID列的数据,RIGHT OUTER JOIN表示右外连接,表A为左表,表B为右表,A_ID=B_ID表示匹配关系。例如,表A的A_ID列的数据为1、1、3、5,表B的B_ID列的数据为1、1、5、8,由于表B中的数据8在表A中没有匹配的值,因此返回表中数据8对应的A_ID列的值为NULL,表A中的数据3在表B中没有匹配的值,因此不返回数据3的值。
进一步的,分组操作是对数据行集进行分组,其中,数据行集可以为一个包括行和列的数据表,分组后的每一个组由其中所有分组对应列的值都相等的行构成。需要说明的是,分组操作常常与集函数配合使用,集函数可以用来对每个分组的行集合进行统计操作,包括求最大值函数MAX(COL)、求最小值函数MIN(COL)、求和函数SUN(COL)、求平均值函数AVG(COL)和统计函数COUNT(COL)等等,其中统计函数COUNT(COL)的功能是求行集中指定COL列中非空值的行记录个数。需要说明的是,由于求最大值函数MAX(COL)、求最小值函数MIN(COL)、求和函数SUN(COL)和求平均值函数AVG(COL)在分组操作中均是在统计函数COUNT(COL)的基础上额外完成的,本实施例仅对分组操作对应的集函数为统计函数COUNT(COL)的情况进行说明,其他的集函数可以在此基础上通过额外的简单计算获得,在本实施例中不作具体说明。
可选的,为了将外连接操作与分组操作同时进行处理,优化操作步骤,预设条件可以包括:外连接操作的输出为分组操作的输入并且外连接操作和分组操作的键值相同。其中,外连接操作的输出是将两个数据表进行外连接后返回的包括两个数据表中指定列的一个整体数据表,分组操作是对一个数据表中的指定列执行分组操作。其中,外连接操作的输出为分组操作的输入表示对两个数据表进行外连接操作后返回的整体数据表中的指定列执行分组操作,可以直接由用户输入的SQL操作语句进行判断。进一步的,外连接操作的键值是SQL操作语句中执行外连接操作后选择的指定列对应的数据值,分组操作的键值是SQL操作语句中执行分组操作时选择的指定列对应的数据值。示例性的,表A与表B同时执行外连接操作和分组操作的实现语句为:SELECT A_ID,COUNT(B_ID)FROM A LEFT OUTER JOINB ON A_ID=B_ID GROUP BY A_ID;其中,表A的键值为A_ID,表B的键值为B_ID,SELECT A_ID表示外连接操作的键值为A_ID,GROUP BY A_ID表示分组操作的键值为A_ID。由此,外连接操作和所述分组操作是否满足预设条件可以直接通过SQL操作语句进行判断。
进一步的,由于外连接操作和分组操作同步执行时,需要同样的实现方法,现有技术中外连接操作和分组操作均可以通过哈希方式实现,嵌套循环外连接和索引外连接没有对应的分组实现方法,因此本实施例中选用哈希外连接和哈希分组实现,但不限于哈希方式,只要外连接操作和分组操作采用统一的实现方式即可。本实施例中,采用哈希外连接实现时,需要首先生成第一表对应的哈希表。需要说明的是,由于哈希表仅由左节点来构造生成,因此如果外连接为左外连接,则第一表为左表,如果外连接为右外连接,则将该右外连接转化为左外连接,此时第一表为右外连接中的右表。具体的,哈希表是由外连接中返回全部行的对应表,也就是第一表,进行生成,哈希表可以包括第一表中的第一表键值及对应的第一表键值的重复次数。在哈希表生成过程中,忽略第一表键值相同的数据,仅记录该相同第一表键值的重复次数。其中,第一表键值为SQL操作语句中执行外连接时根据外连接操作指定列的数据得到的键值,第一表键值的重复次数为在该指定列中具有同一第一表键值的行的个数。例如,表A为第一表时,对应的A_ID列的数据为1、1、3、5,则针对A_ID列,1、3、5为第一表键值,对应的第一表键值1的重复次数为2,对应的第一表键值3的重复次数为1,对应的第一表键值5的重复次数为1。
可选的,在获取到用户输入的SQL操作语句时,根据该SQL操作语句的解析结果可以直接确定数据操作中是否包括外连接操作和分组操作,并判断外连接操作和分组操作是否满足预设条件且分组操作对应的集函数是否为统计函数。当确定SQL操作语句中外连接操作的输出为分组操作的输入,且外连接操作和分组操作的键值相同,以及分组操作对应的集函数为统计函数时,根据外连接中的第一表生成包括第一表中的第一表键值及对应的第一表键值的重复次数的哈希表。
S130,依次获取外连接中第二表对应的第二表键值,作为当前第二表键值,并将当前第二表键值与哈希表中的第一表键值进行匹配,在当前第二表键值与第一表键值匹配成功时,根据对应的第一表键值的重复次数以及历史匹配次数,确定第一表键值的当前匹配次数,直至第二表键值全部匹配完成。
其中,外连接中的第二表为两表连接时返回匹配行的对应表,例如,如果为左外连接,第二表为右表;如果为右外连接,第二表为左表。具体的,第二表键值为SQL操作语句对应的外连接操作中,与第一表键值进行匹配的第二表中的指定列对应的数据值。例如,实现语句为:SELECT A_ID,COUNT(B_ID)FROM A LEFT OUTER JOIN B ON A_ID=B_ID GROUP BYA_ID;其中ON A_ID=B_ID中,B_ID列中的数据为第二表键值。需要说明的是,本实施例中的第一表键值、第二表键值以及外连接操作和分组操作的键值均可以在SQL操作语句中直接确定,例如,在上述实现语句中,FROM A LEFT OUTER JOIN B ON A_ID=B_ID表示左外连接中的第一表键值为A_ID列中的数据,第二表键值为B_ID列中的数据;SELECT A_ID表示执行左外连接操作后返回A_ID列中的数据,GROUP BY A_ID表示执行分组操作的键值为A_ID列中的数据,彼此相互关联。
在将第一表键值与第二表键值匹配之前,历史匹配次数初始值可以设置为0,对同一第一表键值已与第二表键值匹配成功过时,历史匹配次数为已匹配成功的次数与初始值之和。
可选的,在生成外连接中第一表对应的哈希表后,为了对外连接操作和分组操作进行同步处理,可以将第二表中的第二表键值与哈希表中的第一表键值一一进行匹配。依次获取外连接中第二表对应的第二表键值,即针对每一行数据分别获取对应的第二表键值,并分别进行匹配处理,具体的,首先从第二表中的起始数据行开始,获取外连接中第二表对应的起始第二表键值,作为当前第二表键值,将该当前第二表键值分别与哈希表中的第一表键值一一进行匹配,在第一表键值为第一次匹配成功时,历史匹配次数设定为初始值,根据对应的第一表键值的重复次数以及初始值之和,确定第一表键值的当前匹配次数,并在下一次匹配时,将此次确定的当前匹配次数作为历史匹配次数,根据该第一表键值的重复次数以及历史匹配次数之和,重新确定该第一表键值的当前匹配次数。在该第二表键值匹配完成时,再次获取第二表中的下一个第二表键值,作为当前第二表键值,再次与哈希表中的第一表键值进行匹配,以此类推,直至第二表中的第二表键值全部匹配完成。
示例性的,以SELECT A_ID,COUNT(B_ID)FROM A LEFT OUTER JOIN B ON A_ID=B_ID GROUP BY A_ID为例,假设表A的A_ID列的数据为1、1、3、5,表B的B_ID列的数据为1、1、5、8,那么如下表1中的匹配结果所示,根据第一表A的第一表键值A_ID列中的数据生成哈希表,哈希表中包括第一表键值1、3和5,对应的重复次数分别为2、1、1,并将所有第一表键值的历史匹配次数初始值设为0。依次获取第二表B中B_ID列中的第二表键值,对应有4个数据,分别为1,1,5,8,对于第一个第二表键值1,与哈希表中的第一表键值1成功匹配,重复次数为2,由于是第一次匹配成功,将历史匹配次数初始值作为历史匹配次数,则当前匹配次数为2;对于第二个第二表键值1,第二次与哈希表中的第一表键值1成功匹配,此时将已匹配成功的次数与初始值之和作为历史匹配次数,也就是表1中的“匹配_1”,则当前匹配次数为4;对于第二表键值5,重复次数为1,且是第一次匹配成功,将历史匹配次数初始值作为历史匹配次数,则当前匹配次数为1;对于第二表键值8,未能与哈希表中的第一表键值成功匹配;至此第二表B中的第二表键值全部匹配完成,此时第一表中的第一表键值3,第二表中无数据与其匹配,因此其当前匹配次数为0。
表1匹配结果
A_ID | 重复次数n_dup | 匹配_初始值 | 匹配_1 | 匹配_2 | 匹配_3 |
1 | 2 | 0 | 2 | 4 | 4 |
3 | 1 | 0 | 0 | 0 | 0 |
5 | 1 | 0 | 0 | 0 | 1 |
S140,根据SQL操作语句中的统计函数对应的统计标识、对应的第一表键值的重复次数以及当前匹配次数,确定分组操作的输出结果。
具体的,统计函数对应的统计标识表示在执行分组操作时,对外连接操作后合并的数据表中总行数和非空值对应的行数进行统计。可选的,统计标识可以包括第一标识和第二标识,其中,第一标识可以为第二表的列,例如B_ID,COUNT(第二表列)表示对数据表中的具有相同数据值的分组中指定第二表列为非空值的行个数进行统计;第二标识可以为*,COUNT(*)表示对数据表中的具有相同数据值的分组中的总行数进行统计。可选的,根据SQL操作语句中的统计函数对应的统计标识、对应的第一表键值的重复次数以及当前匹配次数,可以确定分组操作的输出结果,也就是第一表键值以及其对应的行数的统计值。
可选的,根据SQL操作语句中的统计函数对应的统计标识、对应的第一表键值的重复次数以及当前匹配次数,确定分组操作的输出结果,可以包括:
当统计标识为第一标识时,确定对应的第一表键值的当前匹配次数为对应的第一表键值的输出统计结果。
具体的,通过判断统计函数对应的统计标识,确定统计的是具有相同数据值的行的总个数,还是非空行的个数。当统计标识为第一标识,也就是统计具有相同数据值的非空行的个数时,将哈希表中对应的第一表键值的当前匹配次数作为该第一表键值的输出统计结果。例如,在上述表1中,COUNT(B_ID)表示数据1、数据3和数据5对应的非空行数的输出统计结果分别为4、0、1,该语句中分组操作的输出结果为(1,4),(3,0),(5,1)。
当统计标识为第二标识,且对应的第一表键值的当前匹配次数为第一预设次数时,确定对应的第一表键值的重复次数为对应的第一表键值的输出统计结果;当统计标识为第二标识,且对应的第一表键值的当前匹配次数不是第一预设次数时,确定对应的第一表键值的当前匹配次数为对应的第一表键值的输出统计结果。
具体的,当统计标识为第二标识,也就是统计的是具有相同数据值的总行数时,还需要进一步判断对应的第一表键值的当前匹配次数是否为第一预设次数,其中第一预设次数为0,也就是判断该第一表键值在第二表中是否存在。当统计标识为第二标识,且对应的第一表键值的当前匹配次数为第一预设次数时,说明该第一表键值未能与第二表键值匹配,此时该第一表键值对应的第二表中的列的数据为空,可以将对应的第一表键值的重复次数作为该第一表键值的输出统计结果。例如,在上述表1中,如果SQL操作语句中的集函数为COUNT(*),也就是统计行的总个数,此时哈希表中数据3未能匹配,当前匹配次数为0,因此,将数据3的重复次数1作为对应的输出统计结果。当统计标识为第二标识,且对应的第一表键值的当前匹配次数不是第一预设次数时,说明该第一表键值与第二表键值匹配成功,此时该第一表键值对应的第二表中的列的数据不为空,因此,还是将对应的第一表键值的当前匹配次数作为该第一表键值的输出统计结果。例如,在上述表1中,如果SQL操作语句中的集函数为COUNT(*),对于数据1和数据5,与第二表中的数据成功匹配,因此将数据1和数据5的当前匹配次数作为对应的输出统计结果。在SQL操作语句中的集函数为COUNT(*)时,该语句中的分组操作的输出结果为(1,4),(3,1),(5,1)。
本实施例提供的技术方案,在外连接操作与分组操作同时存在时,通过在数据库中执行外连接操作的同时执行分组操作,共享一个哈希表,节约了数据库内存的占用资源,提高了数据操作的执行效率,优化了操作执行过程。
实施例二
图2为本发明实施例二提供的一种数据操作的优化方法的流程图。本实施例是在上述实施例的基础上进行优化。具体的,参照图2,本实施例可以包括如下步骤:
S201,获取用户输入的结构化查询语言SQL操作语句。
S202,判断SQL操作语句中是否包括外连接操作和分组操作;若是,执行S204,若否,执行S203。
S203,不进行优化,顺序执行。
即按照现有技术执行,分别生成外连接操作符和分组操作符。
S204,判断外连接操作和分组操作是否满足预设条件且分组操作对应的集函数是否为统计函数;若是,执行S205,若否,执行S203。
S205,在生成执行计划树时,生成外连接操作符,并将与分组操作对应的集函数移至外连接操作符中。
具体的,在SQL操作语句中包括外连接操作和分组操作,外连接操作和分组操作满足预设条件且分组操作对应的集函数为统计函数时,为了优化操作过程,在执行外连接操作的同时执行分组操作,会在执行外连接操作和分组操作的执行计划树的生成阶段,直接进行改进。其中,执行计划树是根据SQL操作语句具体选择的数据库对象的访问路径和执行过程,执行计划树的每个节点由一个操作符构成,数据从执行计划树的叶子节点经执行计划树各层次节点的处理,流向根节点,生成执行结果返回给用户。
可选的,在执行计划树的生成阶段,首先生成外连接操作符,实现外连接操作,而为了在执行外连接操作的同时执行分组操作,本实施例中,不再生成分组操作符,而是将与分组操作对应的集函数移至外连接操作符中,使外连接操作符也能实现分组操作的功能,采用一个操作符完成外连接操作和分组操作两个操作符的功能,提高执行效率。
S206,在按照执行计划树执行时,如果外连接操作符中包括集函数,则生成外连接中的第一表对应的哈希表。
具体的,数据库中执行SQL操作语句,会按照对应的执行计划树执行,其中,执行计划树的生成阶段和执行阶段分开执行。在执行计划树的执行阶段,如果数据库中执行多条SQL操作语句,则会同时执行多个执行计划树,在具体执行时,按照已经生成的执行计划树执行。需要说明的是,本实施例中的SQL操作语句只有一条,仅执行对应的一个执行计划树。可选的,本实施例中,在执行外连接操作和分组操作时,首先获取执行计划树中的操作符,如果执行计划树中包括外连接操作符,需要判断外连接操作符中是否包括集函数,如果包括,说明执行计划树生成时,已将与分组操作对应的集函数移至外连接操作符中,进行同步操作,并生成外连接中的第一表对应的哈希表。
S207,依次获取外连接中第二表对应的第二表键值,作为当前第二表键值,并将当前第二表键值与哈希表中的第一表键值进行匹配。
S208,根据当前第二表键值及哈希函数确定哈希表中的存储位置。
具体的,在采用哈希实现方式时,哈希表的生成是通过哈希函数确定第一表键值对应的存储位置,也就是根据第一表键值通过哈希函数得到对应的哈希槽,将该第一表键值对应的行记录作为一个哈希单元插入到该哈希槽对应的位置,作为该第一表键值在哈希表中的存储位置。其中,哈希函数可以将第一表键值作为自变量,通过一定的函数映射关系,计算出对应的结果值,并将该结果值作为该第一表键值的存储位置,可以表示为:Addr=H(key),哈希表中每个第一表键值与其在哈希表中的存储位置一一对应。
可选的,在将当前第二表键值与第一表键值进行匹配时,可以根据当前第二表键值通过生成哈希表时的哈希函数得到该当前第二表键值在哈希表中的存储位置,与该存储位置存储的第一表键值进行匹配。
S209,在存储位置存储有第一表键值时,将当前第二表键值与第一表键值进行匹配,并在确定匹配成功时,获取哈希表中对应的第一表键值的重复次数。
具体的,在得到当前第二表键值在哈希表中的存储位置时,由于通过同一个哈希函数确定存储位置,不同的数据值(也就是第二表键值)在通过哈希函数运算后,得到的哈希值可能相同,也就是存储位置可能会相同,因此同一个哈希槽(也就是存储位置)中可能会存储多个不同的键值。当存储位置存储有第一表键值时,还需要对存储位置中的第一表键值与当前第二表键值进行进一步匹配,在确定当前第二表键值与第一表键值匹配成功时,获取哈希表中对应的第一表键值的重复次数。
S210,依据对应的第一表键值的重复次数以及历史匹配次数,确定第一表键值的当前匹配次数。
具体的,为了得到该第一表键值的当前匹配次数,可以依据该第一表键值的重复次数以及历史匹配次数之和,确定对应的第一表键值的当前匹配次数。
S211,判断第二表键值是否全部匹配完成;若是,执行S212,若否,执行S207。
S212,根据SQL操作语句中的统计函数对应的统计标识、对应的第一表键值的重复次数以及当前匹配次数,确定分组操作的输出结果。
本实施例提供的技术方案,在外连接操作与分组操作同时存在时,通过在数据库中执行外连接操作的同时执行分作操作,共享一个哈希表,节约了数据库内存的占用资源;而且通过采用一个操作符同时完成外连接操作和分组操作两个操作符的功能,提高了数据操作的执行效率,优化了操作执行过程。
实施例三
图3为本发明实施例三提供的一种数据操作的优化装置的结构示意图,如图3所示,该装置可以包括:
操作语句获取模块310,用于获取用户输入的SQL操作语句。
哈希表生成模块320,用于在SQL操作语句中包括外连接操作和分组操作,外连接操作和分组操作满足预设条件且分组操作对应的集函数为统计函数时,生成外连接中的第一表对应的哈希表,哈希表包括第一表中的第一表键值及对应的第一表键值的重复次数。
键值匹配模块330,用于依次获取外连接中第二表对应的第二表键值,作为当前第二表键值,并将当前第二表键值与哈希表中的第一表键值进行匹配,在当前第二表键值与第一表键值匹配成功时,根据对应的第一表键值的重复次数以及历史匹配次数,确定第一表键值的当前匹配次数,直至第二表键值全部匹配完成。
输出确定模块340,用于根据SQL操作语句中的统计函数对应的统计标识、对应的第一表键值的重复次数以及当前匹配次数,确定分组操作的输出结果。
本实施例提供的技术方案,在外连接操作与分组操作同时存在时,通过在数据库中执行外连接操作的同时执行分作操作,共享一个哈希表,节约了数据库内存的占用资源,提高了数据操作的执行效率,优化了操作执行过程。
进一步的,上述键值匹配模块330可以包括:位置确定单元3301,用于根据当前第二表键值及哈希函数确定哈希表中的存储位置;重复次数获取单元3302,用于在存储位置存储有第一表键值时,将当前第二表键值与第一表键值进行匹配,并在确定匹配成功时,获取哈希表中对应的第一表键值的重复次数;当前匹配确定单元3303,用于依据对应的第一表键值的重复次数以及历史匹配次数,确定第一表键值的当前匹配次数。
进一步的,上述输出确定模块340可以包括:第一结果确定单元3401,用于当统计标识为第一标识时,确定对应的第一表键值的当前匹配次数为对应的第一表键值的输出统计结果;第二结果确定单元3402,用于当统计标识为第二标识,且对应的第一表键值的当前匹配次数为第一预设次数时,确定对应的第一表键值的重复次数为对应的第一表键值的输出统计结果;第三结果确定单元3403,用于当统计标识为第二标识,且对应的第一表键值的当前匹配次数不是第一预设次数时,确定对应的第一表键值的当前匹配次数为对应的第一表键值的输出统计结果。
进一步的,上述哈希表生成模块320可以包括:执行计划生成单元3201,用于在生成执行计划树时,生成外连接操作符,并将与分组操作对应的集函数移至外连接操作符中;执行计划执行单元3202,用于在按照执行计划树执行时,如果外连接操作符中包括集函数,则生成外连接中的第一表对应的哈希表。
进一步的,上述预设条件可以包括:外连接操作的输出为分组操作的输入并且外连接操作和分组操作的键值相同。
本实施例提供的数据操作的优化装置可适用于上述任意实施例提供的数据操作的优化方法,具备相应的功能和有益效果。
实施例四
图4为本发明实施例四提供的一种设备的结构示意图。如图4所示,该设备包括处理器40、存储装置41和通信装置42;设备中处理器40的数量可以是一个或多个,图4中以一个处理器40为例;设备的处理器40、存储装置41和通信装置42可以通过总线或其他方式连接,图4中以通过总线连接为例。
存储装置41作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的数据操作的优化方法对应的模块(例如,用于数据操作的优化装置中的操作语句获取模块310、哈希表生成模块320、键值匹配模块330和输出确定模块340)。处理器40通过运行存储在存储装置41中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的数据操作的优化方法。
存储装置41可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储装置41可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置41可进一步包括相对于处理器40远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
通信装置42可用于实现网络连接或者移动数据连接。
本实施例提供的一种设备可用于执行上述任意实施例提供的数据操作的优化方法,具备相应的功能和有益效果。
实施例五
本发明实施例五还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时可实现上述任意实施例中的数据操作的优化方法。该方法具体可以包括:
获取用户输入的结构化查询语言SQL操作语句;
在SQL操作语句中包括外连接操作和分组操作,外连接操作和分组操作满足预设条件且分组操作对应的集函数为统计函数时,生成外连接中的第一表对应的哈希表,哈希表包括第一表中的第一表键值及对应的第一表键值的重复次数;
依次获取外连接中第二表对应的第二表键值,作为当前第二表键值,并将当前第二表键值与哈希表中的第一表键值进行匹配,在当前第二表键值与第一表键值匹配成功时,根据对应的第一表键值的重复次数以及历史匹配次数,确定第一表键值的当前匹配次数,直至第二表键值全部匹配完成;
根据SQL操作语句中的统计函数对应的统计标识、对应的第一表键值的重复次数以及当前匹配次数,确定分组操作的输出结果。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的数据操作的优化方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种数据操作的优化方法,其特征在于,包括:
获取用户输入的结构化查询语言SQL操作语句;
在所述SQL操作语句中包括外连接操作和分组操作,所述外连接操作和所述分组操作满足预设条件且所述分组操作对应的集函数为统计函数时,生成外连接中的第一表对应的哈希表,所述哈希表包括所述第一表中的第一表键值及对应的第一表键值的重复次数;
其中,所述预设条件包括:所述外连接操作的输出为所述分组操作的输入并且所述外连接操作和所述分组操作的键值相同;
依次获取所述外连接中第二表对应的第二表键值,作为当前第二表键值,并将所述当前第二表键值与所述哈希表中的第一表键值进行匹配,在所述当前第二表键值与所述第一表键值匹配成功时,根据对应的第一表键值的重复次数以及历史匹配次数,确定所述第一表键值的当前匹配次数,直至所述第二表键值全部匹配完成;
根据所述SQL操作语句中的统计函数对应的统计标识、所述对应的第一表键值的重复次数以及当前匹配次数,确定所述分组操作的输出结果。
2.根据权利要求1所述的方法,其特征在于,所述在所述当前第二表键值与所述第一表键值匹配成功时,根据对应的第一表键值的重复次数以及历史匹配次数,确定所述第一表键值的当前匹配次数,包括:
根据所述当前第二表键值及哈希函数确定所述哈希表中的存储位置;
在所述存储位置存储有第一表键值时,将所述当前第二表键值与所述第一表键值进行匹配,并在确定匹配成功时,获取所述哈希表中对应的第一表键值的重复次数;
依据所述对应的第一表键值的重复次数以及历史匹配次数,确定所述第一表键值的当前匹配次数。
3.根据权利要求1所述的方法,其特征在于,所述根据所述SQL操作语句中的统计函数对应的统计标识、所述对应的第一表键值的重复次数以及当前匹配次数,确定所述分组操作的输出结果,包括:
当所述统计标识为第一标识时,确定所述对应的第一表键值的当前匹配次数为所述对应的第一表键值的输出统计结果;
当所述统计标识为第二标识,且所述对应的第一表键值的当前匹配次数为第一预设次数时,确定所述对应的第一表键值的重复次数为所述对应的第一表键值的输出统计结果;
当所述统计标识为第二标识,且所述对应的第一表键值的当前匹配次数不是所述第一预设次数时,确定所述对应的第一表键值的当前匹配次数为所述对应的第一表键值的输出统计结果;
其中,所述第一标识表示对具有相同数据值的非空值的行个数进行统计,所述第二标识表示对具有相同数据值的总行数进行统计。
4.根据权利要求1所述的方法,其特征在于,所述生成外连接中的第一表对应的哈希表,包括:
在生成执行计划树时,生成外连接操作符,并将与所述分组操作对应的集函数移至所述外连接操作符中;
在按照执行计划树执行时,如果外连接操作符中包括集函数,则生成外连接中的第一表对应的哈希表。
5.一种数据操作的优化装置,其特征在于,包括:
操作语句获取模块,用于获取用户输入的SQL操作语句;
哈希表生成模块,用于在所述SQL操作语句中包括外连接操作和分组操作,所述外连接操作和所述分组操作满足预设条件且所述分组操作对应的集函数为统计函数时,生成外连接中的第一表对应的哈希表,所述哈希表包括所述第一表中的第一表键值及对应的第一表键值的重复次数;
其中,所述预设条件包括:所述外连接操作的输出为所述分组操作的输入并且所述外连接操作和所述分组操作的键值相同;
键值匹配模块,用于依次获取所述外连接中第二表对应的第二表键值,作为当前第二表键值,并将所述当前第二表键值与所述哈希表中的第一表键值进行匹配,在所述当前第二表键值与所述第一表键值匹配成功时,根据对应的第一表键值的重复次数以及历史匹配次数,确定所述第一表键值的当前匹配次数,直至所述第二表键值全部匹配完成;
输出确定模块,用于根据所述SQL操作语句中的统计函数对应的统计标识、所述对应的第一表键值的重复次数以及当前匹配次数,确定所述分组操作的输出结果。
6.根据权利要求5所述的装置,其特征在于,所述键值匹配模块包括:
位置确定单元,用于根据所述当前第二表键值及哈希函数确定所述哈希表中的存储位置;
重复次数获取单元,用于在所述存储位置存储有第一表键值时,将所述当前第二表键值与所述第一表键值进行匹配,并在确定匹配成功时,获取所述哈希表中对应的第一表键值的重复次数;
当前匹配确定单元,用于依据所述对应的第一表键值的重复次数以及历史匹配次数,确定所述第一表键值的当前匹配次数。
7.根据权利要求5所述的装置,其特征在于,所述输出确定模块包括:
第一结果确定单元,用于当所述统计标识为第一标识时,确定所述对应的第一表键值的当前匹配次数为所述对应的第一表键值的输出统计结果;
第二结果确定单元,用于当所述统计标识为第二标识,且所述对应的第一表键值的当前匹配次数为第一预设次数时,确定所述对应的第一表键值的重复次数为所述对应的第一表键值的输出统计结果;
第三结果确定单元,用于当所述统计标识为第二标识,且所述对应的第一表键值的当前匹配次数不是所述第一预设次数时,确定所述对应的第一表键值的当前匹配次数为所述对应的第一表键值的输出统计结果;
其中,所述第一标识表示对具有相同数据值的非空值的行个数进行统计,所述第二标识表示对具有相同数据值的总行数进行统计。
8.一种设备,其特征在于,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-4中任一所述的数据操作的优化方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-4中任一所述的数据操作的优化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810321734.8A CN108549688B (zh) | 2018-04-11 | 2018-04-11 | 一种数据操作的优化方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810321734.8A CN108549688B (zh) | 2018-04-11 | 2018-04-11 | 一种数据操作的优化方法、装置、设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108549688A CN108549688A (zh) | 2018-09-18 |
CN108549688B true CN108549688B (zh) | 2020-10-16 |
Family
ID=63514545
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810321734.8A Active CN108549688B (zh) | 2018-04-11 | 2018-04-11 | 一种数据操作的优化方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108549688B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110162487A (zh) * | 2019-04-15 | 2019-08-23 | 深圳壹账通智能科技有限公司 | 一种快速统计重复次数方法、装置及存储介质 |
CN110138789A (zh) * | 2019-05-20 | 2019-08-16 | 杭州安恒信息技术股份有限公司 | 一种基于哈希算法的防扫描方法及装置 |
CN111221827B (zh) * | 2020-01-15 | 2023-05-26 | 成都量子象云计算科技有限公司 | 基于图形处理器的数据库表连接方法、装置、计算机设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5713015A (en) * | 1996-05-30 | 1998-01-27 | International Business Machines Corporation | Reordering of complex SQL queries involving GROUPBYs, joins, outer joins and full outer joins |
US5991754A (en) * | 1998-12-28 | 1999-11-23 | Oracle Corporation | Rewriting a query in terms of a summary based on aggregate computability and canonical format, and when a dimension table is on the child side of an outer join |
CN103729392A (zh) * | 2012-10-10 | 2014-04-16 | 株式会社特博睿 | 查询优化方法及查询编译器 |
CN105760419A (zh) * | 2015-01-07 | 2016-07-13 | 国际商业机器公司 | 用于连接处理的方法和系统 |
CN106250519A (zh) * | 2016-08-04 | 2016-12-21 | 曙光信息产业(北京)有限公司 | 用于并行数据库的数据查询方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8868545B2 (en) * | 2011-12-29 | 2014-10-21 | Teradata Us, Inc. | Techniques for optimizing outer joins |
-
2018
- 2018-04-11 CN CN201810321734.8A patent/CN108549688B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5713015A (en) * | 1996-05-30 | 1998-01-27 | International Business Machines Corporation | Reordering of complex SQL queries involving GROUPBYs, joins, outer joins and full outer joins |
US5991754A (en) * | 1998-12-28 | 1999-11-23 | Oracle Corporation | Rewriting a query in terms of a summary based on aggregate computability and canonical format, and when a dimension table is on the child side of an outer join |
CN103729392A (zh) * | 2012-10-10 | 2014-04-16 | 株式会社特博睿 | 查询优化方法及查询编译器 |
CN105760419A (zh) * | 2015-01-07 | 2016-07-13 | 国际商业机器公司 | 用于连接处理的方法和系统 |
CN106250519A (zh) * | 2016-08-04 | 2016-12-21 | 曙光信息产业(北京)有限公司 | 用于并行数据库的数据查询方法和装置 |
Non-Patent Citations (1)
Title |
---|
基于共享内存的并行分组算法研究;赖俊斌;《中国优秀硕士学位论文全文数据库 信息科技辑》;20160115(第1期);第25-26页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108549688A (zh) | 2018-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110515973B (zh) | 一种数据查询的优化方法、装置、设备及存储介质 | |
CN108549688B (zh) | 一种数据操作的优化方法、装置、设备和存储介质 | |
CN109299101B (zh) | 数据检索方法、装置、服务器和存储介质 | |
CN110968593B (zh) | 数据库sql语句优化方法、装置、设备和存储介质 | |
WO2018036549A1 (zh) | 分布式数据库查询方法、装置及管理系统 | |
CN107102995B (zh) | 一种sql执行计划的确定方法及装置 | |
CN110471935B (zh) | 一种数据操作的执行方法、装置、设备和存储介质 | |
CN102915344A (zh) | 一种sql语句处理方法及装置 | |
CN112732752A (zh) | 一种查询语句优化方法、装置、设备和存储介质 | |
CN112100198A (zh) | 数据库sql语句优化方法、装置、设备及存储介质 | |
CN107562762B (zh) | 数据索引构建方法及装置 | |
CN110928900B (zh) | 多表数据的查询方法、装置、终端以及计算机存储介质 | |
CN111309753A (zh) | 结构化查询语句的优化方法、装置、设备及存储介质 | |
CN111046106A (zh) | 缓存数据同步方法、装置、设备及介质 | |
CN108959571B (zh) | Sql语句的运算方法、装置、终端设备及存储介质 | |
CN110704472A (zh) | 数据查询统计方法及装置 | |
CN112199390B (zh) | 一种数据库中数据查询方法、装置、设备及存储介质 | |
CN105302827A (zh) | 一种事件的搜索方法和设备 | |
CN107679107B (zh) | 一种基于图数据库的电网设备可达性查询方法及系统 | |
CN110990423B (zh) | Sql语句的执行方法、装置、设备和存储介质 | |
CN112416966B (zh) | 即席查询方法、装置、计算机设备和存储介质 | |
CN115114325A (zh) | 数据查询方法、装置、电子设备以及存储介质 | |
CN113076330B (zh) | 查询处理方法、装置、数据库系统、电子设备及存储介质 | |
CN113868138A (zh) | 测试数据的获取方法、系统、设备及存储介质 | |
CN114254005A (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 |