CN109753520A - 半连接查询方法、装置、服务器及存储介质 - Google Patents
半连接查询方法、装置、服务器及存储介质 Download PDFInfo
- Publication number
- CN109753520A CN109753520A CN201910079781.0A CN201910079781A CN109753520A CN 109753520 A CN109753520 A CN 109753520A CN 201910079781 A CN201910079781 A CN 201910079781A CN 109753520 A CN109753520 A CN 109753520A
- Authority
- CN
- China
- Prior art keywords
- connection
- leaf node
- condition
- contact
- node
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种半连接查询方法、装置、服务器及存储介质。该方法包括:解析半连接查询语句,生成右节点的连接对应的执行计划树,半连接查询语句用于查询半连接的左节点和右节点,如果左节点与右节点的半连接方式为预设方式且对右节点的查询形式为预设形式,则根据执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和独立叶子节点集合对应的连接条件,根据独立叶子节点集合和独立叶子节点集合对应的连接条件查询半连接的左节点和右节点,得到查询结果。上述技术方案,通过确定独立叶子节点集合,在右节点的独立叶子节点集合中查找与左节点的匹配记录,无需对右节点进行计算,提高了半连接的查询效率。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种半连接查询方法、装置、服务器及存储介质。
背景技术
半连接是数据库连接的一种,如数据表A与数据表B进行半连接,当数据表A中的一条记录在数据表B中找到匹配记录时,返回数据表A的记录,不返回数据表B的记录,即使在数据表B中找到多条匹配记录,也只返回数据表A中该条记录一次,其中,数据表A称为半连接的左节点,数据表B称为半连接的右节点。半连接在结构化查询语言(Structured QueryLanguage,SQL)中通常使用关键字IN或EXISTS作为连接条件,如SQL语句SELECT A.C1,A.C2FROM A WHERE A.C1IN(SELECT B.D1FROM B)就是一个半连接。
半连接的右节点不仅可以是一张表,还可以是一个连接,如SQL语句SELECT A.C1,A.C2FROM A WHERE A.C1IN(SELECT B.D1FROM B,C WEHRE B.D2=C.E1)是一个右节点为连接的半连接,其中,右节点为数据表B与数据表C的连接结果。对于这种情况,现有技术采用的处理方法为:先进行右节点的连接计算,再与左节点进行半连接。
当右节点的连接数量很多,先计算右节点,再在右节点的计算结果中查找与左节点的匹配记录,计算量非常大,查询的效率非常低。另外,如果对于右节点中连接的计算本身就非常复杂,那么计算过程也是查询的瓶颈。
发明内容
本发明实施例提供一种半连接查询方法、装置、服务器及存储介质,提高半连接的查询效率。
第一方面,本发明实施例提供一种半连接查询方法,包括:
解析半连接查询语句,生成右节点的连接对应的执行计划树,所述半连接查询语句用于查询半连接的左节点和右节点;
如果所述左节点与右节点的半连接方式为预设方式且对所述右节点的查询形式为预设形式,则根据所述执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和所述独立叶子节点集合对应的连接条件;
根据所述独立叶子节点集合和所述独立叶子节点集合对应的连接条件查询半连接的左节点和右节点,得到查询结果。
进一步的,所述根据所述执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和所述独立叶子节点集合对应的连接条件,包括:
遍历所述执行计划树,获取所述执行计划树中内连接的叶子节点和连接条件;
不同连接条件的叶子节点之间有重合的叶子节点,则将该不同连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该不同连接条件为该独立叶子节点集合对应的连接条件;
单个连接条件与其他连接条件的叶子节点之间无重合的叶子节点,则将该单个连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该单个连接条件为该独立叶子节点集合对应的连接条件。
进一步的,所述独立叶子节点集合还满足如下条件:
同一独立叶子节点集合中的叶子节点彼此关联,不同独立叶子节点集合中的叶子节点彼此无关。
进一步的,所述左节点与右节点的半连接方式为预设方式,包括:
所述左节点与右节点的半连接方式为IN连接方式或者EXISTS连接方式。
进一步的,所述右节点的查询形式为预设形式,包括:
所述右节点的查询形式为SELECT…FROM…WHERE形式。
第二方面,本发明实施例还提供一种半连接查询装置,包括:
解析模块,用于解析半连接查询语句,生成右节点的连接对应的执行计划树,所述半连接查询语句用于查询半连接的左节点和右节点;
确定模块,用于如果所述左节点与右节点的半连接方式为预设方式且对所述右节点的查询形式为预设形式,则根据所述执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和所述独立叶子节点集合对应的连接条件;
查询模块,用于根据所述独立叶子节点集合和所述独立叶子节点集合对应的连接条件查询半连接的左节点和右节点,得到查询结果。
进一步的,所述确定模块,包括:
遍历单元,用于遍历所述执行计划树,获取所述执行计划树中内连接的叶子节点和连接条件;
第一存储单元,用于不同连接条件的叶子节点之间有重合的叶子节点,则将该不同连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该不同连接条件为该独立叶子节点集合对应的连接条件;
第二存储单元,用于单个连接条件与其他连接条件的叶子节点之间无重合的叶子节点,则将该单个连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该单个连接条件为该独立叶子节点集合对应的连接条件。
进一步的,所述独立叶子节点集合还满足如下条件:
同一独立叶子节点集合中的叶子节点彼此关联,不同独立叶子节点集合中的叶子节点彼此无关。
第三方面,本发明实施例还提供一种服务器,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的半连接查询方法。
第四方面,本发明实施例还提供一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的半连接查询方法。
本发明实施例提供一种半连接查询方法、装置、服务器及存储介质,通过解析半连接查询语句,生成右节点的执行计划树,所述半连接查询语句用于查询半连接的左节点和右节点,如果所述左节点与右节点的半连接方式为预设方式且对所述右节点的查询形式为预设形式,则根据所述执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和所述独立叶子节点集合对应的连接条件,根据所述独立叶子节点集合和所述独立叶子节点集合对应的连接条件查询半连接的左节点和右节点,得到查询结果,与现有技术中先计算右节点,再在右节点的计算结果中查找与左节点的匹配记录相比,采用本发明实施例的技术方案,通过确定独立叶子节点集合,在右节点的独立叶子节点集合中查找与左节点的匹配记录,无需对右节点进行计算,提高了半连接的查询效率。
附图说明
图1为本发明实施例一提供的一种半连接查询方法的流程图;
图2为本发明实施例一提供的一种执行计划树的示意图;
图3为本发明实施例一提供的另一种执行计划树的示意图;
图4为本发明实施例二提供的一种半连接查询方法的流程图;
图5为本发明实施例三提供的一种半连接查询装置的结构图;
图6为本发明实施例四提供的一种服务器的结构图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种半连接查询方法的流程图,本实施例可适用于查询半连接的左节点和右节点以获取查询结果的情况,该方法可以由半连接查询装置来执行,该装置可以由软件和/或硬件的方式来实现,该装置集成在服务器中,具体的,该方法包括如下步骤:
S110、解析半连接查询语句,生成右节点的连接对应的执行计划树,所述半连接查询语句用于查询半连接的左节点和右节点。
半连接的右节点可以是一张数据表,也可以是一个连接,当右节点为一张数据表时,对应的半连接查询语句可以是形如SELECT A.C1,A.C2FROM AWHERE A.C1IN(SELECTB.D1FROM B)的这种形式,其中,数据表A为半连接的左节点,数据表B为半连接的右节点,当右节点为连接时,对应的半连接查询语句可以是形如SELECT A.C1,A.C2FROM A WHEREA.C1IN(SELECT B.D1FROM B,C WEHRE B.D2=C.E1)的这种形式,此时,右节点为数据表B和数据表C的连接结果。
执行计划树是根据右节点的连接生成的,执行计划树包括参与连接的表节点和连接节点,连接节点上保存了连接对应的连接条件,例如内连接、左连接和右连接等,当然也可以为空。示例性的,参考图2,图2为本发明实施例一提供的一种执行计划树的示意图,其中,Cross1和Cross2为内连接的连接节点,Left为左连接的连接节点,该执行计划树表示数据表B与数据表D进行内连接,然后数据表B与数据表D的连接结果与数据表A进行左连接,之后再与数据表C进行内连接,代表左连接的连接节点Left和代表内连接的Cross节点上都保存了连接对应的连接条件。
S120、所述左节点与右节点的半连接方式是否为预设方式且对所述右节点的查询形式为预设形式,如果是,执行S130,否则,执行S150。
半连接通常以关键字IN或EXISTS表示,如果SQL语句中出现IN或EXISTS,则表示对左节点和右节点执行半连接,实施例中设定左节点与右节点的半连接方式为IN连接方式或者EXISTS连接方式。
需要说明的是,当右节点是一张数据表时,可以直接根据半连接查询语句获取查询结果,当右节点为连接时,根据半连接的执行过程,需要对左节点中的每一条记录都遍历一次右节点以查找匹配记录,当右节点的连接结果规模较大时,导致查询效率降低。为此,当左节点与右节点的半连接方式为预设的IN连接方式或者EXISTS连接方式以及对右节点的查询形式为预设形式时,执行S130,以提高半连接的查询效率,其中,对右节点的查询形式为SELECT…FROM…WHERE形式,例如SELECT B.D1FROM B,C WEHRE B.D2=C.E1,当右节点为该形式的连接查询时,表明当前半连接是一个右节点为连接的半连接,还需要说明的是,上述查询形式中不能嵌套其他子语句,如GROUP BY或HAVING等子语句。
S130、根据所述执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和所述独立叶子节点集合对应的连接条件。
按照先根遍历原则遍历所述执行计划树。具体的,在遍历执行计划树时,如果遇到的连接节点为内连接的连接节点,则按照先左后右的顺序先遍历当前连接节点的左子节点,如果遍历过程中遇到不是内连接的连接节点,则将其视为叶子节点,并停止遍历该连接节点的左子节点和右子节点,然后返回该连接节点的上一节点,继续遍历上一节点对应的右子节点,直至执行计划树遍历结束。
示例性的,参考图2,按照先根遍历原则,从执行计划树的根部开始,按照由上到下,由左到右的顺序遍历,首先遇到连接节点Cross1,连接节点Cross1为内连接的连接节点,则继续遍历,遇到左连接的连接节点Left,因为连接节点Left不是内连接的连接节点,则将连接节点Left视为叶子节点,并停止遍历连接节点Left的左子节点和右子节点,然后返回连接节点Cross1,继续遍历连接节点Cross1的右子节点即数据表C,数据表C不是内连接的连接节点,则将数据表C视为叶子节点,此时,执行计划树遍历结束,最终得到的叶子节点即为连接节点Left和数据表C,连接条件为连接节点Cross1上的连接条件。
再如,参考图3,图3为本发明实施例一提供的另一种执行计划树的示意图,遍历过程中首先遇到内连接的连接节点Cross1,继续遍历其左子节点,遇到连接节点Cross2,继续遍历该连接节点的左子节点即数据表A,数据表A不是内连接的连接节点,将其视为叶子节点,同时,返回连接节点Cross2,继续遍历连接节点Cross2的右子节点即连接节点Cross3,继续遍历该节点的左子节点即数据表B,数据表B不是内连接的连接节点,则将数据表B视为叶子节点,并返回连接节点Cross3,继续遍历其右子节点即数据表D,数据表D也不是内连接的连接节点,将数据表D视为叶子节点,并返回至连接节点Cross3,由于连接节点Cross3是连接节点Cross2的右子节点,则继续返回,并最终返回至连接节点Cross1,继续遍历连接节点Cross1的右子节点即数据表C,并将数据表C视为叶子节点,此时,执行计划树遍历结束,最终得到的叶子节点为数据表A、数据表B、数据表D和数据表C,连接条件为Cross1、Cross2和Cross3上的连接条件。
独立叶子节点集合是一个统称,包含多个独立叶子节点子集合。为了简化右节点的连接计算过程,提高半连接的查询效率,当左节点与右节点的半连接方式为预设的IN连接方式或者EXISTS连接方式且对右节点的查询形式为SELECT…FROM…WHERE形式时,根据内连接的叶子节点和连接条件确定独立的叶子节点集合和独立叶子节点集合对应的连接条件,以将右节点的连接转化为多个半连接,其中,确定独立叶子节点集合的方式可以根据实际需要设置。例如可以依据设定的转化规则,将满足设定条件的叶子节点存储至一个叶子节点集合,不满足设定条件的叶子节点分别存储至其他的叶子节点集合,各个叶子节点集合互相独立,即可得到独立叶子节点集合,其中,转化规则和连接条件可以根据实际需要设计。
S140、根据所述独立叶子节点集合和所述独立叶子节点集合对应的连接条件查询半连接的左节点和右节点,得到查询结果。
具体的,将获得的每一个独立叶子节点集合转换为一个子查询,如果该独立叶子节点集合对应的连接条件不为空,则将该连接条件放在对应子查询的WHERE条件中,即可将右节点的连接转化为多个半连接。
示例性的,假定原始的半连接查询语句为:SELECT…FROM…WHERE E1 IN(SELECTE2 FROM D,E,H,F,C,G WHERE E2=D2 AND F2+C1=G2 D1>E3 AND H2>D2 AND D2=F2+C1),最终确定的独立叶子节点集合分别为(D,E,H)、(F,C)和(G),对应的连接条件分别为(D1>E3AND H2>D2 AND D2 IS NULL)、(F2+C1 IS NULL)和(G2 IS NULL),则转换后的半连接查询语句为:SELECT…FROM…WHERE E1 IN(SELECT D2 FROM D,E,H WHERE D1>E3 ANDH2>D2)AND E1 IN(SELECT F2+C1 FROM F,C)AND E1 IN(SELECT G2 FROM G)。根据转换后的半连接查询语句查询半连接的左节点和右节点,可以简化计算量,提高查询效率,节省查询时间。
S150、计算所述右节点的连接后,在计算结果中查找与左节点的匹配记录,得到查询结果。
如果左节点与右节点的半连接方式和对右节点的查询形式这两个条件有一个不满足设定形式,则先计算右节点的连接,再在右节点的计算结果中查找与左节点的匹配记录,得到查询结果,实施例对这种查询方式的具体过程不进行限定。
本发明实施例一提供一种半连接查询方法,通过解析半连接查询语句,生成右节点的执行计划树,所述半连接查询语句用于查询半连接的左节点和右节点,如果所述左节点与右节点的半连接方式为预设方式且对所述右节点的查询形式为预设形式,则根据所述执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和所述独立叶子节点集合对应的连接条件,根据所述独立叶子节点集合和所述独立叶子节点集合对应的连接条件查询半连接的左节点和右节点,得到查询结果,与现有技术中先计算右节点,再在右节点的计算结果中查找与左节点的匹配记录相比,采用本发明实施例一的技术方案,通过确定独立叶子节点集合,在右节点的独立叶子节点集合中查找与左节点的匹配记录,无需对右节点进行计算,提高了半连接的查询效率。
实施例二
图4为本发明实施例二提供的一种半连接查询方法的流程图,在上述实施例的基础上进行具体化,具体的,该方法包括如下步骤:
S210、解析半连接查询语句,生成右节点的连接对应的执行计划树,所述半连接查询语句用于查询半连接的左节点和右节点。
S220、所述左节点与右节点的半连接方式是否为预设方式且对所述右节点的查询形式为预设形式,如果是,执行S230,否则,执行S270。
S230、遍历所述执行计划树,获取所述执行计划树中内连接的叶子节点和连接条件。
遍历过程中,将遍历到的叶子节点存储至叶子节点链表中,连接条件存储至连接条件链表中,以便后续的使用。
假定半连接的形式为E1IN(SELECT E2 FROM xx Cross yy ON filter WHERE…),其中,filter表示连接条件,半连接右节点的查询项为E2。首先初始化一个exp链表,将查询项E2存储至该exp链表,遍历连接条件链表,获取一个连接条件,如果该连接条件满足设定的等值过滤条件形式,如e_1=e_r,且e_1或e_r与exp链表中已有的表达式E2相同,则将该连接条件从连接条件链表中移出,同时将与exp链表中已有的表达式E2不相同的e_r或e_1加入exp链表。为了保证exp链表涉及到的叶子节点在一个集合中,还需要为新加入exp链表的e_r或e_1构造一个新的连接条件,即exp IS NULL,重新遍历连接条件链表,如果遍历过程中,连接条件不满足上述形式,则重新遍历连接条件链表,获取下一个连接条件。
示例性的,设定查询项为E2和连接条件链表的内容为(E2=D2,F2+C1=G2,D1>E3,H2>D2,D2=F2+C1)。exp链表的内容为(E2),遍历连接条件链表,对于连接条件E2=D2,满足等值过滤条件形式,且E2与exp链表中的表达式相同,则将D2加入exp链表,连接条件E2=D2移出该连接条件链表,此时,exp链表的内容为(E2,D2),同时,生成一个新的连接条件D2ISNULL,加入上述连接条件链表,此时连接条件链表的内容为(F2+C1=G2,D1>E3,H2>D2,D2=F2+C1,D2IS NULL)。
重新遍历上述连接条件链表,获取连接条件F2+C1=G2,虽然该连接条件满足等值过滤条件形式,但F2+C1和G2都不在exp链表中,则获取下一个连接条件。先后获取连接条件D1>E3和连接条件H2>D2,由于不满足等值过滤出条件形式,则继续获取下一个连接条件D2=F2+C1,该连接条件满足等值过滤出条件形式,且D2在exp链表中,则将F2+C1加入exp链表,此时exp链表的内容为(E2,D2,F2+C1),将连接条件D2=F2+C1从上述连接条件链表移出,并生成一个新的连接条件F2+C1IS NULL加入该连接条件链表,此时,连接条件链表的内容为(F2+C1=G2,D1>E3,H2>D2,D2 IS NULL,F2+C1 IS NULL)。
重新遍历连接条件链表,得到连接条件F2+C1=G2,处理过程和上述类似,最终得到exp链表的内容为(E2,D2,F2+C1,G2),连接条件链表的内容为(D1>E3,H2>D2,D2 ISNULL,F2+C1 IS NULL,G2 IS NULL),重新遍历上述连接条件链表,都没有满足条件的,遍历结束。
S240、不同连接条件的叶子节点之间有重合的叶子节点,则将该不同连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该不同连接条件为该独立叶子节点集合对应的连接条件。
具体的,以连接条件1和连接条件2为例,如果连接条件2涉及到的叶子节点与连接条件1涉及到的叶子节点有重合,则将连接条件1和连接条件2涉及的全部叶子节点存储至一个独立叶子节点集合,连接条件1和连接条件2为该独立叶子节点集合对应的连接条件。
需要说明的是,连接条件中列表达式中的列属于某个表或视图,该表或视图存在于右节点的执行计划中,即根据该表或者视图的信息在叶子节点链表中会找到一个叶子节点,例如连接条件B.b1=C.c1,列表达式为b1和c1,分别隶属于数据表B和数据表C,参考图2,则涉及的叶子节点为Left和数据表C,参考图3,则涉及的叶子节点为数据表B和数据表C。
进一步的,根据上述得到的连接条件链表,确定独立叶子节点集合。示例性的,在连接条件链表中随机获取一个连接条件,将该连接条件涉及到的叶子节点存储至一个初始为空的第一叶子节点集合,并将该连接条件从连接条件链表移出,加入一个新初始化的链表,如第一链表。可以理解的是,连接条件链表中存储的连接条件包括原始的连接条件和新构造的连接条件,为了便于确认当前连接条件是否为新构造的连接条件,可以为新构造的连接条件添加预设标记,如果连接条件中存在预设标记,则表明该连接条件为新构造的连接条件,以便快速准确的确定根据原始的连接条件确定右节点的形式。可选的,可以根据连接条件链表中的第一个连接条件构造第一叶子节点集合。
遍历连接条件链表,获取一个连接条件,如果该连接条件有涉及的叶子节点在第一叶子节点集合中,则将该连接条件涉及到的其他叶子节点也放入第一叶子节点集合中,并将该连接条件从连接条件链表中移出,加入第一链表,继续获取下一个连接条件。如果该连接条件没有涉及的叶子节点在第一叶子节点集合中,则继续获取下一连接条件,连接条件链表遍历结束后,得到一个独立的叶子节点集合和对应的链表。如果遍历结束后,当前连接条件链表不为空,则重新在连接条件链表中随机获取一个连接条件,将其涉及到的叶子节点放入第二叶子节点集合,并继续后续的遍历过程,直至得到的连接条件链表为空。
需要说明的是,第一叶子节点集合和第二叶子节点集合只是一个示例,实际应用过程中,可能还存在第三叶子节点集合、第四叶子节点集合等情况,其中,第一叶子节点集合、第二叶子节点集合、第三叶子节点集合和第四叶子节点集合为独立叶子节点集合。
示例性的,接前面的例子,连接条件链表的内容为(D1>E3,H2>D2,D2 IS NULL,F2+C1 IS NULL,G2 IS NULL),获取一个连接条件D1>E3,涉及的叶子节点D和E放入第一叶子节点集合(D,E),并将连接条件D1>E3从该连接条件链表移出,加入第一链表为(D1>E3),此时,连接条件链表的内容为(H2>D2,D2 IS NULL,F2+C1 IS NULL,G2 IS NULL)。继续遍历该连接条件链表,得到连接条件H2>D2,涉及的叶子节点为H和D,D在第一叶子节点集合中,因此,将叶子节点H也放入第一叶子节点集合,此时,第一叶子节点集合位(D,E,H),将连接条件H2>D2从上述连接条件链表移出,加入第一链表,此时第一链表为(D1>E3,H2>D2),连接条件链表的内容为(D2 IS NULL,F2+C1 IS NULL,G2 IS NULL)。
继续遍历上述连接条件链表,得到连接条件D2 IS NULL,涉及的叶子节点为D,在第一叶子节点集合中,没有新的叶子节点需要放入第一叶子节点集合,将连接条件D2 ISNULL移出,放入第一链表,此时,第一链表为(D1>E3,H2>D2,D2 IS NULL),连接条件链表的内容为(F2+C1 IS NULL,G2 IS NULL)。继续遍历该连接条件链表,得到连接条件F2+C1 ISNULL,没有涉及的叶子节点在第一叶子节点集合中,继续获取下一个连接条件G2 IS NULL,没有涉及的叶子节点在第一叶子节点集合中,此时,连接条件链表遍历完成,得到第一叶子节点集合(D,E,H)和第一链表(D1>E3,H2>D2,D2 IS NULL)。
由于遍历结束后,连接条件链表(F2+C1 IS NULL,G2 IS NULL)不为空,则重新开始,构建第二叶子节点集合,此时得到第二叶子节点集合(F,C)和第二链表(F2+C1 ISNULL),连接条件链表的内容为(G2 IS NULL),继续获取下一个连接条件G2 IS NULL,没有涉及的叶子节点在第二叶子节点集合,此时遍历结束,得到第二叶子节点集合(F,C)和第二链表(F2+C1 IS NULL)。由于连接条件链表(G2 IS NULL)不为空,则重新开始,得到第三叶子节点集合(G)和第三链表(G2 IS NULL),此时连接条件链表为空,遍历结束。
最终得到第一叶子节点集合和对应的第一链表,第二叶子节点集合和对应的第二链表,第三叶子节点集合和对应的第三链表,其中,第一叶子节点集合、第二叶子节点集合和第三叶子节点集合为独立叶子节点集合,同一独立叶子节点集合中的叶子节点彼此关联,不同独立叶子节点集合中的叶子节点彼此无关。
S250、单个连接条件与其他连接条件的叶子节点之间无重合的叶子节点,则将该单个连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该单个连接条件为该独立叶子节点集合对应的连接条件。
该过程在前面已经介绍过,此处不再赘述,具体可以参考上面的描述。需要说明的是,S240和S250虽然都有独立叶子节点集合,但两者并非是同一个独立叶子节点集合,独立叶子节点集合只是一个统称,可以包含多个独立叶子节点子集合,例如前面所述的第一叶子节点集合、第二叶子节点集合和第三叶子节点集合。
S260、根据所述独立叶子节点集合和所述独立叶子节点集合对应的连接条件查询半连接的左节点和右节点,得到查询结果。
具体的,将第一叶子节点集合、第二叶子节点集合和第三叶子节点集合分别转换为一个子查询,其中,查询项为exp IS NULL中的exp,如果独立叶子节点集合对应的条件链表不为空,则将其放在对应子查询的WHERE条件中。以第一叶子节点集合和第一链表为例,查询项为D2,第一链表中的连接条件D1>E3和连接条件H2>D2不为空,则第一叶子节点集合和第一链表对应的子查询为:SELECT D2 FROM D,E,H WHERE D1>E3 AND H2>D2,类似的,第二叶子节点集合和第二链表对应的子查询为:SELECT F2+C1 FROM F,C,第三叶子节点集合和第三链表对应的子查询为:SELECT G2 FROM G,最终右节点即可转化为:E1IN(SELECT D2FROM D,E,H WHERE D1>E3 AND H2>D2)AND E1 IN(SELECT F2+C1 FROM F,C)AND E1 IN(SELECT G2 FROM G),通过在右节点的独立叶子节点集合中查找与左节点的匹配记录,无需对右节点进行计算,提高了半连接的查询效率。
S270、计算所述右节点的连接后,在计算结果中查找与左节点的匹配记录,得到查询结果。
本发明实施例二提供一种半连接查询方法,在上述实施例的基础上,如果不同连接条件的叶子节点之间有重合的叶子节点,则将该不同连接条件的全部叶子节点存储至对应的独立叶子节点集合中,单个连接条件与其他连接条件的叶子节点之间无重合的叶子节点,则将该单个连接条件的全部叶子节点存储至对应的独立叶子节点集合中,由此将半连接右节点的连接转换为多个半连接,提高了半连接的查询效率,节省了查询时间。
实施例三
图5为本发明实施例三提供的一种半连接查询装置的结构图,该装置可以执行上述任意实施例所述的半连接查询方法,具体的,该装置包括:
解析模块310,用于解析半连接查询语句,生成右节点的连接对应的执行计划树,所述半连接查询语句用于查询半连接的左节点和右节点;
确定模块320,用于如果所述左节点与右节点的半连接方式为预设方式且对所述右节点的查询形式为预设形式,则根据所述执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和所述独立叶子节点集合对应的连接条件;
查询模块330,用于根据所述独立叶子节点集合和所述独立叶子节点集合对应的连接条件查询半连接的左节点和右节点,得到查询结果。
本发明实施例三提供一种半连接查询装置,通过解析半连接查询语句,生成右节点的执行计划树,所述半连接查询语句用于查询半连接的左节点和右节点,如果所述左节点与右节点的半连接方式为预设方式且对所述右节点的查询形式为预设形式,则根据所述执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和所述独立叶子节点集合对应的连接条件,根据所述独立叶子节点集合和所述独立叶子节点集合对应的连接条件查询半连接的左节点和右节点,得到查询结果,与现有技术中先计算右节点,再在右节点的计算结果中查找与左节点的匹配记录相比,采用本发明实施例的技术方案,通过确定独立叶子节点集合,在右节点的独立叶子节点集合中查找与左节点的匹配记录,无需对右节点进行计算,提高了半连接的查询效率。
在上述实施例的基础上,确定模块320,包括:
遍历单元,用于遍历所述执行计划树,获取所述执行计划树中内连接的叶子节点和连接条件;
第一存储单元,用于不同连接条件的叶子节点之间有重合的叶子节点,则将该不同连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该不同连接条件为该独立叶子节点集合对应的连接条件;
第二存储单元,用于单个连接条件与其他连接条件的叶子节点之间无重合的叶子节点,则将该单个连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该单个连接条件为该独立叶子节点集合对应的连接条件。
在上述实施例的基础上,所述独立叶子节点集合还满足如下条件:
同一独立叶子节点集合中的叶子节点彼此关联,不同独立叶子节点集合中的叶子节点彼此无关。
在上述实施例的基础上,所述左节点与右节点的半连接方式为预设方式,包括:
所述左节点与右节点的半连接方式为IN连接方式或者EXISTS连接方式。
在上述实施例的基础上,所述右节点的查询形式为预设形式,包括:
所述右节点的查询形式为SELECT…FROM…WHERE形式。
本发明实施例提供的半连接查询装置可以用于执行上述任意实施例提供的半连接查询方法,具备相应的功能和有益效果。
实施例四
图6为本发明实施例四提供的一种服务器的结构图,具体的,参考图6,该服务器包括:处理器410、存储器420、输入装置430和输出装置440,服务器中处理器410的数量可以是一个或多个,图6中以一个处理器410为例,服务器中的处理器410、存储器420、输入装置430和输出装置440可以通过总线或其他方式连接,图6中以通过总线连接为例。
存储器420作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的半连接查询方法对应的程序指令/模块。处理器410通过运行存储在存储器420中的软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述实施例的半连接查询方法。
存储器420主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器420可进一步包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至服务器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置430可用于接收输入的数字或字符信息,以及产生与服务器的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备、扬声器以及蜂鸣器等音频设备。
本发明实施例提供的服务器与上述实施例提供的半连接查询方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述实施例,并且本实施例具备执行半连接查询方法相同的有益效果。
实施例五
本发明实施例五还提供一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所述的半连接查询方法。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的半连接查询方法中的操作,还可以执行本发明任意实施例所提供的半连接查询方法中的相关操作,且具备相应的功能和有益效果。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是机器人,个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的半连接查询方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种半连接查询方法,其特征在于,包括:
解析半连接查询语句,生成右节点的连接对应的执行计划树,所述半连接查询语句用于查询半连接的左节点和右节点;
如果所述左节点与右节点的半连接方式为预设方式且对所述右节点的查询形式为预设形式,则根据所述执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和所述独立叶子节点集合对应的连接条件;
根据所述独立叶子节点集合和所述独立叶子节点集合对应的连接条件查询半连接的左节点和右节点,得到查询结果。
2.根据权利要求1所述的半连接查询方法,其特征在于,所述根据所述执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和所述独立叶子节点集合对应的连接条件,包括:
遍历所述执行计划树,获取所述执行计划树中内连接的叶子节点和连接条件;
不同连接条件的叶子节点之间有重合的叶子节点,则将该不同连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该不同连接条件为该独立叶子节点集合对应的连接条件;
单个连接条件与其他连接条件的叶子节点之间无重合的叶子节点,则将该单个连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该单个连接条件为该独立叶子节点集合对应的连接条件。
3.根据权利要求2所述的半连接查询方法,其特征在于,所述独立叶子节点集合还满足如下条件:
同一独立叶子节点集合中的叶子节点彼此关联,不同独立叶子节点集合中的叶子节点彼此无关。
4.根据权利要求1所述的半连接查询方法,其特征在于,所述左节点与右节点的半连接方式为预设方式,包括:
所述左节点与右节点的半连接方式为IN连接方式或者EXISTS连接方式。
5.根据权利要求1所述的半连接查询方法,其特征在于,所述右节点的查询形式为预设形式,包括:
所述右节点的查询形式为SELECT…FROM…WHERE形式。
6.一种半连接查询装置,其特征在于,包括:
解析模块,用于解析半连接查询语句,生成右节点的连接对应的执行计划树,所述半连接查询语句用于查询半连接的左节点和右节点;
确定模块,用于如果所述左节点与右节点的半连接方式为预设方式且对所述右节点的查询形式为预设形式,则根据所述执行计划树中内连接的叶子节点和连接条件,确定独立叶子节点集合和所述独立叶子节点集合对应的连接条件;
查询模块,用于根据所述独立叶子节点集合和所述独立叶子节点集合对应的连接条件查询半连接的左节点和右节点,得到查询结果。
7.根据权利要求6所述的半连接查询装置,其特征在于,所述确定模块,包括:
遍历单元,用于遍历所述执行计划树,获取所述执行计划树中内连接的叶子节点和连接条件;
第一存储单元,用于不同连接条件的叶子节点之间有重合的叶子节点,则将该不同连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该不同连接条件为该独立叶子节点集合对应的连接条件;
第二存储单元,用于单个连接条件与其他连接条件的叶子节点之间无重合的叶子节点,则将该单个连接条件的全部叶子节点存储至对应的独立叶子节点集合中,该单个连接条件为该独立叶子节点集合对应的连接条件。
8.根据权利要求7所述的半连接查询装置,其特征在于,所述独立叶子节点集合还满足如下条件:
同一独立叶子节点集合中的叶子节点彼此关联,不同独立叶子节点集合中的叶子节点彼此无关。
9.一种服务器,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一项所述的半连接查询方法。
10.一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一项所述的半连接查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910079781.0A CN109753520B (zh) | 2019-01-28 | 2019-01-28 | 半连接查询方法、装置、服务器及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910079781.0A CN109753520B (zh) | 2019-01-28 | 2019-01-28 | 半连接查询方法、装置、服务器及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109753520A true CN109753520A (zh) | 2019-05-14 |
CN109753520B CN109753520B (zh) | 2021-01-26 |
Family
ID=66406366
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910079781.0A Active CN109753520B (zh) | 2019-01-28 | 2019-01-28 | 半连接查询方法、装置、服务器及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109753520B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905591A (zh) * | 2021-02-04 | 2021-06-04 | 成都信息工程大学 | 一种基于机器学习的数据表连接顺序选择方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090240675A1 (en) * | 2008-03-24 | 2009-09-24 | Fujitsu Limited | Query translation method and search device |
CN103729392A (zh) * | 2012-10-10 | 2014-04-16 | 株式会社特博睿 | 查询优化方法及查询编译器 |
CN106547796A (zh) * | 2015-09-23 | 2017-03-29 | 南京中兴新软件有限责任公司 | 数据库的执行方法及装置 |
CN108804554A (zh) * | 2018-05-22 | 2018-11-13 | 上海达梦数据库有限公司 | 一种数据库查询方法、装置、服务器和存储介质 |
-
2019
- 2019-01-28 CN CN201910079781.0A patent/CN109753520B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090240675A1 (en) * | 2008-03-24 | 2009-09-24 | Fujitsu Limited | Query translation method and search device |
CN103729392A (zh) * | 2012-10-10 | 2014-04-16 | 株式会社特博睿 | 查询优化方法及查询编译器 |
CN106547796A (zh) * | 2015-09-23 | 2017-03-29 | 南京中兴新软件有限责任公司 | 数据库的执行方法及装置 |
CN108804554A (zh) * | 2018-05-22 | 2018-11-13 | 上海达梦数据库有限公司 | 一种数据库查询方法、装置、服务器和存储介质 |
Non-Patent Citations (2)
Title |
---|
杨旭超: "基于半连接的分布式数据库查询优化算法探讨", 《计算机时代》 * |
毛思语等: "面向分布式数据库的相关子查询优化策略", 《华东师范大学学报(自然科学版)》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905591A (zh) * | 2021-02-04 | 2021-06-04 | 成都信息工程大学 | 一种基于机器学习的数据表连接顺序选择方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109753520B (zh) | 2021-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7451136B2 (en) | System and method for searching multiple disparate search engines | |
CN109308300B (zh) | 一种逻辑运算的处理方法、装置、转换插件及存储介质 | |
US8423547B2 (en) | Efficient query clustering using multi-partite graphs | |
KR101713694B1 (ko) | 이중 언어 코퍼스의 데이터를 확충하는 방법, 장치 및 장치 및 저장 매체 | |
CN108681603B (zh) | 数据库中快速搜索树形结构数据的方法、存储介质 | |
CN105224554A (zh) | 推荐搜索词进行搜索的方法、系统、服务器和智能终端 | |
CN104462260A (zh) | 一种基于k-核的社区搜索算法 | |
CN111177303B (zh) | 基于phoenix的Hbase二级全文索引方法及系统 | |
EP3251030B1 (en) | Workload aware data placement for join-based query processing in a cluster | |
CN112818181B (zh) | 图数据库检索方法、系统、计算机设备和存储介质 | |
CN108804554A (zh) | 一种数据库查询方法、装置、服务器和存储介质 | |
CN113836163A (zh) | 数据的关联查询方法、装置、设备及存储介质 | |
CN104462429A (zh) | 数据库查询语句的生成方法及装置 | |
CN114398371A (zh) | 数据库集群系统多副本分片方法、装置、设备及存储介质 | |
CN112732752A (zh) | 一种查询语句优化方法、装置、设备和存储介质 | |
CN108549688A (zh) | 一种数据操作的优化方法、装置、设备和存储介质 | |
CN108460084A (zh) | 企业信息模糊查询方法及系统、计算机设备和存储介质 | |
CN109753520A (zh) | 半连接查询方法、装置、服务器及存储介质 | |
CN109992630B (zh) | 数据模型匹配方法和装置 | |
CN109710643A (zh) | 外连接管理方法、装置、服务器及存储介质 | |
CN110162574A (zh) | 数据重分布方式的确定方法、装置、服务器及存储介质 | |
CN103891244B (zh) | 一种进行数据存储和检索的方法及装置 | |
CN111737425A (zh) | 一种应答方法、装置、服务器及存储介质 | |
US9646094B2 (en) | System and method for performing a multiple pass search | |
US20240176833A1 (en) | Internet recommendation method, system and apparatus, and computer readable storage medium |
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 |