System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种在数据库中消除左外连接右表项的方法和系统技术方案_技高网

一种在数据库中消除左外连接右表项的方法和系统技术方案

技术编号:43347692 阅读:7 留言:0更新日期:2024-11-15 20:46
本发明专利技术涉及数据库技术领域,提供一种在数据库中消除左外连接右表项的方法和系统,包括:判断当前SQL语句对应的查询树是否存在distinct标记,如果当前SQL语句对应的查询树存在distinct标记,检测当前SQL语句是否引用不稳定表达式;如果当前SQL语句没有引用不稳定表达式,遍历当前SQL语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,当外连接节点符合消除条件,消除与外连接节点对应的左外连接右表项;在每次消除外连接节点对应的左外连接右表项后,重新遍历当前SQL语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,根据判断结果执行左外连接右表项的消除。本发明专利技术可以消除左外连接无用的右表项,提高执行效率。

【技术实现步骤摘要】

本专利技术涉及数据库,尤其涉及一种在数据库中消除左外连接右表项的方法和系统


技术介绍

1、数据库在生成连接路径时,需要考虑所有的表之间的连接路径,如果能消除掉其中的一些表,能够减少扫描的物理表,减少io操作,从而提高查询优化的运行效率。当下很多数据库支持部分消除左外连中无用右表项的优化技术,但是只限于连接条件的右表项为单表,且连接条件中内表的列具有唯一性的一些场景。

2、因此,如何提供一种适用场景更加广泛的左外连接右表项消除方法,成为亟待解决的技术问题。


技术实现思路

1、有鉴于此,为了克服现有技术的不足,本专利技术旨在提供一种在数据库中消除左外连接右表项的方法和系统。

2、根据本专利技术的第一方面,提供一种在数据库中消除左外连接右表项的方法,该方法包括:

3、判断当前sql语句对应的查询树是否存在distinct标记,如果当前sql语句对应的查询树存在distinct标记,检测当前sql语句是否引用不稳定表达式;

4、如果当前sql语句没有引用不稳定表达式,遍历当前sql语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,当外连接节点符合消除条件,消除与该外连接节点对应的左外连接右表项;

5、在每次消除外连接节点对应的左外连接右表项后,重新遍历当前sql语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,根据判断结果执行左外连接右表项的消除。

6、优选地,本专利技术在数据库中消除左外连接右表项的方法中,在对一个sql语句执行语义解析时,如果检测到该sql语句的投影输出中指定distinct关键字,在查询树中设置相应的distinct标记。

7、优选地,本专利技术在数据库中消除左外连接右表项的方法中,不稳定表达式包括易失性函数、聚集操作、集合操作以及rownum表达式。

8、优选地,本专利技术在数据库中消除左外连接右表项的方法中,在数据库逻辑分解阶段,通过对查询树中所有连接进行拆解,将查询树转换为拉平的外连接节点列表,该外连接节点列表存放外连接节点。

9、优选地,本专利技术在数据库中消除左外连接右表项的方法中,遍历当前sql语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,包括:从左至右遍历当前sql语句的外连接节点列表中的外连接节点,根据外连接节点的连接类型以及外连接右表项的表的连接条件引用关系对外连接节点进行消除条件判断。

10、优选地,本专利技术在数据库中消除左外连接右表项的方法中,当外连接节点符合消除条件,消除与该外连接节点对应的左外连接右表项,包括:当外连接节点的连接类型为左外连接,外连接节点的外连接右表项只有一个表,且外连接右表项的表只被当前连接节点的连接条件引用,将右表项中的表从所有引用该表的数据结构中删除,将当前连接节点从外连接节点列表中删除。

11、优选地,本专利技术在数据库中消除左外连接右表项的方法中,当外连接节点符合消除条件,消除与该外连接节点对应的左外连接右表项,包括:当外连接节点的连接类型为左外连接,外连接节点的外连接右表项包含多个表,且外连接右表项包含的每个表只被外连接右表项包含的表与连接的左表之间的连接条件引用,将右表项中的表从所有引用该表的数据结构中删除,将当前连接节点从外连接节点列表中删除。

12、优选地,本专利技术在数据库中消除左外连接右表项的方法中,在每次消除外连接节点对应的左外连接右表项后,重新遍历当前sql语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,根据判断结果执行左外连接右表项的消除,包括:如果当前sql语句的外连接节点列表中不存在符合消除条件的外连接节点,停止消除外连接节点的左外连接右表项。

13、根据本专利技术的第二方面,提供一种在数据库中消除左外连接右表项的系统,该系统包括消除服务端,该消除服务端用于:判断当前sql语句对应的查询树是否存在distinct标记,如果当前sql语句对应的查询树存在distinct标记,检测当前sql语句是否引用不稳定表达式;如果当前sql语句没有引用不稳定表达式,遍历当前sql语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,当外连接节点符合消除条件,消除与该外连接节点对应的左外连接右表项;在每次消除外连接节点对应的左外连接右表项后,重新遍历当前sql语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,根据判断结果执行左外连接右表项的消除。

14、根据本专利技术的第三方面,提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现本专利技术第一方面所述的方法。

15、本专利技术的在数据库中消除左外连接右表项的方法和系统,当sql语句的投影输出中指定了distinct关键字,即sql语句的输出中指定的列具有唯一性时,对sql语句中的所有外连接进行检查,当某个左外连接满足一定条件,可以对其中的左外连接进行优化,消除无用的右表项,提高执行效率,从而减少物理路径的搜索空间。

本文档来自技高网...

【技术保护点】

1.一种在数据库中消除左外连接右表项的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,在对一个SQL语句执行语义解析时,如果检测到所述SQL语句的投影输出中指定distinct关键字,在查询树中设置相应的distinct标记。

3.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,不稳定表达式包括易失性函数、聚集操作、集合操作以及rownum表达式。

4.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,在数据库逻辑分解阶段,通过对查询树中所有连接进行拆解,将查询树转换为拉平的外连接节点列表,所述外连接节点列表存放外连接节点。

5.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,遍历当前SQL语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,包括:从左至右遍历当前SQL语句的外连接节点列表中的外连接节点,根据外连接节点的连接类型以及外连接右表项的表的连接条件引用关系对外连接节点进行消除条件判断。>

6.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,当外连接节点符合消除条件,消除与所述外连接节点对应的左外连接右表项,包括:当外连接节点的连接类型为左外连接,外连接节点的外连接右表项只有一个表,且外连接右表项的表只被当前连接节点的连接条件引用,将右表项中的表从所有引用该表的数据结构中删除,将当前连接节点从外连接节点列表中删除。

7.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,当外连接节点符合消除条件,消除与所述外连接节点对应的左外连接右表项,包括:当外连接节点的连接类型为左外连接,外连接节点的外连接右表项包含多个表,且外连接右表项包含的每个表只被外连接右表项包含的表与连接的左表之间的连接条件引用,将右表项中的表从所有引用该表的数据结构中删除,将当前连接节点从外连接节点列表中删除。

8.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,在每次消除外连接节点对应的左外连接右表项后,重新遍历当前SQL语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,根据判断结果执行左外连接右表项的消除,包括:如果当前SQL语句的外连接节点列表中不存在符合消除条件的外连接节点,停止消除外连接节点的左外连接右表项。

9.根据权利要求1所述的在数据库中消除左外连接右表项的系统,其特征在于,所述系统包括消除服务端,所述消除服务端用于:判断当前SQL语句对应的查询树是否存在distinct标记,如果当前SQL语句对应的查询树存在distinct标记,检测当前SQL语句是否引用不稳定表达式;如果当前SQL语句没有引用不稳定表达式,遍历当前SQL语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,当外连接节点符合消除条件,消除与所述外连接节点对应的左外连接右表项;在每次消除外连接节点对应的左外连接右表项后,重新遍历当前SQL语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,根据判断结果执行左外连接右表项的消除。

10.一种计算机设备,其特征在于,所述计算机设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现权利要求1-8中任一项所述方法的步骤。

...

【技术特征摘要】

1.一种在数据库中消除左外连接右表项的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,在对一个sql语句执行语义解析时,如果检测到所述sql语句的投影输出中指定distinct关键字,在查询树中设置相应的distinct标记。

3.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,不稳定表达式包括易失性函数、聚集操作、集合操作以及rownum表达式。

4.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,在数据库逻辑分解阶段,通过对查询树中所有连接进行拆解,将查询树转换为拉平的外连接节点列表,所述外连接节点列表存放外连接节点。

5.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,遍历当前sql语句的外连接节点列表,对外连接节点列表中的外连接节点进行消除条件判断,包括:从左至右遍历当前sql语句的外连接节点列表中的外连接节点,根据外连接节点的连接类型以及外连接右表项的表的连接条件引用关系对外连接节点进行消除条件判断。

6.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,当外连接节点符合消除条件,消除与所述外连接节点对应的左外连接右表项,包括:当外连接节点的连接类型为左外连接,外连接节点的外连接右表项只有一个表,且外连接右表项的表只被当前连接节点的连接条件引用,将右表项中的表从所有引用该表的数据结构中删除,将当前连接节点从外连接节点列表中删除。

7.根据权利要求1所述的在数据库中消除左外连接右表项的方法,其特征在于,当外连接节点符合消除条件,消除与所述外连接节...

【专利技术属性】
技术研发人员:那海涛何小栋
申请(专利权)人:广州海量数据库技术有限公司
类型:发明
国别省市:

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

1