面向MAX/MIN優(yōu)化的SQL Window函數(shù)處理
發(fā)布時(shí)間:2021-08-16 21:10
Window(窗口)函數(shù)作為關(guān)系數(shù)據(jù)庫(kù)領(lǐng)域中數(shù)據(jù)分析技術(shù)的一種解決方案,其精妙的語(yǔ)義特征使其能代替自連接(Self Join)和相關(guān)子查詢(Sub Queries)等完成傳統(tǒng)復(fù)雜查詢功能,現(xiàn)已被廣泛應(yīng)用到互聯(lián)網(wǎng)應(yīng)用的數(shù)據(jù)管理和分析中.在目前互聯(lián)網(wǎng)應(yīng)用步入大數(shù)據(jù)時(shí)代的背景下,針對(duì)高吞吐和實(shí)時(shí)響應(yīng)等需求,已有的Window(窗口)函數(shù)的處理性能已經(jīng)出現(xiàn)了瓶頸.文中首先介紹了關(guān)系數(shù)據(jù)庫(kù)中窗口函數(shù)在執(zhí)行器中的兩階段執(zhí)行框架,然后基于PostgreSQL數(shù)據(jù)庫(kù)中原有MAX/MIN Window(窗口)函數(shù)執(zhí)行框架,提出了一種基于臨時(shí)窗口的優(yōu)化方法,來(lái)優(yōu)化SQL Window查詢針對(duì)MAX/MIN函數(shù)的處理,并給出了查詢代價(jià)的分析模型,從理論上分析了該算法的性能.通過(guò)與現(xiàn)有商業(yè)數(shù)據(jù)庫(kù)SQL Server進(jìn)行性能上的對(duì)比,驗(yàn)證了該方案的有效性.
【文章來(lái)源】:計(jì)算機(jī)學(xué)報(bào). 2016,39(10)北大核心EICSCD
【文章頁(yè)數(shù)】:12 頁(yè)
【部分圖文】:
圖3窗口函數(shù)的執(zhí)行過(guò)程
為1,也就是只包含當(dāng)前行,因此計(jì)算過(guò)程非常簡(jiǎn)單,只需遍歷一遍數(shù)據(jù).即使是求百分比的函數(shù),最多只需要再對(duì)每個(gè)分割提前做一次統(tǒng)計(jì),然后這個(gè)統(tǒng)計(jì)值就可用于當(dāng)前分割中所有行的計(jì)算,所占百分比通過(guò)當(dāng)前行的值與這個(gè)統(tǒng)計(jì)值相除即可求出.這樣對(duì)于每個(gè)分割,最多只需要掃描兩遍數(shù)據(jù),一遍用于計(jì)算統(tǒng)計(jì)值,一遍用于獲取當(dāng)前行.(2)偏移類函數(shù),其函數(shù)意義是將劃分內(nèi)的所有元組向前或者向后移動(dòng)一段距離,對(duì)于這類函數(shù),只需要在計(jì)算第一個(gè)元組時(shí),確認(rèn)其位置,然后順序從該位置往后讀取即可.圖4PostgreSQL中MAX/MINWindow函數(shù)在順序調(diào)用階段的執(zhí)行過(guò)程(3)聚集類函數(shù)計(jì)算的對(duì)象是一個(gè)集合里的所有行,與傳統(tǒng)的聚集函數(shù)類似,只不過(guò)聚集的范圍被限定在當(dāng)前窗口,每個(gè)窗口聚集函數(shù)都有一個(gè)轉(zhuǎn)移函數(shù)和一個(gè)可選最終計(jì)算函數(shù)與之對(duì)應(yīng).計(jì)算的過(guò)程會(huì)維護(hù)一個(gè)轉(zhuǎn)移值,轉(zhuǎn)移值本身可以是基本數(shù)據(jù)類型也可以是抽象類型.在重排序階段,MAX/MINWindow函數(shù)跟其他Window函數(shù)一樣,主要是針對(duì)PARTITIONBY子句和ORDERBY子句對(duì)表進(jìn)行劃分和重排序.由于MAX/MINWindow函數(shù)并沒(méi)有最終計(jì)算函數(shù),因此每個(gè)窗口得到的最終轉(zhuǎn)移值即為該窗口的最終結(jié)果值.因此,對(duì)于MAX/MINWindow函數(shù),在順序調(diào)用階段,主要是對(duì)重排序后的表中的每一個(gè)窗口中的元組去順序調(diào)用轉(zhuǎn)移函數(shù)求轉(zhuǎn)移值的過(guò)程.2.2順序調(diào)用階段的執(zhí)行過(guò)程本文是針對(duì)窗口聚集函數(shù)中的MAX/MIN進(jìn)行優(yōu)化.在順序調(diào)用階段,主體的計(jì)算過(guò)程是由轉(zhuǎn)移函數(shù)完成的.對(duì)于像AVG等擁有最終計(jì)算函
圖6更新過(guò)程算法2.TW(TemporaryWindow)順序調(diào)用優(yōu)化算法.輸入:經(jīng)過(guò)重排序的表T′輸出:每一個(gè)元組所對(duì)應(yīng)的窗口的MAX/MIN函數(shù)值1.FOR表T′中的每一個(gè)分區(qū)PDO2.初始化h,t,TTV;3.FOR分區(qū)P中的每一個(gè)窗口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。剑裕裕郑裕龋牛危保福琛颍;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
本文編號(hào):3346401
【文章來(lái)源】:計(jì)算機(jī)學(xué)報(bào). 2016,39(10)北大核心EICSCD
【文章頁(yè)數(shù)】:12 頁(yè)
【部分圖文】:
圖3窗口函數(shù)的執(zhí)行過(guò)程
為1,也就是只包含當(dāng)前行,因此計(jì)算過(guò)程非常簡(jiǎn)單,只需遍歷一遍數(shù)據(jù).即使是求百分比的函數(shù),最多只需要再對(duì)每個(gè)分割提前做一次統(tǒng)計(jì),然后這個(gè)統(tǒng)計(jì)值就可用于當(dāng)前分割中所有行的計(jì)算,所占百分比通過(guò)當(dāng)前行的值與這個(gè)統(tǒng)計(jì)值相除即可求出.這樣對(duì)于每個(gè)分割,最多只需要掃描兩遍數(shù)據(jù),一遍用于計(jì)算統(tǒng)計(jì)值,一遍用于獲取當(dāng)前行.(2)偏移類函數(shù),其函數(shù)意義是將劃分內(nèi)的所有元組向前或者向后移動(dòng)一段距離,對(duì)于這類函數(shù),只需要在計(jì)算第一個(gè)元組時(shí),確認(rèn)其位置,然后順序從該位置往后讀取即可.圖4PostgreSQL中MAX/MINWindow函數(shù)在順序調(diào)用階段的執(zhí)行過(guò)程(3)聚集類函數(shù)計(jì)算的對(duì)象是一個(gè)集合里的所有行,與傳統(tǒng)的聚集函數(shù)類似,只不過(guò)聚集的范圍被限定在當(dāng)前窗口,每個(gè)窗口聚集函數(shù)都有一個(gè)轉(zhuǎn)移函數(shù)和一個(gè)可選最終計(jì)算函數(shù)與之對(duì)應(yīng).計(jì)算的過(guò)程會(huì)維護(hù)一個(gè)轉(zhuǎn)移值,轉(zhuǎn)移值本身可以是基本數(shù)據(jù)類型也可以是抽象類型.在重排序階段,MAX/MINWindow函數(shù)跟其他Window函數(shù)一樣,主要是針對(duì)PARTITIONBY子句和ORDERBY子句對(duì)表進(jìn)行劃分和重排序.由于MAX/MINWindow函數(shù)并沒(méi)有最終計(jì)算函數(shù),因此每個(gè)窗口得到的最終轉(zhuǎn)移值即為該窗口的最終結(jié)果值.因此,對(duì)于MAX/MINWindow函數(shù),在順序調(diào)用階段,主要是對(duì)重排序后的表中的每一個(gè)窗口中的元組去順序調(diào)用轉(zhuǎn)移函數(shù)求轉(zhuǎn)移值的過(guò)程.2.2順序調(diào)用階段的執(zhí)行過(guò)程本文是針對(duì)窗口聚集函數(shù)中的MAX/MIN進(jìn)行優(yōu)化.在順序調(diào)用階段,主體的計(jì)算過(guò)程是由轉(zhuǎn)移函數(shù)完成的.對(duì)于像AVG等擁有最終計(jì)算函
圖6更新過(guò)程算法2.TW(TemporaryWindow)順序調(diào)用優(yōu)化算法.輸入:經(jīng)過(guò)重排序的表T′輸出:每一個(gè)元組所對(duì)應(yīng)的窗口的MAX/MIN函數(shù)值1.FOR表T′中的每一個(gè)分區(qū)PDO2.初始化h,t,TTV;3.FOR分區(qū)P中的每一個(gè)窗口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。剑裕裕郑裕龋牛危保福琛颍;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
本文編號(hào):3346401
本文鏈接:http://sikaile.net/kejilunwen/ruanjiangongchenglunwen/3346401.html
最近更新
教材專著