專利名稱:一種數(shù)據(jù)庫查詢中最優(yōu)執(zhí)行計劃的搜索方法
技術領域:
本發(fā)明涉及本發(fā)明涉及到數(shù)據(jù)庫領域,尤其涉及到數(shù)據(jù)庫在sql語句查詢過程中 執(zhí)行計劃在并發(fā)執(zhí)行環(huán)境下最優(yōu)執(zhí)行方案的搜索方法。
背景技術:
數(shù)據(jù)庫在查詢優(yōu)化過程中,對于一個給定的sql語句,尤其是復雜的sql語句,通 常有許多種可能的策略。一般而言,如果一個查詢語句中含有η個關系,有O(n-l)) ! / (n-1) !個不同的連接順序,當η = 7時,此數(shù)為665觀0,當n = 10時,此數(shù)為176億。查 詢優(yōu)化就是能從許多的策略中找出代價較小的執(zhí)行計劃的一個處理過程,但是當sql語句 中涉及到的關系數(shù)較大(η >6)時,優(yōu)化引擎如果一一遍歷所有的執(zhí)行計劃,將消耗大量的 優(yōu)化時間,最終導致語句查詢效率低下。另外,隨著多核服務器的大量出現(xiàn),為提高語句的 執(zhí)行效率,并發(fā)對語句進行執(zhí)行成為今后語句執(zhí)行的趨勢,以前查詢優(yōu)化引擎在挑選最優(yōu) 執(zhí)行計劃時,沒有兼顧到語句并發(fā)執(zhí)行的前提,其所提交的最優(yōu)執(zhí)行計劃無法充分利用多 核的優(yōu)勢。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術問題是提供一種為查詢語句從大量的執(zhí)行計劃中快速找 出適合于并發(fā)執(zhí)行的執(zhí)行計劃。為解決上述技術問題,本發(fā)明所述方法包括在執(zhí)行計劃的搜索過程中不予考慮含 有笛卡爾積連接操作的執(zhí)行計劃(除非用戶提交的查詢語句中含有笛卡爾積連接操作), 同時將語句中的關系表的連接關系以一個圖的形式表示,最后在圖中搜索最優(yōu)執(zhí)行計劃; 所述以圖的形式表示語句的連接關系如下圖中的點表示查詢語句中的關系,如果圖中某 兩個點所對應的關系有連接操作(包括內(nèi)連接和外連接),則連接這兩點,邊的權值為兩關 系連接操作的執(zhí)行代價;所述在圖中搜索最優(yōu)執(zhí)行計劃的方案包含如下一些步驟步驟一從圖中任一點出發(fā),在圖中找出一條以該點為起始點的連接通路,該連接 通路對應原查詢語句的一個執(zhí)行計劃,同時使得該執(zhí)行計劃為從該點出發(fā)所對應的代價最 小的執(zhí)行計劃;步驟二 依次從圖中其它各點出發(fā),同樣得出以這些點為起始點的連接通路,使得 該連接通路所對應的執(zhí)行計劃的代價最小;步驟三比較前兩步得出的所有連接通路所對應的執(zhí)行計劃的代價,得出代價最 小的連接通路;步驟四得出代價最小的連接通路后,采用本發(fā)明自定義的動態(tài)分配方案將該通 路中各個操作分配到各線程執(zhí)行。上述方案中,所述步驟一從圖中某一點為起始點搜索代價最小的連接通路包括以 下一些步驟
a、計算圖中與該點相關的所有邊的權值;b、設定連接通路的第一條邊;C、用新的點替換第一條邊,重新計算與該點相關的邊的權值;d、設定連接通路的第二條邊;e、依次下去直到遍歷完圖中所有的點。優(yōu)選的,所述計算邊的權值即計算邊所對應的連接操作的執(zhí)行時間,具體方案如 下若通過關系表的索引信息訪問該關系表中一條記錄的平均時間為乃,通過嵌套循 環(huán)訪問關系表中一條記錄的平均時間為六,對關系表建立臨時索引時每個元組消耗的平均 時間為對于某一連接操作代M R2,關系隊和&的元組個數(shù)分別為N1, N2 ;如果R1上建有相應的索引且&上沒有建立索弓丨,則該操作的時間開銷為 T=min(N2*E,隊氺隊氺&);如果&上建有相應索引且隊上沒有建立相關索弓丨,則該操作的時間開銷為 T=m in (N1^ri, N1^N2* Tc);如果R1和R2上均建有相關索弓丨,則該操作的時間開銷為T=min (N2*Γ,, N1* 元,N1^N2* Tc);如果隊和&上都沒有相關索弓丨,在對隊和&都沒有進行預處理的情 況下執(zhí)行時間為T=N^N2*天;現(xiàn)在通過建立臨時索引的方式執(zhí)行上述操作,若 對R1建立臨時索弓丨,則執(zhí)行時間為N1*萬+N2*乃,若對&建立臨時索弓丨,則執(zhí)行時 間為N2* +Ν,^,故在關系表隊和1 2都沒有索引的情況下的執(zhí)行時間代價為 T=min (N1^N2* Tc, N1* Tt+^f1, N2* 冗+隊*力)。更為優(yōu)選的,所述步驟四將通路中各個操作動態(tài)分配到線程中并發(fā)執(zhí)行的步驟如 下假設最優(yōu)執(zhí)行計劃所對應的連接通路中有η個操作,有m個線程并行執(zhí)行;a)將連接通路中前m個操作分別在m個線程中執(zhí)行,并記錄m個線程中執(zhí)行時間 最短的線程;b)將連接通路中下一個操作直接投放到執(zhí)行時間最短的線程,并重新更新線程池 中執(zhí)行時間最短的線程;c)如果連接通路中還有操作未執(zhí)行則執(zhí)行步驟二。本發(fā)明由于采用了上述結構,可以在并行執(zhí)行環(huán)境下得出最優(yōu)執(zhí)行計劃。
下面結合附圖和具體實施方式
對本發(fā)明的技術方案作進一步具體說明。圖1是以圖表示查詢語句中關系表的連接狀態(tài);圖2是搜索最優(yōu)執(zhí)行計劃的流程圖;圖3是計算計劃執(zhí)行代價的流程圖。
具體實施例方式圖1是本發(fā)明中如何以圖的形式表示查詢語句中關系表的連接狀態(tài)的示意圖。在 該例中包含有A,B, C,D,E,F(xiàn)六個關系,故在圖中相應有A,B, C,D,E,F(xiàn)六個節(jié)點,圖中節(jié)點 分別對應查詢語句中的關系。因為查詢語句中A,B兩關系有連接操作,故在圖中相應連接 A,B兩節(jié)點,同樣因A,C兩關系亦有連接操作,在圖中也相應連接A,C兩節(jié)點,依次類推,將 查詢語句中所有的相關操作在圖中都用相應的邊予以連接。圖2是本發(fā)明在圖中搜索最優(yōu)執(zhí)行計劃的流程圖。系統(tǒng)初始化時設定當前最優(yōu)執(zhí) 行計劃L。ld的執(zhí)行時間Cost(L。ld)為無窮大。從圖中任一點出發(fā)可以搜索得到一個連接通 路,該連接通路即對應從該點出發(fā)得到的最優(yōu)執(zhí)行計劃。同樣,從圖中其它點出發(fā)也可得到 其它的執(zhí)行計劃,這樣如果圖中含有η個點則可得到η個執(zhí)行計劃,比較η個計劃的執(zhí)行時 間,選取執(zhí)行時間最短的執(zhí)行計劃作為最終的最優(yōu)執(zhí)行計劃。該流程包含如下一些步驟步驟201 判斷圖中是否存在未作為起始點進行搜索的點,如果有則執(zhí)行步驟 202,如果沒有則直接提交系統(tǒng)當前最優(yōu)執(zhí)行計劃并退出;步驟202 判斷是否有與該點相連的邊,如果沒有則說明從步驟201中的起始點出 發(fā)的連接通路已經(jīng)通過了圖中所有的點,故無需繼續(xù)搜索下去,然后執(zhí)行步驟206;如果有 與該點相連的邊,則執(zhí)行步驟203 ;步驟203 計算與步驟202中的點相連的邊的權值,該權值即為查詢語句中所有與 該點有連接(包括內(nèi)連接和外連接)操作的執(zhí)行時間;步驟204 將步驟203中計算得到的權值最小的邊作為連接通路的下一條邊;步驟205 在圖中將204中所確定的邊以一個新的點予以代替,并再次執(zhí)行步驟 202 ;步驟206 連接通路中包含有原圖中所有的點后即可結束該搜索過程,并得出從 步驟201的起始點出發(fā)所得出的最佳連接通路Lnew ;步驟207 比較步驟206得到的連接通路與系統(tǒng)當前最佳連接通路的執(zhí)行時間,如 果步驟206得到的連接通路的執(zhí)行時間較小,則執(zhí)行步驟208,否則保留當前系統(tǒng)最佳連接 通路并執(zhí)行步驟201 ;步驟208 將步驟206中得到的連接通路替換掉系統(tǒng)當前最佳連接通路并執(zhí)行步 驟 201。圖3是本發(fā)明中計算連接通路所對應的執(zhí)行計劃在并發(fā)執(zhí)行環(huán)境下執(zhí)行時間的 流程圖。本發(fā)明搜索最優(yōu)連接通路時,由于從任一點出發(fā)均可得到一個連接通路,在比較連 接通路的執(zhí)行代價時,即借助該流程計算出連接通路的執(zhí)行時間,再進行比較。該流程包含 如下一些步驟步驟301 判斷連接通路中的操作數(shù)和并發(fā)執(zhí)行線程個數(shù)的大小。如果操作數(shù)較 多則執(zhí)行步驟304,如果線程數(shù)目較多則執(zhí)行步驟302 ;步驟302 將連接通路中的操作依次投放到線程中執(zhí)行;步驟303 確定該連接通路的執(zhí)行時間為該通路中所有操作的執(zhí)行時間的最大者;步驟304 如果步驟301中連接通路中的操作數(shù)較多,則首先將連接通路中前m個 操作投放到m個線程中依次執(zhí)行;步驟305 更新并記錄下當前線程中執(zhí)行時間最短的線程的序列i和最短的執(zhí)行時間;步驟306 判斷連接通路中是否有未被執(zhí)行的操作,如果有則執(zhí)行步驟307,如果 沒有則執(zhí)行步驟308 ;步驟307 將連接通路中下一個操作投放到由步驟305確定的執(zhí)行時間最短的線 程執(zhí)行,并執(zhí)行步驟305;步驟308 連接通路中所有操作都投放到線程中執(zhí)行后,計算該連接通路所對應 的執(zhí)行計劃的總的執(zhí)行時間為所有線程中總的最長執(zhí)行時間。最后所應說明的是,以上具體實施方式
僅用以說明本發(fā)明的技術方案而非限制, 盡管參照較佳實施例對本發(fā)明進行了詳細說明,本領域的普通技術人員應當理解,可以對 本發(fā)明的技術方案進行修改或者等同替換,而不脫離本發(fā)明技術方案的精神和范圍,其均 應涵蓋在本發(fā)明的權利要求范圍當中。
權利要求
1.一種數(shù)據(jù)庫查詢中最優(yōu)執(zhí)行計劃的搜索方法,其特征在于,所述方法包括在執(zhí)行計 劃的搜索過程中不予考慮含有笛卡爾積連接操作的執(zhí)行計劃,除非用戶提交的查詢語句中 含有笛卡爾積連接操作,同時將語句中的關系表的連接關系以一個圖的形式表示,最后在 圖中搜索最優(yōu)執(zhí)行計劃;所述以圖的形式表示語句的連接關系如下圖中的點表示查詢語 句中的關系,如果圖中某兩個點所對應的關系有連接操作,該連接操作包括內(nèi)連接和外連 接,則連接這兩點,邊的權值為兩關系連接操作的執(zhí)行代價;所述在圖中搜索最優(yōu)執(zhí)行計劃的方案包含如下一些步驟步驟一從圖中任一點出發(fā),在圖中找出一條以該點為起始點的連接通路,該連接通路 對應原查詢語句的一個執(zhí)行計劃,同時使得該執(zhí)行計劃為從該點出發(fā)所對應的代價最小的 執(zhí)行計劃;步驟二依次從圖中其它各點出發(fā),同樣得出以這些點為起始點的連接通路,使得該連 接通路所對應的執(zhí)行計劃的代價最??;步驟三比較前兩步得出的所有連接通路所對應的執(zhí)行計劃的代價,得出代價最小的 連接通路;步驟四得出代價最小的連接通路后,采用本發(fā)明自定義的動態(tài)分配方案將該通路中 各個操作分配到各線程執(zhí)行。
2.根據(jù)權利要求1所述的一種數(shù)據(jù)庫查詢中最優(yōu)執(zhí)行計劃的搜索方法,其特征在于, 所述步驟一從圖中某一點為起始點搜索代價最小的連接通路包括以下一些步驟a、計算圖中與該點相關的所有邊的權值;b、設定連接通路的第一條邊;C、用新的點替換第一條邊,重新計算與該點相關的邊的權值;d、設定連接通路的第二條邊;e、依次下去直到遍歷完圖中所有的點。
3.根據(jù)權利要求2所述的一種數(shù)據(jù)庫查詢中最優(yōu)執(zhí)行計劃的搜索方法,其特征在于, 所述計算邊的權值即計算邊所對應的連接操作的執(zhí)行時間,具體方案如下若通過關系表的索引信息訪問該關系表中一條記錄的平均時間為乃,通過嵌套循環(huán)訪 問關系表中一條記錄的平均時間為六,對關系表建立臨時索引時每個元組消耗的平均時間 為〒t ;對于某一連接操作代M R2,關系R1和&的元組個數(shù)分別為N1, N2 ;如果R1上建有相應的索引且&上沒有建立索弓丨,則該操作的時間開銷為 T=min(N2氺云’ N1^N2*Tc);如果&上建有相應索引且R1上沒有建立相關索弓丨,則該操作的時間開銷為 T=m in (N1^ri, N1^N2* Tc);如果R1和&上均建有相關索弓丨,則該操作的時間開銷為T=min(N2*h, N1氺云’ N1^N2* Tc);如果R1和&上都沒有相關索弓丨,在對R1和&都沒有進行預處理的情況下 執(zhí)行時間為T=N^N2*六;現(xiàn)在通過建立臨時索引的方式執(zhí)行上述操作,若對R1建 立臨時索弓丨,則執(zhí)行時間為N1*萬+N2*云,若對&建立臨時索弓丨,則執(zhí)行時間 為N2* Tt+K^ft,故在關系表R1和&都沒有索引的情況下的執(zhí)行時間代價為
4.根據(jù)權利要求1或2所述的一種數(shù)據(jù)庫查詢中最優(yōu)執(zhí)行計劃的搜索方法,其特征在 于,所述步驟四將通路中各個操作動態(tài)分配到線程中并發(fā)執(zhí)行的步驟如下假設最優(yōu)執(zhí)行計劃所對應的連接通路中有η個操作,有m個線程并行執(zhí)行;a)將連接通路中前m個操作分別在m個線程中執(zhí)行,并記錄m個線程中執(zhí)行時間最短 的線程;b)將連接通路中下一個操作直接投放到執(zhí)行時間最短的線程,并重新更新線程池中執(zhí) 行時間最短的線程;c)如果連接通路中還有操作未執(zhí)行則執(zhí)行步驟二。
5.根據(jù)權利要求3所述的一種數(shù)據(jù)庫查詢中最優(yōu)執(zhí)行計劃的搜索方法,其特征在于, 所述步驟四將通路中各個操作動態(tài)分配到線程中并發(fā)執(zhí)行的步驟如下假設最優(yōu)執(zhí)行計劃所對應的連接通路中有η個操作,有m個線程并行執(zhí)行;a)將連接通路中前m個操作分別在m個線程中執(zhí)行,并記錄m個線程中執(zhí)行時間最短 的線程;b)將連接通路中下一個操作直接投放到執(zhí)行時間最短的線程,并重新更新線程池中執(zhí) 行時間最短的線程;c)如果連接通路中還有操作未執(zhí)行則執(zhí)行步驟二。
全文摘要
本發(fā)明涉及一種數(shù)據(jù)庫查詢中最優(yōu)執(zhí)行計劃的搜索方法,包括在執(zhí)行計劃的搜索過程中不予考慮含有笛卡爾積連接操作的執(zhí)行計劃(除非用戶提交的查詢語句中含有笛卡爾積連接操作),同時將語句中的關系表的連接關系以一個圖的形式表示,最后在圖中搜索最優(yōu)執(zhí)行計劃;所述以圖的形式表示語句的連接關系如下圖中的點表示查詢語句中的關系,如果圖中某兩個點所對應的關系有連接操作(包括內(nèi)連接和外連接),則連接這兩點,邊的權值為兩關系連接操作的執(zhí)行代價。本發(fā)明由于采用了上述結構,可以在并行執(zhí)行環(huán)境下得出最優(yōu)執(zhí)行計劃。
文檔編號G06F17/30GK102081678SQ20111006050
公開日2011年6月1日 申請日期2011年3月14日 優(yōu)先權日2011年3月14日
發(fā)明者余國銳, 王非, 鄧磊, 黃本雄 申請人:華中科技大學