NLJ改进表连接方法及基于该改进方法的数据查询方法技术

技术编号:21605454 阅读:25 留言:0更新日期:2019-07-13 18:12
本发明专利技术实施例提供一种NLJ改进表连接方法及基于该改进方法的数据查询方法,其中该改进表连接方法包括:在基于简单嵌套循环连接NLJ算法进行表连接过程中加载表数据的步骤之前,增加对外部表和/或内部表的Value‑Node检测过程;若判断外部表或者内部表属于Value‑Node,则在表数据加载时,仅加载该表的一行,并记录该表的行数;最后基于外部表与内部表匹配的结果,以及外部表的行数和/或内部表的行数,获取外部表与内部表的表连接结果。本发明专利技术实施例能够在进行含有Value‑Node的运算时,有效避免大量的重复数据加载和重复计算,从而有效降低计算过程占用的存储空间、运算资源以及运算时间。

NLJ improved table join method and data query method based on this improved method

【技术实现步骤摘要】
NLJ改进表连接方法及基于该改进方法的数据查询方法
本专利技术实施例涉及大数据分析
,更具体地,涉及一种NLJ改进表连接方法及基于该改进方法的数据查询方法。
技术介绍
数据库的表连接算法在数据库引擎中占有着十分重要的位置。由于数据库中一张表记录的信息是有限的,因此用户需要分门别类的建立多个表来存储信息。当一个查询请求涉及数据库的多个表时,需用一定的连接条件或连接谓词将这些表连接起来,才能提供用户需要的信息,这时就用到了数据库的表连接算法。嵌套循环连接(NestedLoopJoin,NLJ)算法是最简单的一种表连接算法。现有的嵌套循环表连接算法有:简单的NLJ算法以及优化的批量嵌套循环(BlockNestedLoop,BNL)算法。为更清楚的说明,假设将需要进行连接的两张表分别称为L和R,其中L为左表或称为外部表,R为右表或称为内部表。简单的NLJ算法对外部表和内部表做一次两层的嵌套循环扫描,把L中的每条数据取出来与R中所有数据进行比较,并将比较结果返回对应记录,决定对应记录是否输出。BNL算法对简单NLJ算法的优化手段是:不再对数据一条一条的进行扫描连接,而是批量进行。通常是每次加载一个内存页大小的数据,并将该页数据经过哈希计算后放入哈希表中,数据比较时L表不需要与R表中的每条记录进行比较,只需对哈希表进行查找,从而降低内层循环的扫描次数。可以知道,Value-Node是对SQL语句进行语法解析后产生的语法树上一种只含有相同常量值的节点,其类型为Value。例如,有SQL语句:select3fromT1,其含义是输出表T1的行数个“3”。经语法解析后,该句将作为一个Value-Node节点,其特征是数据全部为重复常值3。若表T1有100行,则其表现形式为100个数字“3”组成的列。因此,无论是简单的NLJ算法还是有批量优化的BNL算法,在进行含有Value-Node的运算时,由于Value-Node的所有行只包含一个相同的常值,当数据量较大时,非常多的重复值的加载会耗费大量的时间及存储空间,带来巨大的扫描代价。同时,当L或R为Value-Node时,不可避免的会进行大量的重复运算,会耗费大量运算资源,拉长运算时间。另外,对于BNL算法,还会带来额外的哈希计算的代价,因为数据具有相同的常值无法通过哈希分发来降低内层循环的次数。
技术实现思路
为了克服上述问题或者至少部分地解决上述问题,本专利技术实施例提供一种NLJ改进表连接方法及基于该改进方法的数据查询方法,用以在进行含有Value-Node的运算时,能有效避免大量的重复数据加载和重复计算,从而有效降低计算过程占用的存储空间、运算资源以及运算时间。第一方面,本专利技术实施例提供一种NLJ改进表连接方法,包括:在基于简单嵌套循环连接NLJ算法进行表连接过程中,在加载待连接外部表和内部表的步骤之前,还包括:检测所述内部表和/或所述外部表是否属于Value-Node;若所述内部表属于Value-Node,则将基于简单嵌套循环连接NLJ算法,进行表连接过程中逐行加载所述内部表的步骤,替换为仅加载所述内部表的一行,并记录所述内部表的行数;若所述外部表属于Value-Node,则将基于简单嵌套循环连接NLJ算法,进行表连接过程中逐行加载所述外部表的步骤,替换为仅加载所述外部表的一行,并记录所述外部表的行数;相应的,基于所述外部表与所述内部表各行数据匹配的结果,以及所述内部表的行数和/或所述外部表的行数,获取所述外部表与所述内部表的表连接结果。第二方面,本专利技术实施例提供一种数据查询方法,包括:解析用户SQL查询语句,生成语法树;遍历所述语法树的所有语法树节点,循环利用如上第一方面所述的NLJ改进表连接方法,获取每个所述语法树节点对应的表连接结果;基于各所述表连接结果,返回针对所述用户SQL查询语句的数据查询结果。第三方面,本专利技术实施例提供一种电子设备,包括:至少一个存储器、至少一个处理器、通信接口和总线;所述存储器、所述处理器和所述通信接口通过所述总线完成相互间的通信,所述通信接口用于所述电子设备与表连接计算设备之间的信息传输;所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如上第一方面所述的NLJ改进表连接方法,或者如上第二方面所述的数据查询方法。第四方面,本专利技术实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如上第一方面所述的NLJ改进表连接方法,或者如上第二方面所述的数据查询方法。本专利技术实施例提供的NLJ改进表连接方法及基于该改进方法的数据查询方法,针对含有Value-Node的NLJ表连接运算,通过在加载表数据前增加对外部表和/或内部表的Value-Node检测,并在检测外部表或内部表为Value-Node时,仅加载对应表的一行数据和该表的行数,根据此信息即可实现内部表和外部表的连接,能有效避免大量的重复数据加载和重复计算,从而有效降低计算过程占用的存储空间、运算资源以及运算时间。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术实施例提供的NLJ改进表连接方法的流程示意图;图2为根据本专利技术实施例提供的NLJ改进表连接方法中改进NLJ算法的处理流程示意图;图3为本专利技术实施例提供的数据查询方法的流程示意图;图4为本专利技术实施例提供的NLJ改进表连接装置的结构示意图;图5为本专利技术实施例提供的电子设备的实体结构示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术实施例的一部分实施例,而不是全部的实施例。基于本专利技术实施例中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本专利技术实施例保护的范围。本专利技术实施例针对现有技术中基于NLJ进行含有Value-Node的运算时存在的占用存储空间、运算资源大以及运算时间长的问题,通过在加载表数据前增加对外部表和/或内部表的Value-Node检测,并在检测外部表或内部表为Value-Node时,仅加载对应表的一行数据和该表的行数,根据此信息即可实现内部表和外部表的连接,能有效避免大量的重复数据加载和重复计算,从而有效降低计算过程占用的存储空间、运算资源以及运算时间。以下将具体通过多个实施例对本专利技术实施例进行展开说明和介绍。图1为本专利技术实施例提供的NLJ改进表连接方法的流程示意图,如图1所示,该方法是对基于简单NLJ算法进行表连接的改进方法,该方法包括:S101,在基于简单嵌套循环连接NLJ算法进行表连接过程中,在加载待连接外部表和内部表的步骤之前,先检测该外部表和/或内部表是否属于Value-Node。具体而言,本专利技术实施例在获取待连接的外部表和内部表的基础上,首先可以对外部表的类型进行检测,以判断其对应的语法树节点是否为Value-Node类型本文档来自技高网
...

【技术保护点】
1.一种NLJ改进表连接方法,其特征在于,包括:在基于简单嵌套循环连接NLJ算法进行表连接过程中,在加载待连接外部表和内部表的步骤之前,还包括:检测所述内部表和/或所述外部表是否属于Value‑Node;若所述内部表属于Value‑Node,则将基于简单嵌套循环连接NLJ算法,进行表连接过程中逐行加载所述内部表的步骤,替换为仅加载所述内部表的一行,并记录所述内部表的行数;若所述外部表属于Value‑Node,则将基于简单嵌套循环连接NLJ算法,进行表连接过程中逐行加载所述外部表的步骤,替换为仅加载所述外部表的一行,并记录所述外部表的行数;相应的,基于所述外部表与所述内部表各行数据匹配的结果,以及所述内部表的行数和/或所述外部表的行数,获取所述外部表与所述内部表的表连接结果。

【技术特征摘要】
1.一种NLJ改进表连接方法,其特征在于,包括:在基于简单嵌套循环连接NLJ算法进行表连接过程中,在加载待连接外部表和内部表的步骤之前,还包括:检测所述内部表和/或所述外部表是否属于Value-Node;若所述内部表属于Value-Node,则将基于简单嵌套循环连接NLJ算法,进行表连接过程中逐行加载所述内部表的步骤,替换为仅加载所述内部表的一行,并记录所述内部表的行数;若所述外部表属于Value-Node,则将基于简单嵌套循环连接NLJ算法,进行表连接过程中逐行加载所述外部表的步骤,替换为仅加载所述外部表的一行,并记录所述外部表的行数;相应的,基于所述外部表与所述内部表各行数据匹配的结果,以及所述内部表的行数和/或所述外部表的行数,获取所述外部表与所述内部表的表连接结果。2.根据权利要求1所述的NLJ改进表连接方法,其特征在于,所述检测所述内部表和/或所述外部表是否属于Value-Node的步骤具体包括:基于所述外部表和所述内部表对应的语法树节点,进行语法解析;若检测到所述语法树节点的左孩子节点对应一个未被预先定义的字符串,则判定所述外部表属于Value-Node,否则判定为非Value-Node,和/或,若检测到所述语法树节点的右孩子节点对应一个未被预先定义的字符串,则判定所述内部表属于Value-Node,否则判定为非Value-Node。3.根据权利要求1所述的NLJ改进表连接方法,其特征在于,若对所述外部表和所述内部表的Value-Node属性分别进行检测,则获取所述外部表与所述内部表的表连接结果的步骤具体包括:若检测到所述内部表属于Value-Node,则仅加载所述内部表的一行数据,并记录所述内部表的行数;从所述外部表的第一行开始,加载所述外部表的当前行数据,并将该行数据与加载的所述内部表的行数据进行比对,若判断满足连接条件,则输出所述外部表这一行的指定数据;检测所述外部表是否属于Value-Node,并在检测为是时,记录所述外部表的行数,并基于所述外部表的行数、所述内部表的行数以及输出的所述指定数据,通过对所述外部表和所述内部表做笛卡尔乘积,获取所述表连接结果。4.根据权利要求3所述的NLJ改进表连接方法,其特征在于,在所述检测所述外部表是否属于Value-Node的步骤之后,还包括:若检测结果为否,则顺...

【专利技术属性】
技术研发人员:张娇娇董隆超陈兴利孔令雷
申请(专利权)人:北京东方国信科技股份有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1