数据库查询方法及装置与流程

文档序号:25083191发布日期:2021-05-18 14:06阅读:81来源:国知局
数据库查询方法及装置与流程

1.本申请涉及数据库技术领域,尤其涉及数据库查询方法及装置。


背景技术:

2.随着信息技术的发展,产生的数据量越来越巨大,数据库中数据的查询需求也越来越复杂,这就需要针对数据库的查询进行优化,以提高查询效率。
3.当前,在关系型数据库中,每个对象都有自己的一张数据表,对象的所有属性都是这张数据表的列,表与表之间根据关联的列连接在一起,表连接就是两张数据表根据关联的列,组合成一个数据集合。表连接的方式有多种类型。例如:内连接,外连接,左连接,右连接,反连接,全连接等。如果查询语句涉及表连接,且连接条件(即两个数据表的关联的列的关系)涉及not in运算符,那么,在词法语法解析完成后,数据库管理系统会将此类查询的表连接方式转换为反连接(anti-join),该反连接的连接条件为t1.x=t2.x或者t1.x是空或者 t2.x是空值。其语义为,只要右表t2中存在满足该连接条件的记录存在,那么,左表t1中满足该连接条件的记录就会被删除,最终返回的是t1中不满足该连接条件的记录。
4.由于在关系型数据库中,空(null)值是一个特殊的存在,其特殊之处在于,null值与任何其它值的比较,返回结果均为不确定(unknown),例如,5=null,5!=null,null=null,null!=null,其返回结果均为unknown。因此,当连接条件中涉及的数据表列都没有非空约束(即允许数据表中存在空数据)时,数据库管理系统通常会使用嵌套循环连接(nested loop join) 或者合并连接(merge join)执行反连接查询语句的查询。嵌套循环连接对于外表(即上述右表t2)的每一条元组均需要遍历整个内表(即上述左表t1),这会造成反连接查询语句的查询开销大,且查询效率低。合并连接由于null值的存在,也会需要遍历整个内表,这会造成反连接查询语句的查询开销大,且查询效率低。


技术实现要素:

5.本申请的实施例提供数据库查询方法及装置,有助于降低查询开销,提高查询效率。
6.为达到上述目的,本申请的实施例采用如下技术方案:
7.第一方面,提供一种数据库查询方法,应用于计算机设备,该方法包括:获取反连接查询语句,反连接查询语句用于基于第一查询列组合和第二查询列组合查询第一数据表中的目标记录。第一查询列组合包括第一数据表中的多个列,第二查询列组合包括第二数据表中的多个列。目标记录所在的元组中的第一数据组合不属于第一集合。目标记录是元组的非空子集。第一数据组合是元组的非空子集。第一数据组合对应的列组合是第一查询列组合。其中,数据组合对应的列组合指数据组合所在的列的列名构成的组合。第一集合是第二数据表中的第二数据组合构成的集合,第二数据组合对应的列组合是第二查询列组合,第一查询列组合与第二查询列组合中对应列均不同时具有非空约束。获取目标哈希表;其中,目标哈希表包括多个哈希值,每个哈希值对应第一集合中的一个或多个第二数据组
合。目标哈希表的哈希键是第二查询列组合中的一个或多个列。计算第一数据表中第一记录所在的元组中的第一子数据组合的目标哈希值。其中,第一子数据组合对应的列组合是第一查询列组合中的一个或多个列构成的列组合,第一子数据组合对应的列组合对应于目标哈希表的哈希键。若目标哈希值对应的每个第二数据组合均与第一记录所在元组中的第一数据组合不同,则确定第一记录为目标记录。这样,当反连接查询语句中的第一查询列组合与第二查询列组合中对应列均不同时具有非空约束,使用本方法可以使用哈希连接进行查询,相比较于使用嵌套循环连接的方式,提高了数据查询的效率,降低了查询开销。
8.其中,第一查询列组合与第二查询列组合对应,是指第一查询列组合所包括的列的个数与第二查询列组合所包括的列的个数相同,第一查询列组合所包括的列顺序对应第二查询列组合中的列。具有对应关系的列的列名的含义相同或实质相同,在查询时,具有对应关系的列之间进行比对。
9.在一种可能的设计中,该计算机设备包括多个哈希表;该多个哈希表中的每个哈希表的哈希键是第二查询列组合中的一个或多个列构成的列组合,不同哈希表的哈希键不同。获取目标哈希表包括:从多个哈希表中选择目标哈希表。这样,针对第一数据表中不同的元组,由于空数据分布不同就可以选择不同的哈希表,从而有助于最大可能的概率使用哈希连接,而不是嵌套循环连接,从而进一步提高数据查询效率,降低数据查询开销。
10.在另一种可能的设计中,第一子数据组合是第一记录所在元组中的第一数据组合中的非空数据构成的数据组合。
11.在另一种可能的设计中,该方法还包括:根据该第二查询列组合的至少两个子列组合的代价,确定该至少两个子列组合中的一个子列组合为候选哈希键;若该候选哈希键包括一列,则基于该哈希键创建该目标哈希表。若该候选哈希键包括多列,则确定该多列的至少一个列组合为哈希键,并基于该哈希键创建至少一个哈希表,该至少一个哈希表包括目标哈希表。其中,子列组合的代价为选择该子列组合为哈希键执行反连接查询语句的查询开销。
12.在另一种可能的设计中,确定多列的至少一个列组合为哈希键,基于该哈希键创建至少一个哈希表,包括:确定该至少一个列组合中代价最小的列组合为哈希键,创建至少一个哈希表。这样,确定代价最小的列组合为哈希键创建哈希表,使得创建的哈希表在多种查询情况下能够选择当前查询效率高的哈希表进行哈希连接,从而提高了查询效率,降低了查询开销。
13.在另一种可能的设计中,根据该第二查询列组合的至少两个子列组合的代价,确定该至少两个子列组合中的一个子列组合为候选哈希键,包括:若该第二数据表的大小超出该计算机设备的内存大小,则确定该第二查询列组合中代价最小的一列为候选哈希键。若该第二数据表的大小没有超出该计算机设备的内存大小,则计算该第二查询列组合包含的多个子列组合的代价,确定该多个子列组合中代价最小的子列组合为候选哈希键。这样,有助于进一步降低查询开销,提高查询效率。
14.在另一种可能的设计中,目标哈希表还包括多个哈希桶,一个哈希桶包括一个或多个该第二数据组合,该一个或多个第二数据组合中对应该目标哈希表的哈希键的子数据组合的哈希值相同;哈希桶与哈希值一一对应。若该目标哈希值对应的每个该第二数据组合均与该第一记录所在元组中的该第一数据组合不同,则确定第一记录为目标记录,包括:
若该目标哈希值对应的目标哈希桶中不包含该第一记录所在元组中的该第一数据组合,则确定该第一记录为该目标记录。这样,在进行数据查询时,计算机设备只用遍历目标哈希桶中的数据组合,不用遍历第二数据表,从而降低了查询开销,提高了查询效率。
15.在另一种可能的设计中,若该目标哈希桶中不包含该第一记录所在元组中的该第一数据组合,则确定该第一记录为目标记录,包括:若在第二集合中,没有查找到该第一子数据组合,则确定第一记录为目标记录。第二集合是第一集合中子数据组合构成的集合;第二集合的列组合是该目标哈希表的哈希键。或者,若在该第二集合中,查找到该第一子数据组合,则当第二子数据组合与目标数据组合中除第一子数据组合之外的子数据组合不同时,确定第一记录为目标记录。其中,第二子数据组合对应的列组合是第二查询列组合中除第一子数据组合对应的列组合之外的列构成的列组合。第二子数据组合是所查找到的第一子数据组合所在的第二数据组合的子数据组合;目标数据组合是第一记录所在元组中的第一数据组合。这样,计算机设备只用查询第二数据表中的部分数据组合就可以确认第一数据表中的记录是否为目标记录,而不用遍历整个第二数据表,从而降低了查询开销,提高了查询效率。
16.第二方面,提供了一种数据库查询装置,该装置可用于执行上述第一方面的任一种可能的设计提供的任一种方法。该装置可以是计算机设备或计算机设备中的芯片。
17.在一种可能的设计中,可以根据上述第一方面或第一方面的任一种可能的设计提供的任一种方法,对该计算机设备进行功能单元的划分。例如,可以对应各个功能划分各个功能单元(如获取单元、确定单元、计算单元和创建单元),也可以将两个或两个以上的功能集成在一个处理单元中。
18.在另一种可能的设计中,该装置包括存储器和处理器,存储器用于用于存储计算机指令,该装置运行时,该处理器执行存储器中的计算机指令以利用该装置中的硬件资源执行第一方面或第一方面任一种可能的设计所提供的方法的操作步骤。
19.第三方面,提供了一种计算机可读存储介质,如计算机非瞬态的可读存储介质。其上储存有计算机程序(或指令),当该计算机程序(或指令)在计算机上运行时,使得该计算机执行上述第一方面或第一方面的任一种可能的设计提供的任一种方法。
20.第四方面,提供了一种计算机程序产品,当其在计算机上运行时,使得第一方面或第一方面的任一种可能的设计提供的任一种方法被执行。
21.可以理解的是,上述提供的任一种计算机设备、计算机存储介质或计算机程序产品等均可以应用于上文所提供的对应的方法,因此,其所能达到的有益效果可参考对应的方法中的有益效果,此处不再赘述。
附图说明
22.图1为本申请实施例提供的一种元组,数据组合以及记录的关系示意图;
23.图2为可适用于本申请实施例的一种数据库管理系统的结构示意图;
24.图3为可适用于本申请实施例的计算机设备的结构示意图;
25.图4为本申请实施例提供的一种数据库查询方法的流程示意图;
26.图5为本申请实施例提供的一种基于子列组合创建的哈希表的关系示意图;
27.图6为本申请实施例提供的一种哈希表、哈希桶与第二数据表的元组的关系示意
图;
28.图7为本申请实施例提供的一种第一数据表的元组与目标哈希表的关系示意图;
29.图8为本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
30.为便于更好的理解本申请实施例的技术方案,首先对其中的一些术语进行简单介绍。
31.1)、数据表、列、列名、列对应的数据、元组、记录、数据组合
32.一种数据表如表1所示:
33.表1
[0034][0035][0036]
数据表中包含列,例如表1中包含5个列。每个列具有一个列名,例如表1中各列的列名分别为“学号、姓名、性别、地址和联系方式”。一个列的非列名所在的单元格中的信息被称作是该列对应的数据,其中,一个单元格中的内容被称为一个数据。一个数据可以是空或非空数据。列名通常在数据表的第一行。例如,表1中列名“姓名”列对应的数据是“张一、王二、李三”,列名“地址”对应的数据是“陕西省西安市、广东省深圳市、广东省深圳市”。
[0037]
数据表中除列名所在行之外的一行称为一个元组。记录是一个元组的非空子集,一条记录的列组合可以由查询语句确定。数据组合是一个元组的非空子集,一个数据组合对应的列组合是该数据组合所在的列的列名构成的组合。一个数据组合对应的列组合可以由查询语句确定。一个元组所包括的记录的列组合和数据组合对应的列组合可以相同或不同。假设,查询语句中需要输出表1中学号小于4且姓名为张一的人的学号,姓名,性别以及地址,那么,“学号,姓名,性别,地址”为记录的列组合,“学号,姓名”为数据组合对应的列组合。如图1 所示,为元组、记录和数据组合之间的对应关系的示意图。图1是基于表1为例进行说明的。其中,“1,张一,女,陕西省西安市,012345678900”为一个元组,“1,张一”为一个数据组合,“1,张一,女,陕西省西安市”为一条记录。
[0038]
2)、非空约束
[0039]
非空约束指强制使列不能为空(null)数据的约束,即约束强制列对应的单元格始终包含数据。这意味着,如果不向列对应的单元格添加数据,就无法插入新元组或者更新已有元组。例如,表1中的联系方式列没有非空约束,那么联系方式列就可以留空,不写入任何数据。
[0040]
3)、哈希表、哈希键、哈希值、哈希函数、哈希桶
[0041]
哈希表,又称散列表,是根据映射函数代入哈希键的值计算得到的哈希值进行访问的数据结构。也就是说,它通过把哈希值映射到一个位置来访问数据表中的元组,以加快查找的速度。这个映射函数叫做哈希函数。示例性的,给定数据表1,存在函数f(key),对任
意给定的哈希键的值,代入函数后若能得到包含该哈希键的元组在数据表1中的位置,则称数据表 1为哈希(hash)表,函数f(key)为哈希(hash)函数。
[0042]
选用哈希函数计算哈希值时,可能不同的哈希键的值会得到相同的哈希值(即出现哈希冲突)。可选择哈希桶来处理哈希冲突,每个哈希值对应一个哈希桶,作为一个示例,哈希表以及哈希桶定义好之后,哈希桶的个数固定不变。哈希桶中存放具有该哈希值的哈希键的元组。基于一个哈希表,同一个元组只能属于一个哈希桶,不同的哈希桶对应不同的哈希值,一个哈希桶可以包括一个或多个元组,部分哈希桶可以为空。
[0043]
4)、列组合、列组合的子列组合
[0044]
列组合包括一个或多个列,列组合构成的集合的所有非空子集中的每一个子集为该列组合的一个子列组合。一个子列组合包括一个或多个列。
[0045]
例如:列组合为(a2,b2,c2,d2),该列组合的子列组合包括:(a2),(b2),(c2), (d2),(a2,b2),(a2,c2),(a2,d2),(b2,c2),(b2,d2),(c2,d2),(a2,b2,c2), (a2,b2,d2),(a2,c2,d2),(b2,c2,d2),(a2,b2,c2,d2)。
[0046]
5)、元组的哈希值
[0047]
元组的哈希值,指将该元组中与哈希键的列对应的列对应的数据代入哈希函数计算得到的哈希值。
[0048]
6)、其他术语
[0049]
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
[0050]
在本申请实施例中,“至少一个”是指一个或多个。“多个”是指两个或两个以上。
[0051]
在本申请实施例中,“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0052]
在本申请实施例中,组合包括一个或多个对象。
[0053]
图2为本申请提供的技术方案所适用的一种数据库管理系统的结构示意图,该数据库管理系统包括:数据库客户端/中间件10、数据库管理系统20和一个或多个数据库30。
[0054]
数据库客户端,支持数据库的结构化查询语言(structured query language,sql)标准,是可连接数据库,提供对数据库执行调试/操作的应用程序。
[0055]
中间件是数据库的中间件,支持数据库的结构化查询语言(structured query language,sql) 标准,支持数据的集群操作,实现读数据写数据可以使用不同的数据库以及不同的数据表。业界常用的数据库中间件如:cobar,mycat,oneproxy,vitess,kingshard,atlas等。
[0056]
数据库管理系统20是为适应数据处理的需要而发展起来的一种软件,提供数据定义语言和数据操作语言。数据定义语言允许根据用户输入的指令定义数据库的三级模式结构、两级映像、完整性约束、非空约束和保密限制等。数据操作语言允许根据用户输入的指令实现对数据的插入、删除、更新和查询等操作。
[0057]
在一个实施例中,如图2所示,数据库管理系统20可以包括解析器201、优化器202、
执行器203和数据存储引擎204。
[0058]
解析器201又称为查询分析器,用于接收数据库客户端/中间件10发送的一个或多个查询命令,对该查询命令进行语法分析,并且构建查询树。优化器202用于在查询命令通过解析之后,对它进行性能评估,并且根据影响查询性能的各种不同因素来寻找最佳的访问数据表的方式,根据该最佳的访问数据表的方式生成执行计划,并输出执行计划。执行器203用于执行数据库支持的内部代码实现查询命令对数据存储引擎204中以特定结构存储的数据的查询。数据存储引擎204用于以特定的结构存储数据。
[0059]
数据库管理系统20可以与数据库客户端/中间件10相连接。
[0060]
具体实现时,上述数据库客户端/中间件10、数据库管理系统20和一个或多个数据库30 中的每个均可以位于独立的计算机设备中,或者数据库客户端/中间件10、数据库管理系统 20和一个或多个数据库30中的至少两个可以集成在同一计算机设备中。其中,计算机设备可以是终端设备、虚拟机、服务器或云端服务器中的至少一个。本申请中的数据库管理系统可以是单机数据库管理系统或分布式数据库管理系统。本申请对此不做限定。
[0061]
下文中均以数据库客户端/中间件10、数据库管理系统20以及数据库30存储在同一计算机设备中为例进行说明。
[0062]
图3为本申请提供的技术方案所适用的一种计算机设备的结构示意图。图3所示的计算机设备10可以包括至少一个处理器101,通信线路102,存储器103以及至少一个通信接口 104。
[0063]
处理器101可以是一个通用中央处理器(central processing unit,cpu),微处理器,特定应用集成电路(application-specific integrated circuit,asic),或一个或多个用于控制本申请方案程序执行的集成电路。
[0064]
通信线路102可包括至少一条通路,比如数据总线,和/或控制总线,用于在上述组件(如至少一个处理器101,通信线路102,存储器103以及至少一个通信接口104)之间传送信息。
[0065]
通信接口104,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如广域网(wide area network,wan),局域网(local area networks,lan)等。
[0066]
存储器103,可以是只读存储器(read-only memory,rom)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,ram)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,eeprom)、只读光盘(compact disc read-only memory, cd-rom)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器103可以是独立存在,通过通信线路102与处理器101相连接。存储器103也可以和处理器101集成在一起。本申请实施例提供的存储器103通常包括非易失性存储器。其中,存储器103用于存储执行本申请方案的计算机指令,并由处理器101来控制执行。处理器101用于执行存储器103中存储的计算机指令,从而实现本申请下述实施例提供的方法。
[0067]
存储器103包括内存和硬盘。
[0068]
可选的,本申请实施例中的计算机指令也可以称之为应用程序代码,本申请实施
例对此不作具体限定。
[0069]
在具体实现中,作为一种实施例,计算机设备10可以包括多个处理器,这些处理器中的每一个可以是一个单核(single-cpu)处理器,也可以是一个多核(multi-cpu)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
[0070]
在具体实现中,作为一种实施例,计算机设备10还可以包括输出设备105和/或输入设备106。输出设备105和处理器101通信,可以以多种方式来显示信息。例如,输出设备105 可以是液晶显示器(liquid crystal display,lcd),发光二极管(light emitting diode,led) 显示设备,阴极射线管(cathode ray tube,crt)显示设备,或投影仪(projector)等。输入设备106和处理器101通信,可以以多种方式接收用户的输入。例如,输入设备106可以是鼠标、键盘、触摸屏设备或传感设备等。
[0071]
在一个示例中,结合图2,处理器101可以用于执行存储器中的程序,以实现数据库管理系统20的功能,具体的,可以用于实现解析器201、优化器202、执行器203和数据存储引擎204的功能。
[0072]
在数据库管理系统执行查询语句时,示例性的,查询语句为反连接(anti-join)查询语句: select*from t1(anti join)(select t2.a,t2.b from t2)t2 on(t1.a=t2.a or t1.a is null or t2.a is null)and(t1.b=t2.b or t1.b is null or t2.b is null);对于该反连接查询语句的处理过程如下:
[0073]
如图2所示的数据库管理系统获取到的反连接查询语句的连接条件为t1.a1=t2.a2或者 t1.a1是空(null)值或者t2.a2是空(null)值。其语义为,只要右表(也称作内表)t2中存在满足该连接条件的元组存在,左表(也称作外表)t1中满足该连接条件的元组就会被删除,最终返回的是t1中不满足该连接条件的记录。
[0074]
针对该反连接查询语句,数据库管理系统通常需要进行如下的运算来获取不满足连接条件的记录。t1.a1,t2.a2没有非空约束,t1.a1列对应的数据有两种情况,为空或者不为空,t2.a2 列对应的数据也有两种情况,为空或者不为空,t1.a1=t2.a2的运算结果会有三种情况:真 (true)、假(false)或者不确定(unknown)。具体的以t1.a1=t2.a2为例,该运算可以拆解为表2:
[0075]
表2
[0076][0077]
由表2可以得到,t1.a1=t 2.a2且t1.b1=t 2.b2运算的结果如下表3所示:
[0078]
表3
[0079][0080]
由于上述运算结果包含了多种情况,当前优化器选择使用嵌套循环连接或者合并连接在内表中逐条访问内表的所有元组进行与外表中元组的连接条件的匹配,因此,会造成查询开销大,且查询效率低。
[0081]
基于此,本申请提供了一种数据库查询方法,在t1.a1,t2.a2没有非空约束时,数据库管理系统可以通过哈希连接,只访问内表中与外表元组的哈希值相同的元组进行匹配。从而减少查询开销,提高查询效率。
[0082]
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
[0083]
如图4所示,为本申请实施例提供的一种数据库查询方法的流程示意图。示例性的,本实施例可以应用于图2、图3所示的系统架构。本实施例的执行主体可以为计算机设备,具体可以是计算机设备中的数据库管理系统。图4所示的方法可以包括以下步骤:
[0084]
s101:计算机设备获取反连接查询语句。该反连接查询语句用于基于第一查询列组合和第二查询列组合查询第一数据表中的目标记录;第一查询列组合包括第一数据表中的多个列,第二查询列组合包括第二数据表中的多个列。任何一个目标记录所在的元组中的第一数据组合不属于(not in)第一集合;目标记录是第一数据表中元组的非空子集;第一数据组合是第一数据表中元组的非空子集;第一数据组合对应的列组合是第一查询列组合;第一集合是第二数据表中的第二数据组合构成的集合,第二数据组合对应的列组合是第二查询列组合,第一查询列组合对应于第二查询列组合。
[0085]
其中,反连接查询语句包括以下信息:第一数据表的标识信息、第二数据表的标识信息、第一查询列组合、第二查询列组合、目标记录的列组合。
[0086]
第一数据表可以称作左表或外表;第二数据表可以称作右表或内表。
[0087]
第一查询列组合是第一数据表中用于进行比对的数据的列组合。第一数据组合为第一数据表中的第一查询列对应的位于同一行的数据组成的数据组合。
[0088]
第二查询列组合是第二数据表中用于进行比对的数据的列组合。第二数据组合为第二数据表中的第二查询列对应的位于同一行的数据组成的数据组合。
[0089]
第一查询列组合与第二查询列组合关联(对应),是指第一查询列组合所包括的列的个数与第二查询列组合所包括的列的个数相同,第一查询列组合所包括的列顺序对应第二查询列组合中的列。具有关联(对应)关系的列的列名的含义相同或实质相同,在查询时,具有关联(对应)关系的列之间进行比对。具体示例可以参考下文。
[0090]
目标记录是基于反连接查询语句所指示的目标记录的列组合确定的。
[0091]
可选的,计算机设备安装的数据库客户端或者中间件接收用户输入的反连接查询
语句,并将该反连接查询语句发送给数据库管理系统。或者,计算机设备安装的数据库客户端或者中间件接收用户输入的多列not in查询语句,并将该多列not in查询语句发送给数据库管理系统;数据库管理系统将该多列not in查询语句转换为反连接查询语句。
[0092]
在一个例子中,多列not in查询语句可以为:select t1.a1,t1.b1,t1.c1,t1.d1,t1.e1 from t1 where(t1.a1,t1.b1,t1.c1,t1.d1)not in(select t2.a2,t2.b2,t2.c2,t2.d2 from t2)。该多列 not in查询语句转换后得到的反连接查询语句可以为:select t1.a1,t1.b1,t1.c1,t1.d1,t1.e1 from t1(anti join)(select t2.a2,t2.b2,t2.c2,t2.d2 from t2)t2 on(t1.a1=t2.a2 or t1.a1 is null or t2.a2 is null)and(t1.b1=t2.b2 or t1.b1 is null or t2.b2 is null)and(t1.c1=t2.c2 or t1.c1 is null or t2.c2 is null)and(t1.d1=t2.d2 or t1.d1 is null or t2.d2 is null)。其中,第一数据表的标识信息为t1,第二数据表的标识信息为t2,“t1.a1,t1.b1,t1.c1,t1.d1,t1.e1”为目标记录的列组合,“t1.a1,t1.b1,t1.c1,t1.d1”为第一查询列组合,“t2.a2,t2.b2,t2.c2,t2.d2”为第二查询列组合。该not in语句和反连接查询语句的语义均为:若第一数据表t1中的第一数据组合(即第一数据表t1中位于同一行的“a1、b1、c1、d1”列的数据所组成的数据组合),不属于第一集合(即第二数据表t2中位于同一行的“a2、b2、c2、d2”列的数据所组成的第二数据组合构成的集合),则将该第一数据组合所在的元组中的记录(即位于该行的“a1、b1、c1、d1、 e1”列的数据构成的记录)作为目标记录。
[0093]
其中,第一数据表t1的第一查询列组合中a1,b1,c1,d1列与第二数据表t2的第二查询列组合中a2,b2,c2,d2列顺序对应。也就是说,在第一数据表t1中的第一数据组合与第二数据表t2中的第二数据组合进行匹配时,t1中a1列对应的数据与t2中a2列对应的数据进行比对, t1中b1列对应的数据与t2中b2列对应的数据进行比对,t1中c1列对应的数据与t2中c2列对应的数据进行比对,t1中d1列对应的数据与t2中d2列对应的数据进行比对。a1列的列名与a2列名相同或实质相同,比如a1列的列名与a2列名均为“姓名”,或者,分别为“姓名”和“名称”。
[0094]
假设第一数据表t1如表4所示,第二数据表t2如表5所示,那么,基于上述示例,第一数据组合为:表4中的数据组合{1,2,null,3}、数据组合{3,4,5,6}和数据组合{4,6,7,null}。第一集合为:表5中的数据组合{7,9,10,10}、数据组合{1,2,null,3}和数据组合{7,6, 10,null}构成的集合。第二数据组合为第一集合中的任意一个数据组合。
[0095]
表4
[0096]
a1b1c1d1e 1f 1g112null349734567108467nullnull107
[0097]
数据库中存储的第二数据表如下表5所示:
[0098]
表5
[0099]
a2b2c2d2e2f27910104912null37107610nullnull10
[0100]
s102:当计算机设备确定第一查询列组合与第二查询列组合中对应列均不同时具有非空约束时,选取第二查询列组合作为第一候选哈希键。
[0101]
作为示例,一个数据表中的每个列是否具有非空约束,可以是预定义的。
[0102]
基于s101中的示例,计算机设备选取第二数据表t2中的a2,b2,c2,d2列作为第一候选哈希键。
[0103]
需要说明的是,当计算机设备确定第一查询列组合与第二查询列组合的对应列中存在同时具有非空约束的列时,计算机设备将反连接查询语句转换为等值条件下的反连接查询语句。基于s101中的示例,假设t1.a1列,t1.b1列与t2.a2列,t2.b2列均具有非空约束,则将上述反连接查询语句转换为如下的反连接查询语句:select t1.a1,t1.b1,t1.c1,t1.d1, t1.e1 from t1(anti join)(select t2.a2,t2.b2,t2.c2,t2.d2 from t2)t2 on t1.a1=t2.a2 and t1.b1=t2.b2 and(t1.c1=t2.c2 or t1.c1 is null or t2.c2 is null)and(t1.d1=t2.d2 or t1.d1 is null or t2.d2 is null)。后续,计算机设备可以根据等值条件下的反连接查询语句利用哈希连接进行查询。具体参考现有技术,此处不再赘述。
[0104]
s103:计算机设备判断第二数据表的大小是否超出了该计算机设备的内存大小。
[0105]
若第二数据表的大小超出该计算机设备的内存大小,则执行s104。
[0106]
若第二数据表的大小没有超出该计算机设备的内存大小,则执行s105。
[0107]
s104:计算机设备选择第一候选哈希键中代价最小的一列作为第二候选哈希键。执行s104之后,执行s106。
[0108]
具体的,计算机设备获取第一候选哈希键的各个列的代价大小,并选取其中代价最小的一列作为第二候选哈希键。其中,列的代价为选择该列作为哈希键执行反连接查询语句的查询开销。列的代价大小为选择该列作为哈希键时获取哈希连接的代价与创建哈希表的代价之和。
[0109]
由于第二数据表的大小超出该计算机设备的内存大小,因此,计算机设备不能将第二数据表中的数据缓存进内存中,这时候选择代价最小的一列作为第二候选哈希键,后续计算机设备根据该第二候选哈希键在内存中创建哈希表,在执行查询时,对于第一数据表中与哈希键对应的列不是空数据的元组,计算机设备将与该元组的哈希值相同的第二数据表中的元组缓存进内存中,对于第一数据表中与哈希键对应的列为空数据的元组,计算机设备分次缓存第二数据表中的所有元组,将内存中第二数据表的元组中的第二数据组合与第一数据表中的第一数据组合进行匹配。若匹配成功,释放内存中的第二数据表的元组,执行第一数据表中下一条元组与第二数据表的匹配。若匹配不成功,释放内存中第二数据表中的元组,重新缓存第二数据表中的剩余元组,并执行与第一数据表中的第一数据组合的匹配。这样相比与嵌套循环连接中需要遍历第二数据表中的每一条元组,仍然能够减少查询开销,提高查询效率。
[0110]
示例的,计算机设备可以通过如下步骤获取一个子列组合的代价:
[0111]
第一,获取哈希连接的代价。
[0112]
作为示例,计算机设备可以通过如下公式获取哈希连接的代价cost
hashjoin
[0113]
[0114]
其中,m为第一数据表的总行数,n为第二数据表的总行数,x为该子列组合在第一数据表中的空值比例,0≤x≤1。其中,一个列的空值比例为该列在数据表中的各个单元格为空数据的个数与该列在该数据表中所占总的单元格数量的比值,本申请对子列组合的空值比例的计算方式不进行限定,例如:一个子列组合的空值比例为该子列组合中的各个列的空值比例的乘积。或者,一个子列组合的空值比例为该子列组合中的各个列的空值比例中最大的空值比例。或者,一个子列组合的空值比例为其他预定义的计算方式。 number
bucket
为哈希桶的个数,哈希桶定义好之后,哈希桶的个数固定,p为该子列组合的倾斜率(multiple),0≤p≤1,p为一个预设值。其中,一个列的倾斜率由该列在数据表中数据的分布确定,为该列中占比例最大的数据的比例。例如,一个列中总共有5行数据, 4个数据相同,那么该列的倾斜率为80%。本申请对倾斜率的计算方式不进行限定,示例性的,一个子列组合的倾斜率为该子列组合中的各个列的倾斜率的乘积。或者,一个子列组合的倾斜率为该子列组合中的各个列的倾斜率中最大的倾斜率。或者,一个子列组合的倾斜率为其他预定义的计算方式。n为该子列组合中列的个数。
[0115]
第二,获取创建哈希表的代价。其中,创建哈希表的代价可以为分配内存的代价与计算哈希值的代价之和。
[0116]
作为示例,分配内存的代价cost
memory
为一个预设值,参考分配内存消耗的时间设定。
[0117]
作为示例,计算机设备可以通过如下公式获取计算哈希值的代价cost
hashvalue
:
[0118]
cost
hashvalue
=cost
onevalue
·2n
;其中,cost
onevalue
为一个预设值,为通过哈希函数计算哈希值的代价,与该哈希函数的算法复杂度有关。
[0119]
由上可得,子列组合的代价为:cost
total
=cost
hashjoin
+cost
hashvalue
+cost
memory

[0120]
基于s102中的示例,第一候选哈希键为(a2,b2,c2,d2)。第一候选哈希键的列组合的部分子列组合的p的值以及x的值如下表6所示:
[0121]
表6
[0122] pxa210-8
10-2
b29*10-1
5*10-4
c210-1
10-4
d210-1
5*10-7
………
(a2,c2,d2)10-10
5*10-13
(a2,b2,c2,d2)9*10-11
2.5*10-16
[0123]
表6中,a2至d2单列的p的值以及x的值为预设值,(a2,c2,d2)、(a2,b2,c2,d2)等多列组合而成的子列组合的p的值以及x的值可以由单列的x的值以及p的值计算得出。以子列组合的倾斜率为该子列组合中的各个列的倾斜率的乘积为例,如:(a2,c2,d2)的p的值为 10-8
×
10-1
×
10-1
=10-10
。以子列组合的空值比例为该子列组合中的各个列的空值比例的乘积为例,x的值也可以通过同样的方法计算得出10-2
×
10-4
×
5*10-7
=5*10-13

[0124]
基于表6的示例,将p的值以及x的值代入上述计算子列组合的代价的公式,可得到每个子列组合的代价的大小。若a2列的代价最小,则选取子列组合(a2)作为第二候选哈希
键。
[0125]
s105:计算机设备计算第一候选哈希键的列组合包含的多个子列组合的代价,选择多个子列组合中代价最小的子列组合作为第二候选哈希键。
[0126]
由于第二数据表的大小没有超出该计算机设备的内存大小,因此,计算机设备可以将第二数据表中的数据缓存进内存中,这时候选择代价最小的子列组合作为第二候选哈希键,后续计算机设备根据该第二候选哈希键在内存中创建多个哈希表,在执行查询时,可以根据第一数据表中每个元组空值分布选择哈希表,从而减少查询开销,提高查询效率。
[0127]
基于s102中的示例第一候选哈希键为(a2,b2,c2,d2),该第一候选哈希键的子列组合包括:(a2),(b2),(c2),(d2),(a2,b2),(a2,c2),(a2,d2), (b2,c2),(b2,d2),(c2,d2),(a2,b2,c2),(a2,b2,d2),(a2,c2, d2),(b2,c2,d2),(a2,b2,c2,d2)。
[0128]
子列组合的代价计算具体可以参考s104中的示例。
[0129]
在一个示例中,哈希桶的个数为103,将(a2,c2,d2)的x值与p值带入哈希连接的代价计算公式得到:
[0130]
cost
hashjoin
=m*n*(x+(1-x)*p*23*10-3
)
[0131]
=m*n*(5*10-13
+(1

5*10-13
)*10-10
*23*10-3
)
[0132]
=m*n*(1.3*10-12
+o(10-13
))
[0133]
获取计算哈希值的代价:
[0134]
cost
hashvalue
=cost
onevalue
*23[0135]
子列组合的代价为cost
total
=m*n*(1.3*10-12
+o(10-13
))+ cost
onevalue
*23+cost
memory
[0136]
将(a2,b2,c2,d2)的x值与p值带入哈希连接的代价计算公式得到:
[0137]
cost
hashjoin
=m*n*(x+(1-x)*p*23*10-3
)
[0138]
=m*n*(2.5*10-16
+(1

2.5*10-16
)*9*10-11
*24*10-3
)
[0139]
=m*n*(1.44*10-12
+o(10-13
))
[0140]
获取计算哈希值的代价:
[0141]
cost
hashvalue
=cost
onevalue
*24[0142]
子列组合的代价为cost
total
=m*n*(1.44*10-12
+o(10-13
))+ cost
onevalue
*24+cost
memory
[0143]
基于此,计算完所有子列组合的代价之后,若(a2,c2,d2)的代价最小,则选取(a2,c2, d2)作为第二候选哈希键。
[0144]
s106:计算机设备根据第二候选哈希键创建至少一个哈希表。
[0145]
具体的,计算机设备获取第二候选哈希键包括的列的子列组合,其中,子列组合为第二候选哈希键的列名构成的集合的非空子集的列的组合。子列组合中至少包括一个列。将子列组合作为哈希键创建至少一个哈希表。
[0146]
可选的,一个哈希表包括多个哈希桶,每个哈希桶对应一个哈希值,每个哈希桶内的元组的哈希键具有同一哈希值,且该哈希值是该哈希桶对应的哈希值。
[0147]
基于s104中的示例,第二候选哈希键为(a2),以(a2)作为哈希键创建一个哈希表。
[0148]
基于s105中的示例,第二候选哈希键为(a2,c2,d2),基于表5所示的第二数据表,该候选哈希键包括的列的子列组合有(a2),(c2),(d2),(a2,c2),(a2,d2),(c2,d2), (a2,
c2,d2)共7个列组合。计算机设备可以将该7个子列组合作为哈希键,分别创建哈希表。创建的哈希表与各个子列组合的对应关系如图5所示。在图5中,哈希表1表示以(a2) 作为哈希键创建的哈希表,哈希表2表示以(c2)作为哈希键创建的哈希表,哈希表3表示以 (d2)作为哈希键创建的哈希表,哈希表4表示以(a2,c2)作为哈希键创建的哈希表,哈希表5表示以(a2,d2)作为哈希键创建的哈希表,哈希表6表示以(c2,d2)作为哈希键创建的哈希表,哈希表7表示以(a2,c2,d2)作为哈希键创建的哈希表。
[0149]
以下以一个子列组合作为哈希键创建哈希表为例说明创建的哈希表,哈希值与哈希桶以及元组的对应关系,如图6所示,以(a2,d2)作为哈希键创建哈希表5,使用的哈希函数为哈希键中列对应的数据之和除以3,得到的余数为哈希值,在计算哈希值时,若哈希键对应的数据为null,则取该列的数据为0。哈希表4的哈希键为(a2,d2),计算机设备分别计算第二数据表中的每个元组中哈希键的哈希值。例如,对于第二数据表中的元组 (1,2,null,3,7,10)来说,哈希键对应的数据分别为:1,3。由于(1+3)
÷
3得到的余数为1,因此,该元组中哈希键的哈希值为1。计算第二数据表中的另外两个元组的哈希值的过程与此类似,不再赘述。元组(7,9,10,10,4,9)中哈希键对应的数据7,10的哈希值为2。对于元组(7,6,10,null,null,10)来说,哈希键对应的数据为7,null;由于d2列对应的数据为null,因此取该列数据为0,由此计算得到该元组哈希键的哈希值为2。计算机设备按照哈希值与哈希桶之间的对应关系,将该哈希值对应的哈希键所在的元组存放进该哈希值对应的哈希桶,具体的:1号哈希桶中存放哈希值为1的第二数据表中的元组。 2号哈希桶中存放哈希值为2的第二数据表中的元组。
[0150]
需要说明的是,本实施例中,是以哈希桶中包括第二数据表的元组来说明的,具体在实现时,哈希桶中只需要包括第二查询列组合的数据。
[0151]
需要说明的是,上述s102-s106为可选的步骤,若在之前查询过程中已经创建了哈希表,则在本次查询过程中可以直接使用预先创建好的哈希表,不需要再重新执行 s102-s106创建哈希表。
[0152]
s107:计算机设备获取第一元组中的第一子数据组合。其中,第一元组是第一数据表中的任意一个元组。第一子数据组合对应的列组合包含于第一数据组合对应的列组合 (即第一子数据组合对应的列组合是第一数据组合对应的列组合的非空子集),第一子数据组合对应的列组合对应于目标哈希表的哈希键。
[0153]
具体的,若计算机设备中只有一个哈希表(即s105中创建了一个哈希表或者s106中只创建了一个哈希表),则选择第一数据组合中该哈希表的哈希键对应的数据作为第一子数据组合。
[0154]
若计算机设备中有多个哈希表(即s106中创建了多个哈希表),则根据第一数据组合的空值分布,得到第一子数据组合。具体的,选择第一数据组合中非空的列对应的数据作为第一子数据组合。
[0155]
基于表4的示例,第二查询列组合为(a2,b2,c2,d2),与之对应的第一查询列组合为 (a1,b1,c1,d1),以第一数据表中的元组(1,2,null,3,4,9,7)为例,第一数据组合为“1,2, null,3”,由于s105中确定的第二候选哈希键为(a2,c2,d2),与之对应的第一数据表中的列为(a1,c1,d1),由于c1的数据为null,因此,第一子数据组合对应的列组合为(a1,d1),第一子数据组合为(1,3)。
[0156]
s108:计算机设备从所创建的至少一个哈希表中获取目标哈希表。
[0157]
具体的,若计算机设备中只有一个哈希表,则计算机设备获取该哈希表作为目标哈希表;若计算机设备中有多个哈希表,则计算机设备根据第一子数据组合对应的列组合选择目标哈希表。
[0158]
基于s106中创建的哈希表与s107中的第一数据组合的示例,第一子数据组合对应的列组合为(a1,d1),选择的哈希表为以(a2,d2)为哈希键创建的哈希表5。
[0159]
基于图5所示的例子,第一数据表中的每个元组选择的目标哈希表如图7所示:元组(1,2,null,3,4,9,7)中c1列对应的数据为null,选择(a2,d2)为哈希键的哈希表5。同样的,针对元组(3,4,5,6,7,10,8),计算机设备选择(a2,c2,d2)为哈希键的哈希表 7,针对元组(4,6,7,null,null,10,7),计算机设备选择(a2,c2)为哈希键的哈希表4。
[0160]
s109:计算机设备计算第一子数据组合的目标哈希值。
[0161]
具体的,计算机设备将第一子数据组合代入哈希函数得到目标哈希值。
[0162]
基于s107中的示例第一子数据组合为(1,3)得到目标哈希值为1。
[0163]
s110:计算机设备在目标哈希表中选择目标哈希值对应的目标哈希桶。
[0164]
具体的,若不存在目标哈希值对应的目标哈希桶,则将第一元组中的第一记录作为目标记录。
[0165]
若存在目标哈希值对应的目标哈希桶,则执行s111。
[0166]
基于s106中创建的多个哈希表的示例,基于s109中示例得到的目标哈希值为1,选择的目标哈希表以及目标哈希桶如图7所示,选择的目标哈希表为哈希表5,选择的目标哈希桶为1号哈希桶。1号哈希桶中的元组的哈希键对应的数据的哈希值为1。
[0167]
s111:计算机设备在目标哈希桶的元组中由查询列对应的数据构成的数据组合中查找第一数据组合。若存在,则第一记录为非目标记录,若不存在,则第一记录为目标记录。
[0168]
可选的,计算机设备在目标哈希桶的第二集合中查找第一子数据组合,若在第二集合中,没有查找到第一子数据组合,则确定第一记录为目标记录;其中,第二集合是第一集合中的子数据组合构成的集合,第二集合的列组合是目标哈希表的哈希键。若在第二集合中,查找到第一子数据组合,则当第二子数据组合与目标数据组合中除第一子数据组合之外的子数据组合不同时,确定第一记录为目标记录。其中,第二子数据组合对应的列组合是第二查询列组合中除第一子数据组合对应的列组合之外的列构成的列组合。第二子数据组合是所查找到的第一子数据组合所在的第二数据组合的子数据组合。目标数据组合是第一记录所在元组中的第一数据组合。基于s110中的示例,第一数据组合为“1,2,null,3”与1号哈希桶中的每个第二数据组合进行匹配,其中,1号哈希桶中的元组(1,2,null,3,7,10)中的第二数据组合“1,2,null,3”中a2列对应的数据为1与a1列对应的数据1相同,b2列对应的数据为2与b1列对应的数据2相同,c2列对应的数据与c1列对应的数据都为空,d2列对应的数据为3与d1列对应的数据3相同。因此,确定第一记录“1,2,null,3,4,9”为非目标记录。
[0169]
在另一个示例中,第一数据组合为“4,6,7,null”,该数据组合第一子数据组合为(4,7)。计算机设备获取的目标哈希表为以(a2,c2)作为哈希键创建的哈希表4,第一数据组合中的哈希键的哈希值为2,与2号哈希桶中的每个第二数据组合进行匹配,其中,2号哈希桶中的元组 (7,9,10,10,4,9)中的第二数据组合“7,9,10,10”中a2列对应的数据为1与a1列对应的数据4不同,计算机设备继续将第一数据组合与2号哈希桶中的另外的元组进行匹
配,遍历2号哈希桶中的元组中的第二数据组合,没有找到与第一数据组合匹配的第二数据组合,因此,确定第一记录“4,6,7,null,null,9”为目标记录。
[0170]
后续,计算机设备中的数据库管理系统对第一数据表中除第一记录所在元组之外的其他元组均执行s107-s111,得到第一数据表中的所有目标记录,将目标记录输出至计算机设备中的数据库客户端或者中间件中。
[0171]
通常上述方法,在数据库管理系统中,上述s101至s106由优化器执行。s107至s111 由执行器执行。
[0172]
本实施例中,由于计算机设备获取到反连接查询语句之后,获取目标哈希表。根据第一数据表中的第一数据组合中哈希键的哈希值,选择与该哈希值相同的第二数据表中的元组的第二数据组合中查找第一数据组合。从而,在第一查询列组合与第二查询列组合的关联(对应)列中同时都不具有非空约束时,可以使用哈希连接来执行反连接查询语句,由于哈希连接在数据体量大时的执行效率会比传统的嵌套循环连接或者合并连接有量级的提升,因此,本申请的数据库查询方法相比原有对反连接查询语句中包含非空约束时,使用嵌套循环连接或者合并连接的方式在执行效率上有量级的提升,从而降低查询开销,提高了查询效率。
[0173]
上述主要从方法的角度对本申请实施例提供的方案进行了介绍。为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的方法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0174]
本申请实施例可以根据上述方法示例对计算机设备中的管理系统(如数据库管理系统) 进行功能模块的划分,例如可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0175]
如图8所示,为本申请实施例提供的一种计算机设备的结构示意图。该计算机设备80可以用于执行上文中任意一个实施例(如图4所示的实施例)中计算机设备所执行的功能。计算机设备80可以包括:获取单元801、计算单元802和确定单元803。
[0176]
获取单元801用于获取反连接查询语句,该反连接查询语句用于基于第一查询列组合和第二查询列组合查询第一数据表中的目标记录。第一查询列组合包括第一数据表中的多个列,第二查询列组合包括第二数据表中的多个列;目标记录所在的元组中的第一数据组合不属于第一集合。目标记录是元组的非空子集。第一数据组合是该元组的非空子集。第一数据组合对应的列组合是第一查询列组合。第一集合是第二数据表中的第二数据组合构成的集合,第二数据组合对应的列组合是第二查询列组合,第一查询列组合与第二查询列组合中对应列均不同时具有非空约束。获取目标哈希表;其中,目标哈希表包括多个哈希值,每个哈希值对应第一集合中的一个或多个第二数据组合。目标哈希表的哈希键是第二查询列组合中的一个或多个列。
[0177]
计算单元802,用于计算第一数据表中第一记录所在的元组中的第一子数据组合
的目标哈希值。其中,第一子数据组合对应的列组合是第一查询列组合中的一个或多个列构成的列组合,第一子数据组合对应的列组合对应于目标哈希表的哈希键。
[0178]
确定单元803,用于若目标哈希值对应的每个该第二数据组合均与该第一记录所在元组中的该第一数据组合不同,则确定第一记录为目标记录。
[0179]
例如,结合图4,获取单元801可以用于执行s101-s102、s107-s108。计算单元802可以用于执行s103-s105、s109,确定单元803可以用于执行s110-s111。
[0180]
可选的,该计算机设备80包括多个哈希表;该多个哈希表中的每个哈希表的哈希键是第二查询列组合中的一个或多个列构成的列组合,不同哈希表的哈希键不同;获取单元801具体用于:从该多个哈希表中选择该目标哈希表。
[0181]
可选的,确定单元803还用于:获取第一子数据组合,第一子数据组合是第一记录所在元组中的第一数据组合中的非空数据构成的数据组合。
[0182]
可选的,如图8所示,该计算机设备80还包括创建单元804。确定单元803还用于:根据该第二查询列组合的至少两个子列组合的代价,确定该至少两个子列组合中的一个子列组合为候选哈希键。其中,子列组合的代价为选择该子列组合为哈希键执行反连接查询语句的查询开销。创建单元804,用于若该候选哈希键包括一列,则基于该哈希键创建该目标哈希表;若该候选哈希键包括多列,则确定该多列的至少一个列组合为哈希键,并基于该哈希键创建至少一个哈希表,该至少一个哈希表包括目标哈希表。例如,结合图4,创建单元804可以用于执行s106。
[0183]
可选的,创建单元804具体用于:确定至少一个列组合中代价最小的列组合为哈希键,基于该哈希键创建至少一个哈希表。
[0184]
可选的,确定单元803具体用于:若该第二数据表的大小超出该计算机设备的内存大小,则确定该第二查询列组合中代价最小的一列为候选哈希键。若该第二数据表的大小没有超出该计算机设备的内存大小,则计算该第二查询列组合的多个子列组合的代价,确定该多个子列组合中代价最小的子列组合为候选哈希键。
[0185]
可选的,目标哈希表还包括多个哈希桶,一个哈希桶包括一个或多个第二数据组合,该一个或多个第二数据组合中对应该目标哈希表的哈希键的子数据组合的哈希值相同;哈希桶与哈希值一一对应。确定单元803具体用于:若该目标哈希值对应的目标哈希桶中不包含该第一记录所在元组中的该第一数据组合,则确定该第一记录为目标记录。
[0186]
可选的,确定单元803具体用于:若在第二集合中,没有查找到该第一子数据组合,则将该第一记录作为该目标记录;该第二集合是第一集合中的子数据组合构成的集合。该第二集合的列组合是该目标哈希表的哈希键。
[0187]
可选的,确定单元803具体用于:若在第二集合中,查找到该第一子数据组合,则当第二子数据组合与目标数据组合中除第一子数据组合之外的子数据组合不同时,确定第一记录为目标记录。其中,第二子数据组合对应的列组合是第二查询列组合中除第一子数据组合对应的列组合之外的列构成的列组合。第二子数据组合是所查找到的第一子数据组合所在的第二数据组合的子数据组合;目标数据组合是第一记录所在元组中的第一数据组合。
[0188]
关于上述可选方式的具体描述参见前述的方法实施例,此处不再赘述。此外,上述提供的任一种计算机设备80的解释以及有益效果的描述均可参考上述对应的方法实施例,
不再赘述。
[0189]
需要说明的是,上述各个单元对应执行的动作仅是具体举例,各个单元实际执行的动作参照上述基于图4所述的实施例的描述中提及的动作或步骤。
[0190]
在一个示例中,结合图3,上述获取单元801、计算单元802、确定单元803和创建单元804。可以通过图3中的处理器101实现。上述第一数据表,第二数据表以及哈希表等都可以存储在存储器103中。
[0191]
本申请实施例还提供了一种数据库查询装置,包括:存储器和处理器;该存储器用于存储计算机程序,该处理器用于调用该计算机程序,以执行上文提供的任一实施例中提及的动作或步骤。
[0192]
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当该计算机程序在计算机上运行时,使得该计算机执行上文提供的任一实施例中提及的动作或步骤。
[0193]
本申请实施例还提供了一种芯片。该芯片中集成了用于实现上述数据库查询装置的功能的电路和一个或者多个接口。可选的,该芯片支持的功能可以包括基于图4所述的实施例中的处理动作,此处不再赘述。本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可通过程序来指令相关的硬件完成。所述的程序可以存储于一种计算机可读存储介质中。上述提到的存储介质可以是只读存储器,随机接入存储器等。上述处理单元或处理器可以是中央处理器,通用处理器、特定集成电路(application specific integrated circuit,asic)、微处理器(digital signal processor,dsp),现场可编程门阵列(field programmable gate array,fpga) 或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。
[0194]
本申请实施例还提供了一种包含指令的计算机程序产品,当该指令在计算机上运行时,使得计算机执行上述实施例中的任意一种方法。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solid state disk,ssd))等。
[0195]
应注意,本申请实施例提供的上述用于存储计算机指令或者计算机程序的器件,例如但不限于,上述存储器、计算机可读存储介质和通信芯片等,均具有非易失性(non-transitory)。
[0196]
在实施所要求保护的本申请过程中,本领域技术人员通过查看附图、公开内容、以及所附权利要求书,可理解并实现公开实施例的其他变化。在权利要求中,“包括”(comprising) 一词不排除其他组成部分或步骤,“一”或“一个”不排除多个的情况。单个处
理器或其他单元可以实现权利要求中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。
[0197]
尽管结合具体特征及其实施例对本申请进行了描述,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1