一种通过创建内部临时表索引提高start with查询性能的方法技术

技术编号:23983461 阅读:44 留言:0更新日期:2020-04-29 12:24
本发明专利技术提供一种通过创建内部临时表索引提高start with查询性能的方法,将查询中from的子句的多表关联操作变为内部临时表;对临时表进行扫描,取出符合条件的数据,并且使临时表可重复使用;创建栈表,将上一步中符合条件的数据放入栈表内;对该栈表进行扫描,出栈一条数据;对临时表进行扫描;将上两步的扫描结果进行汇合,得到符合下一个条件的数据;重复以上三步,至栈表为空;重复以上步骤至所有条件过滤完成,结果集中的数据即为最终结果。该发明专利技术的有益效果是:通过添加hint开关,使查询期间内部临时表可复用,通过修正优化模块,使优化器采用自动索引查询,进而能够通过创建内部临时表的方法,优化start with的执行性能,提高运行速率,快速得到运行结果。

A method to improve start with query performance by creating internal temporary table index

【技术实现步骤摘要】
一种通过创建内部临时表索引提高startwith查询性能的方法
本专利技术涉及关系型数据库领域,尤其是涉及一种通过创建内部临时表索引提高startwith查询性能的方法。
技术介绍
一般情况下,在多表关联后形成的结果集上作startwith语句的执行,会采用如下语句:SELECT…from(多表关联查询)STARTWITH(…)CONNECTBY(…)ORDERBY19;这个查询的效果非常慢,因为多表关联后是一个内部临时表,无法通过操作在上面建立索引,因此查询效率很慢,因此需要想办法在内部临时表上面增加索引,从而加快查询速度。
技术实现思路
有鉴于此,本专利技术旨在提出一种通过创建内部临时表索引提高startwith查询性能的方法,通过多表关联后在一个内部临时表上面建立索引,进而优化startwith的执行性能。为达到上述目的,本专利技术的技术方案是这样实现的:一种通过创建内部临时表索引提高startwith查询性能的方法,包括步骤,S1.在对多个条件进行筛选时,将查询中from的子句的多表关联操作变为内部临时表;S2.对内部临时表进行扫描,取出符合一个条件的数据,并使内部临时表可重复使用;S3.创建栈表,将步骤S2中符合条件的结果集放入栈表内;S4.对该栈表进行扫描,出栈一条数据;S5.对内部临时表进行扫描;S6.将步骤S4和步骤S5的扫描结果进行汇合,得到符合下一个条件的数据,并将结果同时放入到该栈表和结果集中;S7.重复步骤S4至S6,直至该临时栈表为空;S8.重复步骤S2至S7,直至对所有条件过滤完成,此时结果集中的数据即为最终结果。进一步的,在startwith前增加hint开关或jdbc连接串开关,使语法解析模块添加CB复用内部临时表的标记,优化器添加自动索引标记,执行器添加临时表复用标记,保证查询期间内部临时表能复用。进一步的,根据hint开关在优化器添加的自动索引标记,设定自动索引为可用和动态标记。进一步的,在优化器中强制设定自动索引的执行代价低于hashjoin的代价。进一步的,在创建内部临时表的过程中,根据优化器的设定动态创建临时索引。相对于现有技术,本专利技术所述的一种通过创建内部临时表索引提高startwith查询性能的方法具有以下优势:本专利技术提供的优化方法,通过添加hint开关,使查询期间内部临时表可复用,通过修正优化模块,使优化器采用自动索引查询,进而能够通过创建内部临时表的方法,优化startwith的执行性能,提高运行速率,快速得到运行结果。附图说明构成本专利技术的一部分的附图用来提供对本专利技术的进一步理解,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。在附图中:图1为本专利技术实施例所述的一种通过创建内部临时表索引提高startwith查询性能的方法模型运行框图;图2为本专利技术实施例所述的增加hint开关对语法模块、优化器、执行器的影响示意图;图3为本专利技术实施例所述的内部临时表从建立到复用再到删除的逻辑框图;图4为本专利技术实施例所述的在优化器中强制设定自动索引过程框图。具体实施方式下面将参考附图并结合实施例来详细说明本专利技术。如图1至图4所示,一种通过创建内部临时表索引提高startwith查询性能的方法,包括步骤:S1.在对多个条件进行筛选时,将查询中from的子句的多表关联操作变为内部临时表;S2.对内部临时表进行扫描,取出符合一个条件的数据,并使内部临时表可重复使用;S3.创建栈表,将步骤S2中符合条件的结果集放入栈表内;S4.对该栈表进行扫描,出栈一条数据;S5.对内部临时表进行扫描;S6.将步骤S4和步骤S5的扫描结果进行汇合,得到符合下一个条件的数据,并将结果同时放入到该栈表和结果集中;S7.重复步骤S4至S6,直至该临时栈表为空;S8.重复步骤S2至S7,直至对所有条件过滤完成,此时结果集中的数据即为最终结果。在startwith前增加hint开关或jdbc连接串开关,使语法解析模块添加CB复用内部临时表的标记,优化器添加自动索引标记,执行器添加临时表复用标记,保证查询期间内部临时表能复用。根据hint开关在优化器添加的自动索引标记,设定自动索引为可用和动态标记。在优化器中强制设定自动索引的执行代价低于hashjoin的代价。在创建内部临时表的过程中,根据优化器的设定动态创建临时索引。当条件为两个时,本实施例工作过程如图1所示,描述如下:S1.将查询中from子句的多表关联操作变为内部临时表x1、x2;S2.对临时表x1进行扫描,fetch数据,条件是x1.dz='jzszf'S3.创建一个临时栈表dtab。对上一步结果集放入到dtab内;S4.对临时栈表dtab进行扫描,出栈一条结果;S5.对临时表x2进行扫描;S6.将第四步和第五步的扫描结果进行join操作,条件为x2.lsid=dtab_5181_38。将结果放入到临时栈表dtab内(入栈),同时放入结果集;S7.重复执行步骤S4到S6的操作,直到临时栈表dtab为空;S8.对步骤S2和步骤S7的结果进行unionall操作,返回最终结果集。实现上述过程需要(1)增加hint开关或jdbc连接串开关,来控制优化行为,在查询期间保持内部临时表能复用;(2)还要保证能够在内部临时表上创建自动索引。以增加hint开关为例:通过增加开关来控制优化器和执行器的行为,不打开行为模式和原版本一致,打开开关后,将会复用临时表和自动创建索引,并在语法解析、优化器、执行器这三个模块产生影响,使语法解析模块添加CB复用内部临时表的标记,优化器添加自动索引标记,执行器添加临时表复用标记,保证查询期间内部临时表能复用。在查询期间复用内部临时表是建立自动索引有效的前提。为了能复用内部临时表,要在内部临时表被删除的表扫描结束阶段加防止删除机制。需要在内部临时表的元数据里增加复用标记,并在表扫描结束阶段判断该标记,决定是否删掉内部临时表。这样临时表会一直保存,直到关闭数据库阶段。在关闭数据库阶段,会关闭和删除所有内部临时表,这部分是既有逻辑,不需要改动,如图3所示,实际验证,将内部临时表复用后,可以大幅减少执行时间,执行时间可以从24s减少到2s。在内部临时表可复用的基础上,利用Autoindex索引技术,创建临时表索引。正常情况下,优化器生成两个表关联路径时,会针对各种执行路径可能性做代价评估,选出最优路径。如果有索引的话,优先会使用索引,按照Nestloopjoin,不会选择hashjoin。如果没有索引,会将自动索引列入评估范围,对比hashjoin和nestloopjoin的代价,决定最终的执行路径本文档来自技高网...

【技术保护点】
1.一种通过创建内部临时表索引提高start with查询性能的方法,其特征在于,包括以下步骤:/nS1.在对多个条件进行筛选时,将查询中from的子句的多表关联操作变为内部临时表;/nS2.对内部临时表进行扫描,取出符合一个条件的数据,并使内部临时表可重复使用;/nS3.创建栈表,将步骤S2中符合条件的结果集放入栈表内;/nS4.对该栈表进行扫描,出栈一条数据;/nS5.对内部临时表进行扫描;/nS6.将步骤S4和步骤S5的扫描结果进行汇合,得到符合下一个条件的数据,并将结果同时放入到该栈表和结果集中;/nS7.重复步骤S4至S6,直至该临时栈表为空;/nS8.重复步骤S2至S7,直至对所有条件过滤完成,此时结果集中的数据即为最终结果。/n

【技术特征摘要】
1.一种通过创建内部临时表索引提高startwith查询性能的方法,其特征在于,包括以下步骤:
S1.在对多个条件进行筛选时,将查询中from的子句的多表关联操作变为内部临时表;
S2.对内部临时表进行扫描,取出符合一个条件的数据,并使内部临时表可重复使用;
S3.创建栈表,将步骤S2中符合条件的结果集放入栈表内;
S4.对该栈表进行扫描,出栈一条数据;
S5.对内部临时表进行扫描;
S6.将步骤S4和步骤S5的扫描结果进行汇合,得到符合下一个条件的数据,并将结果同时放入到该栈表和结果集中;
S7.重复步骤S4至S6,直至该临时栈表为空;
S8.重复步骤S2至S7,直至对所有条件过滤完成,此时结果集中的数据即为最终结果。


2.根据权利要求1所述的一种通过创建内部临时表索引提高startwith查询...

【专利技术属性】
技术研发人员:侯欣陈文亭王雪松吕迅王志
申请(专利权)人:天津南大通用数据技术股份有限公司
类型:发明
国别省市:天津;12

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

1