当前位置:主页 > 科技论文 > 软件论文 >

面向MAX/MIN优化的SQL Window函数处理

发布时间:2021-08-16 21:10
  Window(窗口)函数作为关系数据库领域中数据分析技术的一种解决方案,其精妙的语义特征使其能代替自连接(Self Join)和相关子查询(Sub Queries)等完成传统复杂查询功能,现已被广泛应用到互联网应用的数据管理和分析中.在目前互联网应用步入大数据时代的背景下,针对高吞吐和实时响应等需求,已有的Window(窗口)函数的处理性能已经出现了瓶颈.文中首先介绍了关系数据库中窗口函数在执行器中的两阶段执行框架,然后基于PostgreSQL数据库中原有MAX/MIN Window(窗口)函数执行框架,提出了一种基于临时窗口的优化方法,来优化SQL Window查询针对MAX/MIN函数的处理,并给出了查询代价的分析模型,从理论上分析了该算法的性能.通过与现有商业数据库SQL Server进行性能上的对比,验证了该方案的有效性. 

【文章来源】:计算机学报. 2016,39(10)北大核心EICSCD

【文章页数】:12 页

【部分图文】:

面向MAX/MIN优化的SQL Window函数处理


图3窗口函数的执行过程

顺序调用,执行过程,函数


为1,也就是只包含当前行,因此计算过程非常简单,只需遍历一遍数据.即使是求百分比的函数,最多只需要再对每个分割提前做一次统计,然后这个统计值就可用于当前分割中所有行的计算,所占百分比通过当前行的值与这个统计值相除即可求出.这样对于每个分割,最多只需要扫描两遍数据,一遍用于计算统计值,一遍用于获取当前行.(2)偏移类函数,其函数意义是将划分内的所有元组向前或者向后移动一段距离,对于这类函数,只需要在计算第一个元组时,确认其位置,然后顺序从该位置往后读取即可.图4PostgreSQL中MAX/MINWindow函数在顺序调用阶段的执行过程(3)聚集类函数计算的对象是一个集合里的所有行,与传统的聚集函数类似,只不过聚集的范围被限定在当前窗口,每个窗口聚集函数都有一个转移函数和一个可选最终计算函数与之对应.计算的过程会维护一个转移值,转移值本身可以是基本数据类型也可以是抽象类型.在重排序阶段,MAX/MINWindow函数跟其他Window函数一样,主要是针对PARTITIONBY子句和ORDERBY子句对表进行划分和重排序.由于MAX/MINWindow函数并没有最终计算函数,因此每个窗口得到的最终转移值即为该窗口的最终结果值.因此,对于MAX/MINWindow函数,在顺序调用阶段,主要是对重排序后的表中的每一个窗口中的元组去顺序调用转移函数求转移值的过程.2.2顺序调用阶段的执行过程本文是针对窗口聚集函数中的MAX/MIN进行优化.在顺序调用阶段,主体的计算过程是由转移函数完成的.对于像AVG等拥有最终计算函

顺序调用,优化算法,更新过程,算法


图6更新过程算法2.TW(TemporaryWindow)顺序调用优化算法.输入:经过重排序的表T′输出:每一个元组所对应的窗口的MAX/MIN函数值1.FOR表T′中的每一个分区PDO2.初始化h,t,TTV;3.FOR分区P中的每一个窗口WiDO4.初始化Wis.,Wie.,Wi.TV;5.IFWis.==Wi-1s.THEN6.Wi.TV←Wi-1.TV;7.FOReachrowin(Wi-1e.,Wie.]DO8.Wi.TV←transfunc(Wi.TV,Rm);9.IFWi.TV!=TTVTHEN10.h←rm;11.TTV←Wi.TV;12.t←Wie.;13.ELSEIFWis.?hTHEN14.Wi.TV←TTV;15.FOReachrowin(t,Wie.]DO16.Wi.TV←transfunc(Wi.TV,Rm);17.IFWi.TV!=TTVTHEN18.h←rm;19.TTV←Wi.TV;20.t←Wie.;21.ELSE22.FOReachrowin[Wis.,Wie.]DO23.Wi.TV←transfunc(Wi.TV,Rm);24.IFWi.TV!=TTVTHEN25.h←rm;26.TTV←Wi.TV;27.t←Wie.;28.RETURNWi.TV;MA


本文编号:3346401

资料下载
论文发表

本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/3346401.html


Copyright(c)文论论文网All Rights Reserved | 网站地图 |

版权申明:资料由用户5deea***提供,本站仅收录摘要或目录,作者需要删除请E-mail邮箱bigeng88@qq.com