两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

嵌入式數(shù)據(jù)庫查詢的處理方法

文檔序號:6595895閱讀:580來源:國知局

專利名稱::嵌入式數(shù)據(jù)庫查詢的處理方法
技術(shù)領(lǐng)域
:本發(fā)明涉及數(shù)據(jù)庫管理系統(tǒng),尤其涉及嵌入式數(shù)據(jù)庫查詢的處理方法。
背景技術(shù)
:數(shù)據(jù)庫系統(tǒng)是管理信息系統(tǒng)的核心,從大多數(shù)系統(tǒng)的應(yīng)用實例來看,查詢操作在各種數(shù)據(jù)庫操作中所占據(jù)的比重最大。數(shù)據(jù)庫管理系統(tǒng)中對數(shù)據(jù)庫查詢操作性能影響最大的是查詢處理器,查詢處理器負(fù)責(zé)把用戶的查詢進行分解、優(yōu)化,并且執(zhí)行之,產(chǎn)生用戶需要的查詢結(jié)果,是數(shù)據(jù)庫管理系統(tǒng)中最重要的組成部分之一。數(shù)據(jù)庫管理系統(tǒng)的查詢處理器由三部分功能組成查詢分析器、查詢優(yōu)化器和執(zhí)行引擎。查詢分析器負(fù)責(zé)對文本形式的查詢進行分析并轉(zhuǎn)化為用戶所提交的SQL語句的集合,即轉(zhuǎn)化為查詢計劃。查詢優(yōu)化器負(fù)責(zé)把查詢計劃轉(zhuǎn)化為對于實際數(shù)據(jù)最有效的操作序列,數(shù)據(jù)庫管理系統(tǒng)處理查詢計劃的過程是這樣的在做完查詢語句的詞法、語法檢查之后,將語句提交給數(shù)據(jù)庫管理系統(tǒng)的查詢優(yōu)化器,查詢優(yōu)化器首先要對各個操作進行復(fù)雜的代價估計,完成代數(shù)優(yōu)化和存取路徑的優(yōu)化;然后對各種查詢計劃方案進行啟發(fā)式選擇,由預(yù)編譯模塊對語句進行處理并生成優(yōu)化的查詢計劃,該優(yōu)化的查詢計劃是經(jīng)過優(yōu)化處理之后所產(chǎn)生的語句集合;最后選出一個最高效的查詢計劃,在合適的時間提交給系統(tǒng)處理執(zhí)行,將執(zhí)行結(jié)果返回給用戶。執(zhí)行引擎負(fù)責(zé)按照查詢規(guī)劃的操作序列順序調(diào)度每一個操作以完成相應(yīng)的功能,產(chǎn)生最后用戶需要的查詢結(jié)果。在傳統(tǒng)的數(shù)據(jù)庫產(chǎn)品(如Oracle、Sybase等)的高版本中都是采用基于代價的優(yōu)化方法,通過啟發(fā)式等方法對整個查詢進行代價估計,估算查詢中各個代數(shù)操作的代價,得出一個最優(yōu)化的查詢處理策略,并以I/O操作作為一個優(yōu)化的主要依據(jù)。但對于嵌入式數(shù)據(jù)庫來說,由于嵌入式數(shù)據(jù)庫通常處理數(shù)據(jù)量較少,一般在內(nèi)存進行數(shù)據(jù)處理,涉及的I/O操作較少,因此傳統(tǒng)查詢的處理方法在嵌入式數(shù)據(jù)庫上必將帶來低效的性能,不適合以小巧和靈活為特色的嵌入式數(shù)據(jù)庫。
發(fā)明內(nèi)容本發(fā)明的目的在于提供一種嵌入式數(shù)據(jù)庫查詢的處理方法,以在嵌入式數(shù)據(jù)庫中實現(xiàn)簡潔、有效的查詢處理,提高嵌入式數(shù)據(jù)庫查詢效率。本發(fā)明通過以下具體技術(shù)方案實現(xiàn)一種嵌入式數(shù)據(jù)庫查詢的處理方法,該方法至少包括以下步驟A)判斷查詢條件中是否含有合并操作邏輯運算符,如果沒有,則判斷該查詢?yōu)閱伪聿樵冞€是多表查詢,如果是單表查詢,則判斷被投影的各域是否出現(xiàn)在選擇條件中,如果是,則先生成投影操作節(jié)點,再生成選擇操作節(jié)點,然后執(zhí)行步驟B,否則,先生成選擇操作節(jié)點,再生成投影操作節(jié)點,然后執(zhí)行步驟B,如果是多表查詢,則先把查詢條件中的單表查詢條件和連接查詢條件分開,然后將所有連接查詢條件左右兩端的表和連接信息建立一連接操作隊列,最后依次取出連接操作隊列中的表,依次生成所取表的單表查詢計劃子樹,把當(dāng)前子樹節(jié)點和上一子樹節(jié)點形成一個連接操作節(jié)點,以此循環(huán)直至連接操作隊列為空,然后執(zhí)行步驟B,如果查詢條件中含有合并操作邏輯運算符,則由所述合并操作邏輯運算符分隔的各個條件表達式產(chǎn)生查詢計劃子樹,然后在所述的查詢子樹中選出兩個作為源數(shù)據(jù)生成合并操作節(jié)點,該合并操作節(jié)點再和下一個查詢計劃子樹的根節(jié)點作為源數(shù)據(jù)生成合并操作節(jié)點,以此循環(huán)直至查詢條件中合并操作均對應(yīng)有一合并操作節(jié)點,將最后的合并操作節(jié)點作為查詢計劃樹根節(jié)點,形成查詢計劃樹,然后執(zhí)行步驟C;B)判斷是否需要排序,如果是,則判斷是否需要消除重復(fù)記錄,如果是則生成消除重復(fù)操作的樹節(jié)點,將該樹節(jié)點指向上一樹節(jié)點,再將當(dāng)前操作節(jié)點作為根節(jié)點,形成查詢計劃樹,否則生成排序樹節(jié)點,將該排序樹節(jié)點指向上一樹節(jié)點,再將當(dāng)前操作節(jié)點作為根節(jié)點,形成查詢計劃樹,如果不需要排序,則將當(dāng)前操作節(jié)點作為根節(jié)點,形成查詢計劃樹;C)后序遍歷查詢計劃樹,并且執(zhí)行每一個樹節(jié)點上的操作;D)釋放所述查詢計劃數(shù)。其中,步驟B所述的生成排序樹節(jié)點、將該排序樹節(jié)點指向上一樹節(jié)點步驟可以進一步包括先初始化排序操作節(jié)點,然后將所述排序操作節(jié)點的左指針指向上一個節(jié)點;所述生成消除重復(fù)操作的樹節(jié)點、將該樹節(jié)點指向上一樹節(jié)點的步驟進一步包括先初始化排序操作節(jié)點,接著將排序操作節(jié)點的左指針指向上一個節(jié)點,然后初始化消除重復(fù)操作節(jié)點,最后將消除重復(fù)操作節(jié)點的左指針指向上一個節(jié)點。較佳地,步驟A所述的單表查詢的步驟可以進一步包括以下步驟判斷查詢中是否存在選擇條件,如果存在選擇條件,則判斷查詢域的個數(shù)是否小于總的域數(shù),如果是,則在被投影的各域出現(xiàn)在選擇條件中時,先初始化選擇操作節(jié)點,再初始化投影操作節(jié)點,最后將投影操作節(jié)點的左指針指向選擇操作節(jié)點,在被投影的各域不出現(xiàn)在選擇條件中時,先初始化投影操作節(jié)點,再初始化選擇操作節(jié)點,最后將選擇操作節(jié)點的左指針指向投影操作節(jié)點;如果不存在選擇條件或者查詢域的個數(shù)不小于總的域數(shù),則生成選擇操作節(jié)點并初始化。較佳地,步驟A所述建立連接操作隊列的步驟可以進一步包括01)判斷連接查詢條件個數(shù)是否大于0,如果是,則先將第一個連接查詢條件的左邊的表入隊,再將第一個連接查詢條件的右邊的表和連接信息入隊,然后執(zhí)行步驟02,否則轉(zhuǎn)至步驟03;02)判斷是否還有未處理的連接查詢條件,如果是,判斷所述未處理的連接查詢條件左右兩端的表中是否已有一個表在隊列中,如果所述未處理的連接查詢條件左右兩端的表中已有一個表在隊列中,則把該連接查詢條件的另一個表和連接信息入隊,然后返回步驟02,如果所述未處理的連接查詢條件左右兩端的表中沒有任一個表在隊列中,則從查詢的所有表中順序取一個不在隊列中的表,把連接比較符設(shè)為笛卡爾積并入隊,然后返回步驟02,如果沒有未處理的連接查詢條件,則執(zhí)行步驟03;03)把其余不在連接條件中且不在隊中的表依次加入隊列,,再把連接比較符設(shè)為笛卡爾積并入隊。較佳地,步驟A所述依次取出連接操作隊列中的表、依次生成所取表的單表查詢計劃子樹、把當(dāng)前子樹節(jié)點和上一子樹節(jié)點形成一個連接操作節(jié)點的步驟可以進一步包括001)判斷依次從連接操作隊列中取出的一個表上是否有選擇和投影操作,如果有,則生成該表上的單表查詢計劃子樹,并將該單表查詢計劃子樹作為左子樹,否則轉(zhuǎn)至所述步驟B;002)判斷連接操作隊列是否為空,如果是則返回步驟001,否則,從連接操作隊列中取出一個表和連接條件,根據(jù)單表查詢計劃樹的生成該表的單表查詢計劃子樹,并將該單表查詢計劃子樹作為右子樹,然后根據(jù)連接條件初始化連接操作節(jié)點,再將連接操作節(jié)點的左右指針分別指向左右子樹,本連接操作節(jié)點作為下次連接操作的左子樹。較佳地,所述步驟C可以進一步包括判斷根節(jié)點是否不空,如果是則先遞歸調(diào)用后續(xù)遍歷執(zhí)行左子樹,接著遞歸調(diào)用后續(xù)遍歷執(zhí)行右子樹,最后執(zhí)行根節(jié)點上的操作,否則結(jié)束后續(xù)遍歷查詢計劃樹。較佳地,所述步驟D可以進一步包括判斷根節(jié)點是否不空,如果是,則先遞歸調(diào)用后續(xù)遍歷釋放左子樹,接著遞歸調(diào)用后續(xù)遍歷釋放右子樹,最后釋放根節(jié)點,否則結(jié)束釋放查詢計劃樹。較佳地,所述的查詢計劃樹可以采用二叉樹的存儲結(jié)構(gòu)表示。較佳地,所述查詢計劃樹節(jié)點可以存儲有操作編號、選擇操作信息指針、投影操作信息指針、連接操作信息指針、排序操作信息指針、合并操作信息指針、消除重復(fù)操作信息指針、操作結(jié)果信息指針、左子樹指針以及右子樹指針。本發(fā)明針對傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)中查詢的處理方法的不足,根據(jù)嵌入式系統(tǒng)特點,并結(jié)合嵌入式數(shù)據(jù)庫存儲結(jié)構(gòu)和數(shù)據(jù)操作算法的特點,定制了查詢分解優(yōu)化規(guī)則,根據(jù)該優(yōu)化規(guī)則和查詢信息直接產(chǎn)生效率較高的查詢計劃樹,尤其能夠優(yōu)化產(chǎn)生查詢計劃二叉樹的過程,通過建立連接操作隊列,提高了多表查詢的處理效率,從而提高了嵌入式數(shù)據(jù)庫系統(tǒng)中的查詢處理器對查詢的處理效率。相對于以I/O操作為代價和啟發(fā)式選擇查詢計劃樹的傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)查詢的處理方法,本發(fā)明不必對各個操作進行復(fù)雜的代價估算,節(jié)約了執(zhí)行各個操作的時間,更適合以小巧和靈活為特色的嵌入式數(shù)據(jù)庫,對于嵌入式系統(tǒng)數(shù)據(jù)庫的應(yīng)用和推廣起到積極的作用。圖1為查詢計劃二叉樹產(chǎn)生的總體流程圖;圖2為查詢條件中有合并操作的查詢計劃二叉樹生成示意圖;圖3為單表查詢產(chǎn)生查詢計劃樹的流程圖;圖4為多表查詢的查詢計劃樹產(chǎn)生方法中第二步所述建立連接操作隊列的流程圖;圖5為一查詢SQL語句建立連接操作隊列的示意圖;圖6為多表查詢的查詢計劃樹產(chǎn)生方法中第三步所述連接操作隊列中元素依次出隊,形成計劃樹的流程圖;圖7為一查詢SQL語句的查詢計劃二叉樹示意圖;圖8為后續(xù)遍歷查詢計劃樹并執(zhí)行各個樹節(jié)點上的操作的流程圖;圖9為釋放查詢計劃樹的流程圖。具體實施例方式為使本發(fā)明的目的、技術(shù)方案、及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進一步詳細說明。在嵌入式數(shù)據(jù)庫中,從一條查詢SQL語句中共可以分解出六類操作,分別是選擇操作、投影操作、連接操作、排序操作、消除重復(fù)操作、合并操作。其中,選擇操作也稱為過濾操作,是從一個指定的關(guān)系表中選出滿足一定條件的所有記錄。投影操作就是從一個指定關(guān)系表中去掉某些域。連接操作指從兩個表中各指定一個域,選出在這兩個域上滿足比較條件的所有記錄。排序操作指在某個指定域把所有記錄按指定的順序進行排序。消除重復(fù)操作指把一條記錄鏈中的重復(fù)記錄去掉,保證記錄的唯一性。合并操作指把兩個結(jié)構(gòu)相同的表單中的所有記錄進行合并,形成一條記錄鏈。嵌入式數(shù)據(jù)庫采用二叉樹存儲結(jié)構(gòu)來表示查詢計劃。二叉樹節(jié)點中主要存儲的就是上述六類操作所需要的信息。二叉樹的樹節(jié)點的數(shù)據(jù)結(jié)構(gòu)如表1所示。其中,Command確定樹節(jié)點具體需要完成的操作,F(xiàn)ilterCond、ProjectCond、JoinCond、SortCond、DistinctCond和UnionCond六個指針分別是六個操作的信息,指針是否為空由Command來決定。例如某樹節(jié)點是選擇操作節(jié)點,則FilterCond指針存儲的是選擇條件信息的內(nèi)存地址,其他五個操作指針都為空。SqlResult指針存儲的是樹節(jié)點操作結(jié)果信息的內(nèi)存地址。LsubTree和RsubTree分別指向樹節(jié)點的左右子樹。表1二叉樹的樹節(jié)點的數(shù)據(jù)結(jié)構(gòu)本發(fā)明提供的嵌入式數(shù)據(jù)庫查詢的處理方法包括以下三步第一步,根據(jù)查詢信息和優(yōu)化規(guī)則直接產(chǎn)生優(yōu)化的查詢計劃,該查詢計劃采用上述二叉樹的存儲結(jié)構(gòu)來表示,也稱為查詢計劃二叉樹,樹節(jié)點的數(shù)據(jù)結(jié)構(gòu)如上述表1所示;第二步,后序遍歷上述查詢計劃二叉樹,并且執(zhí)行每一個樹節(jié)點上的操作;第三步,釋放上述查詢計劃二叉樹。由于查詢計劃優(yōu)化的好壞直接影響數(shù)據(jù)庫查詢性能,因此上述步驟中最重要的是第一步。下面詳細說明上述第一步查詢計劃二叉樹的產(chǎn)生以及查詢處理的實現(xiàn)方法。查詢計劃二叉樹形成的主要依據(jù)是查詢分解優(yōu)化規(guī)則,由這些優(yōu)化規(guī)則決定上述列出的六類操作節(jié)點在二叉樹中的位置,從而產(chǎn)生一個優(yōu)化、高效的查詢處理方法。根據(jù)數(shù)據(jù)庫的存儲結(jié)構(gòu)和各個操作的特點,數(shù)據(jù)庫的查詢分解優(yōu)化規(guī)則如下規(guī)則1,在選擇操作、投影操作、連接操作、排序操作、消除重復(fù)操作、合并操作六類操作中優(yōu)先處理投影操作。由于數(shù)據(jù)庫的記錄是在內(nèi)存中以記錄鏈的形式存在的,所以對于投影操作來說,只需要從每條記錄鏈中把被投影掉的域值空間釋放掉,而不需要進行記錄的查找和比較等操作,本身需要CPU時間少,優(yōu)先處理可以減少在其操作結(jié)果上的其他操作所需的時間。規(guī)則2,在選擇操作和投影操作同時存在的情況下,如果被投影的各域不出現(xiàn)在選擇條件表達式中,則根據(jù)步驟1,優(yōu)先作投影操作,否則,優(yōu)先作選擇操作。這是由于數(shù)據(jù)庫進行查詢時必須滿足查詢的正確性,不能先投影掉存在于選擇條件表達式中的域,否則,選擇操作結(jié)果的記錄個數(shù)將可能多于實際的記錄個數(shù)。規(guī)則3,在選擇操作、投影操作和連接操作同時存在的情況下,后處理連接操作。因為連接操作需要雙表操作,在數(shù)據(jù)庫中,需要在雙表上分別排序,進行記錄的循環(huán)比較,耗費CPU時間最多,所以最后處理該操作。規(guī)則4,將合并操作最后處理。因為在數(shù)據(jù)庫中,查詢處理器處理的查詢條件表達式都是析取范式,所以,只有在最后處理合并操作才能保證查詢的正確性。參見圖1所示,圖1為查詢計劃二叉樹產(chǎn)生的總體流程圖,根據(jù)上述優(yōu)化規(guī)則,查詢計劃二叉樹是這樣產(chǎn)生的判斷查詢條件中是否含有“or”邏輯運算符,如果有“or”,則根據(jù)優(yōu)化步驟4,由“or”分隔的各個條件表達式產(chǎn)生查詢計劃子樹,然后在子樹中選出兩個作為源數(shù)據(jù)生成合并操作節(jié)點,該節(jié)點再和下一個子樹的根節(jié)點作為源數(shù)據(jù)生成合并操作節(jié)點,以此類推,最后產(chǎn)生一個樹根節(jié)點,該樹根節(jié)點就是查詢計劃樹的根節(jié)點。如圖2所示,子樹1、子樹2、子樹3....子樹n分別為由“or”分隔的條件表達式產(chǎn)生的查詢計劃子樹,將子樹1和子樹2作為源數(shù)據(jù)生成合并操作節(jié)點1,合并操作節(jié)點1和子樹3作為源數(shù)據(jù)生成合并操作節(jié)點2,以此類推,直至查詢條件中合并操作均對應(yīng)有一合并操作節(jié)點,將最后產(chǎn)生的合并操作節(jié)點n為樹根節(jié)點。如果查詢條件中未含有“or”邏輯運算符,則判斷查詢?yōu)閱伪聿樵冞€是多表查詢,如果是單表查詢,則根據(jù)優(yōu)化規(guī)則1和2產(chǎn)生查詢計劃樹,如果是多表查詢,則根據(jù)優(yōu)化規(guī)則1、2和3產(chǎn)生查詢計劃樹。參見圖3所示,圖3為單表查詢產(chǎn)生查詢計劃樹的流程圖。其產(chǎn)生查詢計劃樹的步驟如下步驟301,判斷是否存在選擇條件,如果是,則執(zhí)行步驟302,否則執(zhí)行步驟310,初始化選擇操作節(jié)點,再轉(zhuǎn)至步驟304;步驟302,判斷查詢域的個數(shù)是否小于總的域數(shù),如果是,則執(zhí)行步驟303,否則執(zhí)行步驟310,初始化選擇操作節(jié)點,再轉(zhuǎn)至步驟304;步驟303,判斷被投影的各域是否出現(xiàn)在選擇條件中,如果是,則執(zhí)行步驟311,先初始化選擇操作節(jié)點,再初始化投影操作節(jié)點,最后將投影操作節(jié)點的左指針指向選擇操作節(jié)點,轉(zhuǎn)至步驟304,否則執(zhí)行步驟312,先初始化投影操作節(jié)點,再初始化選擇操作節(jié)點,最后將選擇操作節(jié)點的左指針指向投影操作節(jié)點,轉(zhuǎn)至步驟304;步驟304,判斷是否需要排序,如果是,則執(zhí)行步驟305,否則轉(zhuǎn)至步驟306;步驟305,判斷是否需要消除重復(fù)記錄,如果是,則執(zhí)行步驟307,先初始化排序操作節(jié)點,接著將排序操作節(jié)點的左指針指向上一個節(jié)點,然后初始化消除重復(fù)操作節(jié)點,最后將消除重復(fù)操作節(jié)點的左指針指向上一個節(jié)點,轉(zhuǎn)至步驟306,否則執(zhí)行步驟308,先初始化排序操作節(jié)點,后將排序操作節(jié)點的左指針指向上一個節(jié)點,轉(zhuǎn)至步驟306;步驟306,將當(dāng)前操作節(jié)點作為根節(jié)點返回。多表查詢的查詢計劃樹產(chǎn)生方法包括以下三步第一步,把查詢條件中的單表查詢條件和連接查詢條件分開;第二步,根據(jù)連接查詢條件建立連接操作隊列;第三步,連接操作隊列中的元素依次出隊,并形成計劃樹。參見圖4所示,圖4為多表查詢的查詢計劃樹產(chǎn)生方法中第二步所述建立連接操作隊列的流程圖。其過程如下步驟401,判斷連接查詢條件個數(shù)是否大于0,如果是,則執(zhí)行步驟402,否則執(zhí)行步驟406;步驟402,將第一個連接查詢條件的左邊的表入隊;步驟403,將第一個連接查詢條件的右邊的表和連接信息入隊;步驟404,判斷是否還有未處理的連接查詢條件,如果是,則執(zhí)行步驟405,否則,執(zhí)行步驟406;步驟405,判斷未處理的連接條件左右兩端的表中是否已有一個表在隊列中,如果是,則執(zhí)行步驟407,取出這個連接條件,把該連接查詢條件的另一個表和連接信息入隊,然后返回步驟404,否則,執(zhí)行步驟408,從查詢的所有表中順序取一個不在隊中的表,取出這個連接條件,把連接比較符設(shè)為笛卡爾積并入隊,然后返回步驟404;步驟406,把其余不在連接條件中且不在隊中的表依次加入隊列,并把連接比較符設(shè)為笛卡爾積。為更好說明上述建立連接操作隊列的方法,現(xiàn)用一簡單的例子說明。例如,查詢SQL語句為select*fromtable1,table2,table3,table4,table5wheretable1.a=table2.aandtable3.b=table4.b,建立連接操作隊列的過程如下,共5步第一步,由于第一個查詢條件和第二個查詢條件分別為table1.a=table2.a和table3.b=table4.b,查詢條件個數(shù)是否大于0,因此把第一個連接查詢條件table1.a=table2.a的左邊的表table1入隊,獲得隊列如圖5中的(a)圖;第二步,把第一個連接查詢條件table1.a=table2.a的右邊的表table2和連接信息table1.a=table2.a入隊,獲得隊列如圖5中的(b)圖;第三步,處理第二個查詢條件table3.b=table4.b,判斷該連接條件table3.b=table4.b左右兩端的表table3和table4中是否已有一個表在隊列中,發(fā)現(xiàn)table3和table4不在隊列中,則從查詢的表table1,table2,table3,table4,table5中順序取出一個不在隊列中的表,由于table1,table2已在第一步和第二步入隊,則取出的應(yīng)是table3,把table3入隊,將連接比較符“,”設(shè)為為笛卡爾積,用符號’*’表示,獲得隊列如圖5中的(c)圖;第四步,判斷連接條件table3.b=table4.b左右兩端的表table3和table4中是否已有一個表在隊列中,發(fā)現(xiàn)table3在隊列中,把另一個表table4和連接信息入隊,獲得隊列如圖5中的(d)圖;第五步,已經(jīng)沒有連接條件,把其余不在連接條件中且不在隊列中的表依次加入隊列并把連接比較符設(shè)為笛卡爾積,即將剩余的表table5入隊,連接比較符“,”設(shè)為笛卡爾積,用符號’*’表示,獲得隊列如圖5中的(e)圖。參見圖6所示,圖6為多表查詢的查詢計劃樹產(chǎn)生方法中第三步所述連接操作隊列中元素依次出隊,形成計劃樹的流程圖。其過程如下步驟601,從連接操作隊列中取出一個表;步驟602,判斷該表上是否有選擇和投影操作,如果有則執(zhí)行步驟603,根據(jù)單表查詢計劃樹的生成方法生成該表的單表查詢計劃子樹,開將該單表查詢計劃子樹作為左子樹,然后執(zhí)行步驟604,否則轉(zhuǎn)至步驟606;步驟604,判斷連接操作隊列是否為空,如果是則返回步驟601,否則執(zhí)行步驟605;步驟605,把本樹節(jié)點和上一個子樹節(jié)點形成一個連接操作節(jié)點,即從連接操作隊列中取出一個表和連接條件,根據(jù)單表查詢計劃樹生成該表的單表查詢計劃子樹,并將該單表查詢計劃子樹作為右子樹,然后根據(jù)連接條件初始化連接操作節(jié)點,再將連接操作節(jié)點的左右指針分別指向左右子樹,本連接操作節(jié)點作為下次連接操作的左子樹;步驟606,判斷是否需要排序,如果是則執(zhí)行步驟607,否則,轉(zhuǎn)至步驟610;步驟607,判斷是否需要消除重復(fù)記錄,如果是則執(zhí)行步驟608,否則,轉(zhuǎn)至步驟609,生成排序節(jié)點,排序節(jié)點指向上一樹節(jié)點,即初始化排序操作節(jié)點,將排序操作節(jié)點的左指針指向上一個節(jié)點,再執(zhí)行步驟610;步驟608,生成消除重復(fù)操作的樹節(jié)點,樹節(jié)點指向上一個樹節(jié)點,即先初始化排序操作節(jié)點,接著將排序操作節(jié)點的左指針指向上一個節(jié)點,然后初始化消除重復(fù)操作節(jié)點,最后將消除重復(fù)操作節(jié)點的左指針指向上一個節(jié)點,再執(zhí)行步驟610;步驟610,將當(dāng)前操作節(jié)點作為根節(jié)點。為更好地說明上述連接操作隊列中元素依次出隊,形成計劃樹的過程,現(xiàn)用一簡單的例子說明。例table1由兩個字符串類型的域構(gòu)成a,b;table2由兩個字符串類型的域構(gòu)成c,d。查詢SQL語句為select*fromtable1.a,table2.dwheretable1.a=’yangbl’andtable2.c=’dinggang’其查詢計劃樹是這樣生成的第一步,連接操作隊列中依次有table1、table2,由于被投影的域b不存在于選擇條件表達式table1.a=’yangbl’中,因此先進行投影操作,再進行選擇操作,從連接操作隊列中取出一個表table1,作為投影操作的左子樹,根據(jù)單表查詢計劃樹的生成方法,生成該表上的單表查詢計劃子樹,如圖7中虛線框701內(nèi)所示,該單表查詢計劃子樹作為查詢計劃樹的左子樹;第二步,由于被投影的域c存在選擇條件表達式table2.c=’dinggang’中,因此先進行選擇操作,再進行投影操作,從連接操作隊列中取出一個表table2,作為選擇操作的左子樹,根據(jù)單表查詢計劃樹的生成方法,生成該表上的單表查詢計劃子樹,如7圖中虛線框702內(nèi)所示,該單表查詢計劃子樹作為查詢計劃樹的右子樹;第三步,由于連接操作隊列為空,生成連接操作節(jié)點,第一步的左子樹和第二步的右子樹分別作為連接操作節(jié)點的左子樹和右子樹,由于SQL語句中沒有要求排序和消除重復(fù),所以該二叉樹沒有排序操作和消除重復(fù)操作的樹節(jié)點,連接操作節(jié)點作為根節(jié)點。以下說明嵌入式數(shù)據(jù)庫查詢的處理中的后序遍歷查詢計劃二叉樹和釋放上述查詢計劃二叉樹的步驟。參見圖8所示,圖8為后續(xù)遍歷查詢計劃樹并執(zhí)行各個樹節(jié)點上的操作的流程圖。判斷根節(jié)點是否不空,如果是則先遞歸調(diào)用后續(xù)遍歷執(zhí)行左子樹,接著遞歸調(diào)用后續(xù)遍歷執(zhí)行右子樹,最后執(zhí)行根節(jié)點上的操作,否則結(jié)束。參見圖9所示,圖9為釋放查詢計劃樹的流程圖。判斷根節(jié)點是否不空,如果是,則先遞歸調(diào)用后續(xù)遍歷釋放左子樹,接著遞歸調(diào)用后續(xù)遍歷釋放右子樹,最后釋放根節(jié)點,否則結(jié)束。權(quán)利要求1.一種嵌入式數(shù)據(jù)庫查詢的處理方法,其特征在于,該方法至少包括以下步驟A)判斷查詢條件中是否含有合并操作邏輯運算符,如果沒有,則判斷該查詢?yōu)閱伪聿樵冞€是多表查詢,如果是單表查詢,則判斷被投影的各域是否出現(xiàn)在選擇條件中,如果是,則先生成投影操作節(jié)點,再生成選擇操作節(jié)點,然后執(zhí)行步驟B,否則,先生成選擇操作節(jié)點,再生成投影操作節(jié)點,然后執(zhí)行步驟B,如果是多表查詢,則先把查詢條件中的單表查詢條件和連接查詢條件分開,然后將所有連接查詢條件左右兩端的表和連接信息建立一連接操作隊列,最后依次取出連接操作隊列中的表,依次生成所取表的單表查詢計劃子樹,把當(dāng)前子樹節(jié)點和上一子樹節(jié)點形成一個連接操作節(jié)點,以此循環(huán)直至連接操作隊列為空,然后執(zhí)行步驟B,如果查詢條件中含有合并操作邏輯運算符,則由所述合并操作邏輯運算符分隔的各個條件表達式產(chǎn)生查詢計劃子樹,然后在所述的查詢子樹中選出兩個作為源數(shù)據(jù)生成合并操作節(jié)點,該合并操作節(jié)點再和下一個查詢計劃子樹的根節(jié)點作為源數(shù)據(jù)生成合并操作節(jié)點,以此循環(huán)直至查詢條件中合并操作均對應(yīng)有一合并操作節(jié)點,將最后的合并操作節(jié)點作為查詢計劃樹根節(jié)點,形成查詢計劃樹,然后執(zhí)行步驟C;B)判斷是否需要排序,如果是,則判斷是否需要消除重復(fù)記錄,如果是則生成消除重復(fù)操作的樹節(jié)點,將該樹節(jié)點指向上一樹節(jié)點,再將當(dāng)前操作節(jié)點作為根節(jié)點,形成查詢計劃樹,否則生成排序樹節(jié)點,將該排序樹節(jié)點指向上一樹節(jié)點,再將當(dāng)前操作節(jié)點作為根節(jié)點,形成查詢計劃樹,如果不需要排序,則將當(dāng)前操作節(jié)點作為根節(jié)點,形成查詢計劃樹;C)后序遍歷查詢計劃樹,并且執(zhí)行每一個樹節(jié)點上的操作;D)釋放所述查詢計劃數(shù)。2.如權(quán)利要求1所述的處理方法,其特征在于,步驟B所述的生成排序樹節(jié)點、將該排序樹節(jié)點指向上一樹節(jié)點步驟進一步包括先初始化排序操作節(jié)點,然后將所述排序操作節(jié)點的左指針指向上一個節(jié)點;所述生成消除重復(fù)操作的樹節(jié)點、將該樹節(jié)點指向上一樹節(jié)點的步驟進一步包括先初始化排序操作節(jié)點,接著將排序操作節(jié)點的左指針指向上一個節(jié)點,然后初始化消除重復(fù)操作節(jié)點,最后將消除重復(fù)操作節(jié)點的左指針指向上一個節(jié)點。3.如權(quán)利要求1所述的處理方法,其特征在于,步驟A所述的單表查詢的步驟進一步包括以下步驟判斷查詢中是否存在選擇條件,如果存在選擇條件,則判斷查詢域的個數(shù)是否小于總的域數(shù),如果是,則在被投影的各域出現(xiàn)在選擇條件中時,先初始化選擇操作節(jié)點,再初始化投影操作節(jié)點,最后將投影操作節(jié)點的左指針指向選擇操作節(jié)點,在被投影的各域不出現(xiàn)在選擇條件中時,先初始化投影操作節(jié)點,再初始化選擇操作節(jié)點,最后將選擇操作節(jié)點的左指針指向投影操作節(jié)點;如果不存在選擇條件或者查詢域的個數(shù)不小于總的域數(shù),則生成選擇操作節(jié)點并初始化。4.如權(quán)利要求1所述的處理方法,其特征在于,步驟A所述建立連接操作隊列的步驟進一步包括01)判斷連接查詢條件個數(shù)是否大于0,如果是,則先將第一個連接查詢條件的左邊的表入隊,再將第一個連接查詢條件的右邊的表和連接信息入隊,然后執(zhí)行步驟02,否則轉(zhuǎn)至步驟03;02)判斷是否還有未處理的連接查詢條件,如果是,判斷所述未處理的連接查詢條件左右兩端的表中是否已有一個表在隊列中,如果所述未處理的連接查詢條件左右兩端的表中已有一個表在隊列中,則把該連接查詢條件的另一個表和連接信息入隊,然后返回步驟02,如果所述未處理的連接查詢條件左右兩端的表中沒有任一個表在隊列中,則從查詢的所有表中順序取一個不在隊列中的表,把連接比較符設(shè)為笛卡爾積并入隊,然后返回步驟02,如果沒有未處理的連接查詢條件,則執(zhí)行步驟03;03)把其余不在連接條件中且不在隊中的表依次加入隊列,,再把連接比較符設(shè)為笛卡爾積并入隊。5.如權(quán)利要求1所述的處理方法,其特征在于,步驟A所述依次取出連接操作隊列中的表、依次生成所取表的單表查詢計劃子樹、把當(dāng)前子樹節(jié)點和上一子樹節(jié)點形成一個連接操作節(jié)點的步驟進一步包括001)判斷依次從連接操作隊列中取出的一個表上是否有選擇和投影操作,如果有,則生成該表上的單表查詢計劃子樹,并將該單表查詢計劃子樹作為左子樹,否則轉(zhuǎn)至所述步驟B;002)判斷連接操作隊列是否為空,如果是則返回步驟001,否則,從連接操作隊列中取出一個表和連接條件,根據(jù)單表查詢計劃樹的生成該表的單表查詢計劃子樹,并將該單表查詢計劃子樹作為右子樹,然后根據(jù)連接條件初始化連接操作節(jié)點,再將連接操作節(jié)點的左右指針分別指向左右子樹,本連接操作節(jié)點作為下次連接操作的左子樹。6.如權(quán)利要求1所述的處理方法,其特征在于,所述步驟C進一步包括判斷根節(jié)點是否不空,如果是則先遞歸調(diào)用后續(xù)遍歷執(zhí)行左子樹,接著遞歸調(diào)用后續(xù)遍歷執(zhí)行右子樹,最后執(zhí)行根節(jié)點上的操作,否則結(jié)束后續(xù)遍歷查詢計劃樹。7.如權(quán)利要求1所述的處理方法,其特征在于,所述步驟D進一步包括判斷根節(jié)點是否不空,如果是,則先遞歸調(diào)用后續(xù)遍歷釋放左子樹,接著遞歸調(diào)用后續(xù)遍歷釋放右子樹,最后釋放根節(jié)點,否則結(jié)束釋放查詢計劃樹。8.如權(quán)利要求1所述的處理方法,其特征在于,所述的查詢計劃樹采用二叉樹的存儲結(jié)構(gòu)表示。9.如權(quán)利要求1所述的處理方法,其特征在于,所述查詢計劃樹節(jié)點存儲有操作編號、選擇操作信息指針、投影操作信息指針、連接操作信息指針、排序操作信息指針、合并操作信息指針、消除重復(fù)操作信息指針、操作結(jié)果信息指針、左子樹指針以及右子樹指針。全文摘要本發(fā)明涉及數(shù)據(jù)庫管理系統(tǒng)領(lǐng)域,公開了一種嵌入式數(shù)據(jù)庫查詢的處理方法,該方法包括以下步驟判斷查詢條件中是否含有合并操作邏輯運算符,如果沒有,判斷該查詢?yōu)閱伪聿樵冞€是多表查詢,如果是單表查詢,則按優(yōu)化規(guī)則生成查詢計劃樹,如果是多表查詢,則先把查詢條件中的單表查詢條件和連接查詢條件分開,然后一連接操作隊列,最后依次取出連接操作隊列中的表,依次生成所取表的單表查詢計劃子樹,把當(dāng)前子樹節(jié)點和上一子樹節(jié)點形成一個連接操作節(jié)點,否則按最后處理合并操作的規(guī)則產(chǎn)生查詢計劃樹。本發(fā)明不必對各個操作進行復(fù)雜的代價估算,節(jié)約了執(zhí)行各個操作的時間,提高了嵌入式數(shù)據(jù)庫的查詢效率。文檔編號G06F17/30GK1492361SQ0214595公開日2004年4月28日申請日期2002年10月25日優(yōu)先權(quán)日2002年10月25日發(fā)明者楊柏梁,丁剛,孫雅莎申請人:聯(lián)想(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
视频| 榆林市| 杭锦旗| 兴义市| 乐昌市| 佛教| 镇雄县| 惠来县| 莱西市| 井冈山市| 旬阳县| 蒙阴县| 石景山区| 香港| 清镇市| 进贤县| 镇坪县| 铜川市| 绥中县| 宜城市| 渭南市| 奎屯市| 清流县| 隆安县| 阳城县| 华容县| 嘉义县| 三亚市| 淳化县| 揭西县| 静海县| 连江县| 长沙县| 玉环县| 和政县| 湖南省| 山西省| 禹城市| 合江县| 兴义市| 巩义市|