CN110008238B - Nlj改进表连接方法及基于该改进方法的数据查询方法 - Google Patents
Nlj改进表连接方法及基于该改进方法的数据查询方法 Download PDFInfo
- Publication number
- CN110008238B CN110008238B CN201910183971.7A CN201910183971A CN110008238B CN 110008238 B CN110008238 B CN 110008238B CN 201910183971 A CN201910183971 A CN 201910183971A CN 110008238 B CN110008238 B CN 110008238B
- Authority
- CN
- China
- Prior art keywords
- data
- external
- node
- connection
- internal
- 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
本发明实施例提供一种NLJ改进表连接方法及基于该改进方法的数据查询方法,其中该改进表连接方法包括:在基于简单嵌套循环连接NLJ算法进行表连接过程中加载表数据的步骤之前,增加对外部表和/或内部表的Value‑Node检测过程;若判断外部表或者内部表属于Value‑Node,则在表数据加载时,仅加载该表的一行,并记录该表的行数;最后基于外部表与内部表匹配的结果,以及外部表的行数和/或内部表的行数,获取外部表与内部表的表连接结果。本发明实施例能够在进行含有Value‑Node的运算时,有效避免大量的重复数据加载和重复计算,从而有效降低计算过程占用的存储空间、运算资源以及运算时间。
Description
技术领域
本发明实施例涉及大数据分析技术领域,更具体地,涉及一种NLJ改进表连接方法及基于该改进方法的数据查询方法。
背景技术
数据库的表连接算法在数据库引擎中占有着十分重要的位置。由于数据库中一张表记录的信息是有限的,因此用户需要分门别类的建立多个表来存储信息。当一个查询请求涉及数据库的多个表时,需用一定的连接条件或连接谓词将这些表连接起来,才能提供用户需要的信息,这时就用到了数据库的表连接算法。
嵌套循环连接(Nested Loop Join,NLJ)算法是最简单的一种表连接算法。现有的嵌套循环表连接算法有:简单的NLJ算法以及优化的批量嵌套循环(Block Nested Loop,BNL)算法。为更清楚的说明,假设将需要进行连接的两张表分别称为L和R,其中L为左表或称为外部表,R为右表或称为内部表。
简单的NLJ算法对外部表和内部表做一次两层的嵌套循环扫描,把L中的每条数据取出来与R中所有数据进行比较,并将比较结果返回对应记录,决定对应记录是否输出。
BNL算法对简单NLJ算法的优化手段是:不再对数据一条一条的进行扫描连接,而是批量进行。通常是每次加载一个内存页大小的数据,并将该页数据经过哈希计算后放入哈希表中,数据比较时L表不需要与R表中的每条记录进行比较,只需对哈希表进行查找,从而降低内层循环的扫描次数。
可以知道,Value-Node是对SQL语句进行语法解析后产生的语法树上一种只含有相同常量值的节点,其类型为Value。例如,有SQL语句:select 3from T1,其含义是输出表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类型。可以理解的是,该检测过程可以单独针对外部表进行,也可以即对外部表进行也对内部表进行,当然也可以仅单独对内部表进行,本发明实施例对此并不作限制。
可以知道,前台的语法解析器可以根据用户输入的SQL语句进行语法解析,生成语法树,语法树的每个节点即是一个语法树节点,每个语法树节点对应要连接的多个相关的数据表。其中Value-Node是对SQL语句进行语法解析后产生的语法树上一种只含有相同常量值的节点,其类型为Value,其特征是其各行数据全部为重复的常值。
另外可以理解,在简单的NLJ表连接算法中,会根据待连接的两个表,分别确定一个外部表(或称驱动表、左表)和一个内部表(或称被驱动表、右表),此过程需要综合考虑表的数据量大小和表数据的适合访问方式。通常将返回数据量小的表作为外部表。
简单的NLJ算法对外部表和内部表会做一次两层的嵌套循环扫描,外部表为外层循环,内部表为内层循环。把外部表中的每条数据依次取出来,与内部表中所有数据比较,并将比较结果返回对应记录,决定对应记录是否输出。
S102,若内部表属于Value-Node,则在加载内部表时,仅加载内部表的一行,并记录内部表的行数。
可以理解,在基于简单的NLJ算法对外部表进行加载时,需要逐行加载该表中的每一行数据,并在加载每一行数据后,逐行加载内部表的每一行数据,并将外部表的该行数据与加载的内部表的各行数据进行比较,返回比较结果,以确定能否进行数据连接。
本发明实施例的改进方法中,在根据上述步骤对内部表是否属于Value-Node进行判断的基础上,若根据判断获知内部表属于Value-Node,则为避免由于内部表属于Value-Node而导致的多次相同数据的重复加载与比对,造成存储空间、资源以及时间的浪费,事实上也只需知道外部表每一行数据与内部表任一行数据的比较结果,即可获知外部表每一行与内部表所有数据的比较结果。
因此,在对内部表数据进行加载时,可以只加载内部表的一行数据,同时记录内部表的行数。在进行数据比对判断时,取外部表的每一行数据与内部表的该行数据进行比较,得到外部表每行数据在该行数据下是否应该输出的判定结果,并据此结果可推知外部表的每一行与内部表所有数据的比较结果,也即得到外部表的每一行的相应记录是否应该输出的判定结果。
S103,若外部表属于Value-Node,则在加载外部表时,仅加载外部表的一行,并记录外部表的行数。
与加载内部表同理,也可以在加载外部表前对内部表进行同样的类型判断,若获知外部表属于Value-Node,则由于Value-Node型数据表的各行数据全部为重复的常值,事实上只需知道外部表任一行数据与内部表的比较结果,即可获知外部表每一行与内部表的比较结果。
因此,在对外部表数据进行加载时,可以只加载外部表的一行数据,同时记录外部表的行数。在进行数据比对判断时,取外部表的该行数据与内部表的数据进行比较,得到该行数据是否应该输出的判定结果,并据此结果可推知外部表所有行与内部表的比较结果,也即得到外部表所有行的相应记录是否应该输出的判定结果。
S104,基于外部表与内部表各行数据匹配的结果,以及内部表的行数和/或外部表的行数,获取外部表与内部表的表连接结果。
本发明实施例在上述各步骤处理的基础上,可以得到外部表每行数据与内部表每行数据比较确定出的外部表每一行的相应记录是否应该输出的判定结果,并在对外部表和/或内部表是否属于Value-Node进行判断的基础上,对外部表和/或内部表的行数进行了记录。因此,可以据此对内部表和外部表做笛卡尔积运算,得到每行外部表与每行内部表进行比较输出的外部表的每一行的相应记录是否应该输出的判定结果。根据这些判定结果,即可最终实现内部表与外部表的连接。
本发明实施例提供的NLJ改进表连接方法,针对含有Value-Node的NLJ表连接运算,通过在加载表数据前增加对外部表和/或内部表的Value-Node检测,并在检测外部表或内部表为Value-Node时,仅加载对应表的一行数据和该表的行数,根据此信息即可实现内部表和外部表的连接,能有效避免大量的重复数据加载和重复计算,从而有效降低计算过程占用的存储空间、运算资源以及运算时间。
根据上述各实施例可选的,检测外部表和/或内部表是否属于Value-Node的步骤具体包括:基于外部表和内部表对应的语法树节点,进行语法解析;若检测到语法树节点的左孩子节点对应一个未被预先定义的字符串,则判定外部表属于Value-Node,否则判定为非Value-Node,和/或,若检测到语法树节点的右孩子节点对应一个未被预先定义的字符串,则判定内部表属于Value-Node,否则判定为非Value-Node。
具体而言,实际的表连接过程通常会基于用户的数据或信息查询需求启动。前台的语法解析器根据用户输入的SQL语句进行语法解析,生成语法树。该语法树的每个节点对应查询到的相关信息表,在需要连接信息表时,遍历该语法树,根据语法树各节点信息进行语法解析。在语法解析器进行语法解析的过程中,若发现一个没有被预先定义过的字符串,那就认为是个常量,该常量就会作为一个Value-Node出现,否则认为未检测到Value-Node类型相关的数据表。可以理解,对于待连接的外部表和内部表,在进行Value-Node类型判断时,均可以采用与上述描述相同的处理流程。
其中可选的,进行语法解析的步骤具体包括:基于语法树节点进行语法解析,获取语法树节点的记录信息,记录信息至少包括所有连接条件、连接条件的个数、连接类型、需要参与连接的数据;相应的,基于记录信息,检测外部表和/或内部表是否属于Value-Node。
也就是说,本发明实施例当遍历找到记录需要进行表连接操作的语法树节点时,即根据语法树进行语法解析,获取该节点的记录信息,包括连接条件的个数、连接类型和需要参与连接的数据信息等。之后,根据这些记录信息,判断当前节点的左孩子与右孩子的节点类型是否为Value-Node,并记录。
根据上述各实施例可选的,若对外部表和内部表的Value-Node属性分别进行检测,则获取外部表与内部表的表连接结果的步骤具体包括:
若检测到内部表属于Value-Node,则仅加载内部表的一行数据,并记录内部表的行数;
从外部表的第一行开始,加载外部表的当前行数据,并将该行数据与加载的内部表的行数据进行比对,若判断满足连接条件,则输出外部表该行的指定数据;
检测外部表是否属于Value-Node,并在检测为是时,记录外部表的行数,并基于外部表的行数、内部表的行数以及输出的指定数据,通过对外部表和内部表做笛卡尔乘积,获取表连接结果。
具体而言,如图2所示,为根据本发明实施例提供的NLJ改进表连接方法中改进NLJ算法的处理流程示意图,首先进行内部表R的加载,查看内部表是否对应Value-Node类型,若是,则只加载内部表的一行并记录内部表的行数。
接下来进行外部表L的加载。同样的,载入前需要查看外部表L是否对应Value-Node类型,若是,则只加载该表的一行并记录该表的行数。记录行数是为了保证表连接的笛卡尔积数目正确,从而保证结果条数正确。
之后,将外部表与内部表做笛卡尔积。即,对外部表逐行进行加载,每加载一行与内部表的全部数据进行批量连接比较,记录比较结果。再扫描已经记录的比较结果,根据相应的连接类型,按条件将外部表该行对应输出记录添加到结果集中。
本发明实施例提供的数据查询方法,在资源与空间使用方面,对参与连接的数据在加载前进行判断,符合优化条件的数据只需加载一条即可,而不用全部加载,此优化可节省将算法运行中使用的空间。由于避免了重复的运算,也节省了大量的计算资源。在运行时间方面,该算法可以根据参与连接的表是否为Value-Node分别进行处理,能快速、准确地识别到Value-Node,大大降低算法运行时间,将算法的时间复杂度从O(m*n)降低到O(1*n)或O(m*1)。此处m为外部表数据数目,n为内部表数据数目。最好情况下即外部表与内部表均为Value-Node时,时间复杂度可直接降至O(1)。
在上述各实施例的基础上,在检测外部表是否属于Value-Node的步骤之后,本发明实施例的NLJ改进表连接方法还可以包括:若检测结果为否,则顺序将外部表的下一行数据作为当前行数据,并循环执行加载外部表的当前行数据至输出外部表该行的指定数据的步骤,直至外部表的所有行数据加载完成;基于外部表的各行分别对应的指定数据,获取表连接结果。
具体而言,如图2所示,在初始阶段对内部表是否属于Value-Node进行判断之后,可能存在内部表不属于Value-Node的情况。这种情况下,可全部加载内部表的数据,图2中的Mdp表示的是在内存中存储数据的结构,通常有固定行数,如8192行。则可依次从中取出一行数据,也可取出该行数据中指定列的数据。图中所示加载一个右表Mdp即表示加载8192行的内部表数据。
而在对外部表进行Value-Node判断时,也会存在判断结果为否的情况。这种情况下,将处理流程转入外部表中刚比对完成的一行数据的下一行,并以该下一行作为新的当前行,并将该下一行的数据作为新的当前行数据。之后,加载外部表中该新的当前行数据,并将该新的当前行数据与初始阶段加载的内部表的数据进行连接比对,若判断满足连接条件,则输出外部表该行的指定数据。之后,处理流程继续转入新的当前行的下一行,并重复执行上述处理,直到数据加载完成,返回外部表每行进行连接比对输出的指定数据。最后基于外部表的各行分别对应的指定数据,获取外部表与内部表的表连接结果。
在上述各实施例的基础上,在加载外部表的当前行数据的步骤之前,本发明实施例的NLJ改进表连接方法还可以包括:判断外部表是否已加载完最后一行;相应的,若未加载完最后一行,则继续加载外部表的当前行数据,否则确认外部表的所有行数据加载完成。
具体而言,如图2所示,在判断外部表是否加载完成时,只需在每次处理流程转到刚比对完成的一行数据的下一行时,判断一次是否加载到外部表的最后一行,也即外部表的最后一行是否已经加载完成。若是,则可直接结束表连接计算流程,输出连接比对结果。否则,按上述流程,继续加载外部表的下一行。
作为本发明实施例的另一个方面,如图3所示,为本发明实施例提供的数据查询方法的流程示意图,该数据查询方法基于上述各实施例提供的NLJ改进表连接方法进行表连接,以输出最终的查询结果,该数据查询方法包括:解析用户SQL查询语句,生成语法树;遍历语法树的所有语法树节点,循环利用如上述各实施例的NLJ改进表连接方法,获取每个语法树节点对应的表连接结果;基于各表连接结果,返回针对用户SQL查询语句的数据查询结果。
具体而言,本发明实施例主要包含三个相互管理的处理步骤,即用户SQL查询语句解析、基于改进NLJ的表连接计算和根据表连接结果输出查询结果。具体如下:
步骤1,前台的语法解析器根据用户输入的SQL语句,进行语法解析,生成语法树。后台遍历语法树,根据语法树信息进行语法解析。语法解析器在解析SQL的时候,发现一个没有被预先定义过的字符串,那就认为是个常量,该常量就会作为一个Value-Node出现。
步骤2,若解析到嵌套循环连接处理,则根据连接类型,例如in、exists等,进入如上述各实施例的改进嵌套循环表连接计算处理流程,简称为VN-NLJ计算流程。
步骤3,在表连接计算处理流程中,进行内部表R与外部表L的数据加载,然后进行数据比较,将比较结果标记在数组中。通过遍历标记数组,将符合项对应记录增加到结果集中。
重复步骤上述步骤3的处理流程,直至所有数据处理完毕,返回最终查询结果。
本发明实施例提供的数据查询方法,针对含有Value-Node的NLJ表连接运算,通过在加载表数据前增加对外部表和/或内部表的Value-Node检测,并在检测外部表或内部表为Value-Node时,仅加载对应表的一行数据和该表的行数,根据此信息即可实现内部表和外部表的连接,能有效避免大量的重复数据加载和重复计算,从而有效降低计算过程占用的存储空间、运算资源以及运算时间。
在上述实施例的基础上,在获取每个语法树节点对应的表连接结果的步骤之后,本发明实施例的数据查询方法还可以包括:将表连接结果添加到查询结果集中;相应的,在判断查询结果集满或者所有语法树节点的数据计算完成后,批量返回查询结果集的数据,生成数据查询结果。
可以理解为,本发明实施例可事先设置一个表连接计算的输出结果集,并在每次根据上述各实施例的NLJ改进表连接方法计算之后,将计算结果添加到该结果集中。并在每次存入数据时,对该结果集是否已被填满进行判断,并在结果集满时,批量返回其中数据,得到部分相应的查询结果。否则,进一步判断是不是所有数据已计算完成,若是,则返回装填最后一部分结果的结果集,得到最终的查询结果,结束处理流程。
作为本发明实施例的又一个方面,本发明实施例根据上述各实施例提供一种NLJ改进表连接装置,该装置用于在上述各实施例中实现基于NLJ改进的表连接。因此,在上述各实施例的NLJ改进表连接方法中的描述和定义,可以用于本发明实施例中各个执行模块的理解,具体可参考上述实施例,此处不在赘述。
根据本发明实施例的一个实施例,NLJ改进表连接装置的结构如图4所示,为本发明实施例提供的NLJ改进表连接装置的结构示意图,该装置可以用于实现上述各方法实施例中基于NLJ改进的表连接,该装置包括:Value-Node检测模块401、第一加载模块402、第二加载模块403和连接输出模块404。其中:
Value-Node检测模块401用于在基于简单嵌套循环连接NLJ算法进行表连接过程中,在加载待连接外部表和内部表的步骤之前,先检测该外部表和/或内部表是否属于Value-Node;第一加载模块402用于若内部表属于Value-Node,则在加载内部表时,仅加载内部表的一行,并记录内部表的行数;第二加载模块403用于若外部表属于Value-Node,则在加载外部表时,仅加载外部表的一行,并记录外部表的行数;连接输出模块404基于外部表与内部表各行数据匹配的结果,以及外部表的行数和/或内部表的行数,获取外部表与内部表的表连接结果。
具体而言,Value-Node检测模块401在获取待连接的外部表和内部表的基础上,首先可以对外部表的类型进行检测,以判断其对应的语法树节点是否为Value-Node类型。可以理解的是,该检测过程可以单独针对外部表进行,也可以即对外部表进行也对内部表进行,当然也可以仅单独对内部表进行,本发明实施例对此并不作限制。
其中简单的NLJ算法对外部表和内部表会做一次两层的嵌套循环扫描,外部表为外层循环,内部表为内层循环。把外部表中的每条数据依次取出来,与内部表中所有数据比较,并将比较结果返回对应记录,决定对应记录是否输出。
之后,第一加载模块402在根据上述步骤对内部表是否属于Value-Node进行判断的基础上,若根据判断获知内部表属于Value-Node,则为避免由于内部表属于Value-Node而导致的多次相同数据的重复加载与比对,造成存储空间、资源以及时间的浪费,事实上也只需知道外部表每一行数据与内部表任一行数据的比较结果,即可获知外部表每一行与内部表所有数据的比较结果。
因此,第一加载模块402在对内部表数据进行加载时,可以只加载内部表的一行数据,同时记录内部表的行数。在进行数据比对判断时,第一加载模块402取外部表的每一行数据与内部表的该行数据进行比较,得到外部表每行数据在该行数据下是否应该输出的判定结果,并据此结果可推知外部表的每一行与内部表所有数据的比较结果,也即得到外部表的每一行的相应记录是否应该输出的判定结果。
同样的,第二加载模块403也可以在加载外部表前对内部表进行同样的类型判断,若获知外部表属于Value-Node,则由于Value-Node型数据表的各行数据全部为重复的常值,事实上只需知道外部表任一行数据与内部表的比较结果,即可获知外部表每一行与内部表的比较结果。
因此,第二加载模块403在对外部表数据进行加载时,可以只加载外部表的一行数据,同时记录外部表的行数。在进行数据比对判断时,取外部表的该行数据与内部表的数据进行比较,得到该行数据是否应该输出的判定结果,并据此结果可推知外部表所有行与内部表的比较结果,也即得到外部表所有行的相应记录是否应该输出的判定结果。
最后,连接输出模块404在上述处理的基础上,可以得到外部表每行数据与内部表每行数据比较确定出的外部表每一行的相应记录是否应该输出的判定结果,并在对外部表和/或内部表是否属于Value-Node进行判断的基础上,对外部表和/或内部表的行数进行了记录。因此,连接输出模块404可以据此对内部表和外部表做笛卡尔积运算,得到每行外部表与每行内部表进行比较输出的外部表的每一行的相应记录是否应该输出的判定结果。根据这些判定结果,即可最终实现内部表与外部表的连接。
本发明实施例提供的NLJ改进表连接装置,通过设置相应的执行模块,针对含有Value-Node的NLJ表连接运算,通过在加载表数据前增加对外部表和/或内部表的Value-Node检测,并在检测外部表或内部表为Value-Node时,仅加载对应表的一行数据和该表的行数,根据此信息即可实现内部表和外部表的连接,能有效避免大量的重复数据加载和重复计算,从而有效降低计算过程占用的存储空间、运算资源以及运算时间。
可以理解的是,本发明实施例中可以通过硬件处理器(hardware processor)来实现上述各实施例的装置中的各相关程序模块。并且,本发明实施例的NLJ改进表连接装置利用上述各程序模块,能够实现上述各方法实施例的NLJ改进表连接流程,在用于实现上述各方法实施例中基于NLJ改进的表连接时,本发明实施例的装置产生的有益效果与对应的上述各方法实施例相同,可以参考上述各方法实施例,此处不再赘述。
作为本发明实施例的又一个方面,本实施例根据上述各实施例提供一种电子设备,参考图5,为本发明实施例提供的电子设备的实体结构示意图,包括:至少一个存储器501、至少一个处理器502、通信接口503和总线504。
其中,存储器501、处理器502和通信接口503通过总线504完成相互间的通信,通信接口503用于该电子设备与表连接计算设备之间的信息传输;存储器501中存储有可在处理器502上运行的计算机程序,处理器502执行该计算机程序时,实现如上述各实施例所述的NLJ改进表连接方法或者数据查询方法。
可以理解为,该电子设备中至少包含存储器501、处理器502、通信接口503和总线504,且存储器501、处理器502和通信接口503通过总线504形成相互间的通信连接,并可完成相互间的通信,如处理器502从存储器501中读取NLJ改进表连接方法或者数据查询方法的程序指令等。另外,通信接口503还可以实现该电子设备与表连接计算设备之间的通信连接,并可完成相互间信息传输,如通过通信接口503实现NLJ改进表连接或者数据查询等。
电子设备运行时,处理器502调用存储器501中的程序指令,以执行上述各实施例所提供的NLJ改进表连接方法或者数据查询方法,例如包括:在基于简单嵌套循环连接NLJ算法进行表连接过程中,在加载待连接外部表和内部表的步骤之前还包括:检测外部表和/或内部表是否属于Value-Node;若外部表属于Value-Node,则将基于简单嵌套循环连接NLJ算法进行表连接过程中逐行加载外部表的步骤,替换为仅加载外部表的一行,并记录外部表的行数;若内部表属于Value-Node,则将基于简单嵌套循环连接NLJ算法进行表连接过程中逐行加载内部表的步骤,替换为仅加载内部表的一行,并记录内部表的行数;相应的,基于外部表与内部表各行数据匹配的结果,以及外部表的行数和/或内部表的行数,获取外部表与内部表的表连接结果等。
上述的存储器501中的程序指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。或者,实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还根据上述各实施例提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行如上述各实施例所述的NLJ改进表连接方法或者数据查询方法,例如包括:在基于简单嵌套循环连接NLJ算法进行表连接过程中,在加载待连接外部表和内部表的步骤之前,还包括:检测外部表和/或内部表是否属于Value-Node;若外部表属于Value-Node,则将基于简单嵌套循环连接NLJ算法,进行表连接过程中逐行加载外部表的步骤,替换为仅加载外部表的一行,并记录外部表的行数;若内部表属于Value-Node,则将基于简单嵌套循环连接NLJ算法,进行表连接过程中逐行加载内部表的步骤,替换为仅加载内部表的一行,并记录内部表的行数;相应的,基于外部表与内部表各行数据匹配的结果,以及外部表的行数和/或内部表的行数,获取外部表与内部表的表连接结果等。
本发明实施例提供的电子设备和非暂态计算机可读存储介质,通过执行上述各实施例所述的NLJ改进表连接方法或者数据查询方法,针对含有Value-Node的NLJ表连接运算,通过在加载表数据前增加对外部表和/或内部表的Value-Node检测,并在检测外部表或内部表为Value-Node时,仅加载对应表的一行数据和该表的行数,根据此信息即可实现内部表和外部表的连接,能有效避免大量的重复数据加载和重复计算,从而有效降低计算过程占用的存储空间、运算资源以及运算时间。
可以理解的是,以上所描述的装置、电子设备及存储介质的实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,既可以位于一个地方,或者也可以分布到不同网络单元上。可以根据实际需要选择其中的部分或全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上实施方式的描述,本领域的技术人员可以清楚地了解,各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如U盘、移动硬盘、ROM、RAM、磁碟或者光盘等,包括若干指令,用以使得一台计算机设备(如个人计算机,服务器,或者网络设备等)执行上述各方法实施例或者方法实施例的某些部分所述的方法。
另外,本领域内的技术人员应当理解的是,在本发明实施例的申请文件中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本发明实施例的说明书中,说明了大量具体细节。然而应当理解的是,本发明实施例的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本发明实施例公开并帮助理解各个发明方面中的一个或多个,在上面对本发明实施例的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。
然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明实施例要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明实施例的单独实施例。
最后应说明的是:以上实施例仅用以说明本发明实施例的技术方案,而非对其限制;尽管参照前述实施例对本发明实施例进行了详细的说明,本领域的技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例各实施例技术方案的精神和范围。
Claims (10)
1.一种NLJ改进表连接方法,其特征在于,包括:
在基于简单嵌套循环连接NLJ算法进行表连接过程中,在加载待连接外部表和内部表的步骤之前,还包括:检测所述内部表和/或所述外部表是否属于Value-Node,其中,Value-Node是对SQL语句进行语法解析后产生的语法树上一种只含有相同常量值的节点;
若所述内部表属于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的步骤之后,还包括:
若检测结果为否,则顺序将所述外部表的下一行数据作为所述当前行数据,并循环执行所述加载所述外部表的当前行数据至所述输出所述外部表该行的指定数据的步骤,直至所述外部表的所有行数据加载完成;
基于所述外部表的各行分别对应的所述指定数据,获取所述表连接结果。
5.根据权利要求2所述的NLJ改进表连接方法,其特征在于,所述进行语法解析的步骤具体包括:
基于所述语法树节点进行语法解析,获取所述语法树节点的记录信息,所述记录信息至少包括所有连接条件、连接条件的个数、连接类型、需要参与连接的数据;
相应的,基于所述记录信息,检测所述内部表和/或所述外部表是否属于Value-Node。
6.根据权利要求4所述的NLJ改进表连接方法,其特征在于,在所述加载所述外部表的当前行数据的步骤之前,还包括:判断所述外部表是否已加载完最后一行;
相应的,若未加载完所述最后一行,则继续加载所述外部表的当前行数据,否则确认所述外部表的所有行数据加载完成。
7.一种数据查询方法,其特征在于,包括:
解析用户SQL查询语句,生成语法树;
遍历所述语法树的所有语法树节点,循环利用如权利要求1-6中任一项所述的NLJ改进表连接方法,获取每个所述语法树节点对应的表连接结果;
基于各所述表连接结果,返回针对所述用户SQL查询语句的数据查询结果。
8.根据权利要求7所述的数据查询方法,其特征在于,在所述获取每个所述语法树节点对应的表连接结果的步骤之后,还包括:将所述表连接结果添加到查询结果集中;
相应的,在判断所述查询结果集满或者所有所述语法树节点的数据计算完成后,批量返回所述查询结果集的数据,生成所述数据查询结果。
9.一种电子设备,其特征在于,包括:至少一个存储器、至少一个处理器、通信接口和总线;
所述存储器、所述处理器和所述通信接口通过所述总线完成相互间的通信,所述通信接口还用于所述电子设备与表连接计算设备之间的信息传输;
所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1至6中任一项所述的NLJ改进表连接方法,或者如权利要求7或8所述的数据查询方法。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至6中任一项所述的NLJ改进表连接方法,或者如权利要求7或8所述的数据查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910183971.7A CN110008238B (zh) | 2019-03-12 | 2019-03-12 | Nlj改进表连接方法及基于该改进方法的数据查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910183971.7A CN110008238B (zh) | 2019-03-12 | 2019-03-12 | Nlj改进表连接方法及基于该改进方法的数据查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110008238A CN110008238A (zh) | 2019-07-12 |
CN110008238B true CN110008238B (zh) | 2021-04-27 |
Family
ID=67166892
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910183971.7A Active CN110008238B (zh) | 2019-03-12 | 2019-03-12 | Nlj改进表连接方法及基于该改进方法的数据查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110008238B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5548754A (en) * | 1995-02-07 | 1996-08-20 | International Business Machines Corporation | Optimization of SQL queries using early-out join transformations |
CN101984439A (zh) * | 2010-12-09 | 2011-03-09 | 上海市共进通信技术有限公司 | 基于子查询实现数据源xml查询系统优化的方法 |
CN102968420A (zh) * | 2011-08-31 | 2013-03-13 | 国际商业机器公司 | 数据库查询的方法和系统 |
CN103597472A (zh) * | 2011-06-07 | 2014-02-19 | 惠普开发有限公司 | 旁路信息传递 |
CN107273525A (zh) * | 2017-06-23 | 2017-10-20 | 上海携程商务有限公司 | 函数式查询方法及系统 |
CN108804554A (zh) * | 2018-05-22 | 2018-11-13 | 上海达梦数据库有限公司 | 一种数据库查询方法、装置、服务器和存储介质 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100535905C (zh) * | 2007-06-08 | 2009-09-02 | 北京神舟航天软件技术有限公司 | 去除sql查询语句恒条件的方法 |
CN101408900B (zh) * | 2008-11-24 | 2011-03-16 | 中国科学院地理科学与资源研究所 | 一种网格计算环境下的分布式空间数据查询优化方法 |
US8694525B2 (en) * | 2011-06-24 | 2014-04-08 | Sas Institute Inc. | Systems and methods for performing index joins using auto generative queries |
US10733186B2 (en) * | 2016-09-15 | 2020-08-04 | Oracle International Corporation | N-way hash join |
US11036736B2 (en) * | 2017-03-22 | 2021-06-15 | International Business Machines Corporation | Optimizing access plan for queries with a nested loop join |
CN108304505B (zh) * | 2018-01-18 | 2020-09-11 | 上海达梦数据库有限公司 | 一种sql语句的处理方法、装置、服务器及存储介质 |
CN109062949B (zh) * | 2018-06-21 | 2021-10-01 | 东南大学 | 一种提高在线聚集中多表连接查询效率的方法 |
CN108984698B (zh) * | 2018-07-05 | 2023-06-27 | 福建星瑞格软件有限公司 | 一种数据库业务行为的建模方法 |
-
2019
- 2019-03-12 CN CN201910183971.7A patent/CN110008238B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5548754A (en) * | 1995-02-07 | 1996-08-20 | International Business Machines Corporation | Optimization of SQL queries using early-out join transformations |
CN101984439A (zh) * | 2010-12-09 | 2011-03-09 | 上海市共进通信技术有限公司 | 基于子查询实现数据源xml查询系统优化的方法 |
CN103597472A (zh) * | 2011-06-07 | 2014-02-19 | 惠普开发有限公司 | 旁路信息传递 |
CN102968420A (zh) * | 2011-08-31 | 2013-03-13 | 国际商业机器公司 | 数据库查询的方法和系统 |
CN107273525A (zh) * | 2017-06-23 | 2017-10-20 | 上海携程商务有限公司 | 函数式查询方法及系统 |
CN108804554A (zh) * | 2018-05-22 | 2018-11-13 | 上海达梦数据库有限公司 | 一种数据库查询方法、装置、服务器和存储介质 |
Non-Patent Citations (2)
Title |
---|
Adaptively Reordering Joins during Query Execution;Quanzhong Li 等;《2007 IEEE 23rd International Conference on Data Engineering》;20070420;26-35 * |
面向OceanBase的分布式大表连接与优化;樊秋实;《中国优秀硕士学位论文全文数据库 信息科技辑》;20161015(第10期);I138-295 * |
Also Published As
Publication number | Publication date |
---|---|
CN110008238A (zh) | 2019-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112559554B (zh) | 一种查询语句优化方法及装置 | |
US11416464B2 (en) | Optimizing wide data-type storage and analysis of data in a column store database | |
US10509804B2 (en) | Method and apparatus for storing sparse graph data as multi-dimensional cluster | |
CN110795455B (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
US7895187B2 (en) | Hybrid evaluation of expressions in DBMS | |
US8417690B2 (en) | Automatically avoiding unconstrained cartesian product joins | |
CN108710662B (zh) | 语言转换方法和装置、存储介质、数据查询系统和方法 | |
US7606827B2 (en) | Query optimization using materialized views in database management systems | |
CN109791543B (zh) | 执行多表连接操作的控制方法及对应装置 | |
US9892159B2 (en) | Distance-based logical exploration in a relational database query optimizer | |
CN110543356A (zh) | 异常任务检测方法、装置、设备及计算机存储介质 | |
TWI686707B (zh) | 資料庫存取方法及裝置 | |
CN112579610A (zh) | 多数据源结构分析方法、系统、终端设备及存储介质 | |
CN112818181B (zh) | 图数据库检索方法、系统、计算机设备和存储介质 | |
US8417701B2 (en) | Generation of a categorization scheme | |
CN106484699B (zh) | 数据库查询字段的生成方法及装置 | |
CN112988782A (zh) | Hive支持交互式查询的方法、装置及存储介质 | |
CN116483850A (zh) | 数据处理方法、装置、设备以及介质 | |
CN116560984A (zh) | 一种基于调用依赖图的测试用例聚类分组方法 | |
CN110580170B (zh) | 软件性能风险的识别方法及装置 | |
CN110008238B (zh) | Nlj改进表连接方法及基于该改进方法的数据查询方法 | |
CN112612810A (zh) | 慢sql语句识别方法及系统 | |
CN116069808A (zh) | 数据库存储过程的依赖信息的确定方法、装置及电子设备 | |
CN115981996A (zh) | 一种测试数据生成方法、装置、设备及存储介质 | |
CN112307050B (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 |