馬東波
摘 要:在分布式數(shù)據(jù)庫查詢中多采用直接連接的方式,但是這種方式耗時(shí)較長(zhǎng),代價(jià)較高,查詢效率低。本文結(jié)合現(xiàn)有的連接查詢方法,深入研究基于直接連接的查詢優(yōu)化處理方法,有效縮短查詢處理時(shí)間。
關(guān)鍵詞:直接連接的查詢;優(yōu)化處理;方法
近年來,分布式系統(tǒng)得到了廣泛的應(yīng)用。分布式信息庫查詢是現(xiàn)代信息處理中的重要部分。在分布式數(shù)據(jù)查詢處理時(shí),連接操作能夠直接決定查詢效率。為實(shí)現(xiàn)分布式數(shù)據(jù)庫系統(tǒng)更加有效地處理連接操作,業(yè)內(nèi)人士進(jìn)行了大量的探究實(shí)驗(yàn),最終形成了不同的算法。優(yōu)化連接操作的途徑一般有兩種,即半連接與直接連接。在注重本地處理代價(jià)時(shí),一般采用直接連接的方式。本文針對(duì)直接連接提出了優(yōu)化算法,并利用數(shù)據(jù)分片進(jìn)行并行處理。
1 數(shù)據(jù)分片
數(shù)據(jù)分片,即數(shù)據(jù)劃分,是分布式數(shù)據(jù)庫的主要特征之一。各個(gè)局部數(shù)據(jù)庫按照一定的邏輯組合成全局?jǐn)?shù)據(jù)庫。反之,全局?jǐn)?shù)據(jù)庫按照特定的邏輯進(jìn)行分割即成局部數(shù)據(jù)庫。通常來說,在關(guān)系數(shù)據(jù)庫中,一個(gè)關(guān)系能夠?qū)⒛承?shù)據(jù)間的邏輯關(guān)系描述出來。但是,由于用戶使用的站點(diǎn)不同,需要該關(guān)系中的元祖也可能不同,此時(shí)就需要分割這個(gè)關(guān)系,將得到的各部分元祖稱為邏輯片段,滿足各個(gè)用戶要求,減少網(wǎng)絡(luò)通信量,提高系統(tǒng)響應(yīng)的速度。
數(shù)據(jù)分片有4種方法:①水平分片:按一定的條件把全局關(guān)系的所有元組劃分成若干不相交的子集,每個(gè)子集為關(guān)系的一個(gè)片段;②垂直分片:把一個(gè)全局關(guān)系的屬性集分成若干子集,并在這些子集上作投影運(yùn)算,每個(gè)投影稱為垂直分片;③導(dǎo)出分片:又稱為導(dǎo)出水平分片,即水平分片的條件不是本關(guān)系屬性的條件,而是其他關(guān)系屬性的條件;④混合分片:以上3種方法的混合??梢韵人椒制俅怪狈制?,或先垂直分片再水平分片,或其他形式,但他們的結(jié)果是不相同的。
數(shù)據(jù)分片應(yīng)該具備的條件:①完備性條件:必須把全局關(guān)系的所有數(shù)據(jù)映射到片段中,決不允許有屬于全局關(guān)系的數(shù)據(jù)卻不屬于它的某一個(gè)片段;②可重構(gòu)條件:必須保證能夠由同一個(gè)全局關(guān)系的各個(gè)片段來重建該全局關(guān)系。對(duì)于水平分片可用并操作重構(gòu)全局關(guān)系;對(duì)于垂直分片可用聯(lián)接操作重構(gòu)全局關(guān)系;不相交條件:要求一個(gè)全局關(guān)系被分割后所得的各個(gè)數(shù)據(jù)片段互不重疊,但是對(duì)垂直分片的主鍵除外。
2 查詢優(yōu)化處理的目標(biāo)及執(zhí)行代價(jià)
2.1 查詢優(yōu)化目標(biāo)
基于直接連接的查詢優(yōu)化可能涉及多個(gè)站點(diǎn),查詢優(yōu)化的目標(biāo)一般有兩種:總代價(jià)最小??偞鷥r(jià)包括CPU及I/O代價(jià)、網(wǎng)絡(luò)在各個(gè)站點(diǎn)之間數(shù)據(jù)傳輸?shù)拇鷥r(jià)。因?yàn)閿?shù)據(jù)在分布式數(shù)據(jù)庫中是分布、冗余的,在直接連接查詢處理時(shí)需要考慮數(shù)據(jù)及信息傳遞所產(chǎn)生的通信費(fèi)用;另一種目標(biāo)即響應(yīng)處理時(shí)間短,由于數(shù)據(jù)的分散及冗余,并行處理的可能性很大。由于系統(tǒng)應(yīng)用不盡相同,通常著重與實(shí)現(xiàn)一種目標(biāo)。本文致力于達(dá)到總代價(jià)最小的目標(biāo)。
2.2 查詢執(zhí)行代價(jià)
主要包括:I/O代價(jià)、CPU代價(jià)、通信代價(jià)。
查詢執(zhí)行代價(jià)模型包括:I/O代價(jià)模型。一次訪問代價(jià)計(jì)算可通過CIO=DO+D1*X(DO表示I/O代價(jià),與X無關(guān);X為存取數(shù)據(jù)大?。籇1表示傳輸單位數(shù)據(jù)所花費(fèi)的時(shí)間),在實(shí)際優(yōu)化過程中,由于代價(jià)只用于進(jìn)行執(zhí)行方案的優(yōu)劣比較,因此不必算出精確數(shù)值,得出一個(gè)估算值即可;通信代價(jià)模型。這種模型與網(wǎng)絡(luò)類型有關(guān)。可簡(jiǎn)單表示為:Cc(X)=CO+C1*X(CO為代價(jià)系數(shù);X為數(shù)據(jù)大??;CO為數(shù)據(jù)傳輸所需要初始代價(jià);C0與C1為常數(shù))
3 基于直接連接的查詢優(yōu)化處理方法
3.1 實(shí)現(xiàn)連接運(yùn)算的方法
3.1.1 嵌套循環(huán)
嵌套循環(huán)是一種古老的連接方式。SQL中的連接,本質(zhì)上就是將兩個(gè)數(shù)據(jù)集合依據(jù)連接條件進(jìn)行匹配操作。嵌套循環(huán)通過兩層循環(huán)手段進(jìn)行依次的匹配操作,最后返回結(jié)果集合。其操作過程簡(jiǎn)單,與最簡(jiǎn)單的排序檢索算法類似。執(zhí)行過程如下:Oracle CBO首先將一系列的連接關(guān)系,拆分為若干層的Nest Loop Join,確定連接順序。如a.field1=b.field1 and b.field2=c.field2,就可以組織成表A和表B先進(jìn)行嵌套循環(huán)操作,之后操作的結(jié)果集合再與數(shù)據(jù)表C進(jìn)行嵌套循環(huán)操作。所以,我們查看到的連接操作,通常都是分層次的;在確定每次嵌套循環(huán)的兩端對(duì)象之后,確定外側(cè)連接表和內(nèi)側(cè)連接表。將外側(cè)連接表作為連接驅(qū)動(dòng)表,根據(jù)SQL中對(duì)驅(qū)動(dòng)表的連接條件,進(jìn)行篩選。最后獲取到驅(qū)動(dòng)表數(shù)據(jù)集合;從驅(qū)動(dòng)表每條記錄入手,檢索內(nèi)側(cè)表記錄,獲取符合連接條件的記錄。形成連接行。
3.1.2 歸并掃描法
按照連接屬性對(duì)兩個(gè)關(guān)系進(jìn)行排序,再根據(jù)連接屬性值的順序?qū)@兩個(gè)關(guān)系進(jìn)行掃描,匹配成元祖。此方法使排序代價(jià)增加。將相同連接屬性的元祖緩沖起來以便下次使用。
3.2 連接關(guān)系的傳輸
3.2.1 全體傳送
傳送關(guān)系的字節(jié)數(shù)產(chǎn)生傳輸費(fèi)用,分為傳輸內(nèi)關(guān)系與傳輸外關(guān)系。
3.2.2 按需傳送
即將元祖按照傳輸需要一次一個(gè)進(jìn)行傳送,無需建立臨時(shí)儲(chǔ)存器。但是由于每次提取元祖都要進(jìn)行一次信息交換,代價(jià)很高,僅可在高速運(yùn)行的局域網(wǎng)中才能使用。
3.3 執(zhí)行場(chǎng)地
執(zhí)行場(chǎng)地包括:傳送I關(guān)系的Site(O);傳送O關(guān)系的Site(I);傳送O關(guān)系和I關(guān)系的Site(other)。
4 結(jié)語
文章以實(shí)現(xiàn)總代價(jià)最小為目的,基于直接連接的查詢方法進(jìn)行優(yōu)化處理。在實(shí)際操作中,沒有必要算出精確數(shù)據(jù),大致估算即可,選擇總代價(jià)小、節(jié)省時(shí)間、具有可行性的方案。
參考文獻(xiàn)
[1]喬百友,鄧增安,王秋杰,等.一種基于網(wǎng)格索引的空間連接查詢處理優(yōu)化算法[J].小型微型計(jì)算機(jī)系統(tǒng),2014,35(10):2243-2248.
[2]趙宇蘭,柳欣.基于連接依賴信息的分布式連接查詢優(yōu)化算法[J].現(xiàn)代電子技術(shù),2016,460(5):28-32.
[3]姚劍芳.案例教學(xué)法在SQL Server連接查詢教學(xué)中的應(yīng)用[J].吉林省教育學(xué)院學(xué)報(bào)旬刊,2015,(3):81-82.
(作者單位:北京信息職業(yè)技術(shù)學(xué)院)