[发明专利]一种通过创建内部临时表索引提高start with查询性能的方法有效
申请号: | 201911361506.4 | 申请日: | 2019-12-25 |
公开(公告)号: | CN111078734B | 公开(公告)日: | 2023-08-08 |
发明(设计)人: | 侯欣;陈文亭;王雪松;吕迅;王志 | 申请(专利权)人: | 天津南大通用数据技术股份有限公司 |
主分类号: | G06F16/2453 | 分类号: | G06F16/2453 |
代理公司: | 天津滨海科纬知识产权代理有限公司 12211 | 代理人: | 耿树志 |
地址: | 300384 天津市滨海新区高新区*** | 国省代码: | 天津;12 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 通过 创建 内部 临时 索引 提高 start with 查询 性能 方法 | ||
本发明提供一种通过创建内部临时表索引提高start with查询性能的方法,将查询中from的子句的多表关联操作变为内部临时表;对临时表进行扫描,取出符合条件的数据,并且使临时表可重复使用;创建栈表,将上一步中符合条件的数据放入栈表内;对该栈表进行扫描,出栈一条数据;对临时表进行扫描;将上两步的扫描结果进行汇合,得到符合下一个条件的数据;重复以上三步,至栈表为空;重复以上步骤至所有条件过滤完成,结果集中的数据即为最终结果。该发明的有益效果是:通过添加hint开关,使查询期间内部临时表可复用,通过修正优化模块,使优化器采用自动索引查询,进而能够通过创建内部临时表的方法,优化start with的执行性能,提高运行速率,快速得到运行结果。
技术领域
本发明涉及关系型数据库领域,尤其是涉及一种通过创建内部临时表索引提高start with查询性能的方法。
背景技术
一般情况下,在多表关联后形成的结果集上作start with语句的执行,会采用如下语句:
SELECT…from(多表关联查询)START WITH(…)CONNECT BY(…)ORDER BY 19;
这个查询的效果非常慢,因为多表关联后是一个内部临时表,无法通过操作在上面建立索引,因此查询效率很慢,因此需要想办法在内部临时表上面增加索引,从而加快查询速度。
发明内容
有鉴于此,本发明旨在提出一种通过创建内部临时表索引提高start with查询性能的方法,通过多表关联后在一个内部临时表上面建立索引,进而优化start with的执行性能。
为达到上述目的,本发明的技术方案是这样实现的:
一种通过创建内部临时表索引提高start with查询性能的方法,包括步骤,
S1.在对多个条件进行筛选时,将查询中from的子句的多表关联操作变为内部临时表;
S2.对内部临时表进行扫描,取出符合一个条件的数据,并使内部临时表可重复使用;
S3.创建栈表,将步骤S2中符合条件的结果集放入栈表内;
S4.对该栈表进行扫描,出栈一条数据;
S5.对内部临时表进行扫描;
S6.将步骤S4和步骤S5的扫描结果进行汇合,得到符合下一个条件的数据,并将结果同时放入到该栈表和结果集中;
S7.重复步骤S4至S6,直至该临时栈表为空;
S8.重复步骤S2至S7,直至对所有条件过滤完成,此时结果集中的数据即为最终结果。
进一步的,在startwith前增加hint开关或jdbc连接串开关,使语法解析模块添加CB复用内部临时表的标记,优化器添加自动索引标记,执行器添加临时表复用标记,保证查询期间内部临时表能复用。
进一步的,根据hint开关在优化器添加的自动索引标记,设定自动索引为可用和动态标记。
进一步的,在优化器中强制设定自动索引的执行代价低于hash join的代价。
进一步的,在创建内部临时表的过程中,根据优化器的设定动态创建临时索引。
相对于现有技术,本发明所述的一种通过创建内部临时表索引提高start with查询性能的方法具有以下优势:
本发明提供的优化方法,通过添加hint开关,使查询期间内部临时表可复用,通过修正优化模块,使优化器采用自动索引查询,进而能够通过创建内部临时表的方法,优化start with的执行性能,提高运行速率,快速得到运行结果。
附图说明
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于天津南大通用数据技术股份有限公司,未经天津南大通用数据技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911361506.4/2.html,转载请声明来源钻瓜专利网。