專利名稱:部分查詢緩存的制作方法
技術領域:
本發(fā)明涉及處理數(shù)據(jù)庫命令,并且特別地,涉及緩存查詢的結果集。
背景技術:
本部分所描述的方法是能夠進行的方法,但卻不一定是先前已經(jīng)設想或進行的方法。因此,除非另加指明,不應僅僅因為本部分所描述的任何方法包含在部分中而認為其是現(xiàn)有技術。類似地,除非另外指名,與方法一起說明的問題不應推測為已被現(xiàn)有技術所認知。
當數(shù)據(jù)庫服務器接收了表示執(zhí)行數(shù)據(jù)庫操作的請求的語句時,數(shù)據(jù)庫服務器可以生成執(zhí)行計劃。執(zhí)行計劃定義了數(shù)據(jù)庫服務器為了實現(xiàn)請求而執(zhí)行的步驟和操作。用于請求數(shù)據(jù)庫操作的語句可以是遵循諸如結構化查詢語言(SQL)等數(shù)據(jù)庫語言的數(shù)據(jù)庫命令的形式。
快速返回查詢結果集是理想的。隨著越來越多的人們使用數(shù)據(jù)庫來獲得他們尋找的信息,針對數(shù)據(jù)庫所發(fā)布的查詢相同的可能性增大。在一些系統(tǒng)中,存儲至少某些查詢的結果集。當接收到查詢時,執(zhí)行基于文本的搜索以找到先前執(zhí)行的查詢。如果發(fā)現(xiàn)相同的同一查詢(具有相同文本)被第二次提出,并且如果存儲了該查詢的結果集,則系統(tǒng)返回緩存結果集而不是第二次執(zhí)行查詢。使用該數(shù)據(jù)庫的人越多,則通過保存查詢的結果集所獲得的性能提高就越大。
但是,許多查詢并不是完全相同而是相似。許多查詢可能處理其結果集中的同一數(shù)據(jù)的子集。然而,由于查詢并不完全相同,所以不能重新使用可能與期望的結果集具有相同數(shù)據(jù)子集的緩存結果集,盡管結果集有相似性,但是仍要執(zhí)行每個相似的查詢。
基于以上所述,仍然需要存儲和重新使用查詢的結果集。
本發(fā)明在附圖中以實例的方式示出,但這并不用于限定本發(fā)明,其中,相同的參考標號表示相同的元件,在附圖中圖1是執(zhí)行計劃的示意圖;圖2是示出根據(jù)本發(fā)明實施例的執(zhí)行計劃操作符的方法的流程圖;圖3是示出根據(jù)本發(fā)明實施例的存儲結果集的方法的流程圖;圖4是示出可以實施本發(fā)明實施例的計算機系統(tǒng)的框圖。
具體實施例方式
以下描述了用于部分查詢緩存的方法和裝置。在以下的描述中,為了解釋的目的,描述了多個特定的細節(jié),以提供對本發(fā)明的透徹理解。然而,很顯然,在沒有這些特定細節(jié)的情況下,也可以實現(xiàn)本發(fā)明。在其它的實例中,以框圖形式示出已知的結構和設備,以避免不必要地使本發(fā)明不清楚。
下文中描述了可以彼此單獨使用或與其它特征結合使用的多個特征。然而,任一單個特征可能不能處理前文描述的多個問題,或僅僅處理前文描述的多個問題中的一個。上述的一些問題可能不能由本文描述的任一特征完全處理。雖然提供了標題,但是涉及特定標題但卻未存在于具有該標題的部分中的信息還可以存在于本說明書中的其它地方。
本文描述的方法使用先前被生成用于查詢的結果的至少一部分用于另一查詢的隨后計算。使用被生成用于由執(zhí)行查詢的計劃定義的操作的結果集作為執(zhí)行另一查詢的相同或相似操作的結果集。
執(zhí)行計劃數(shù)據(jù)庫服務器生成對于效率而言最優(yōu)的執(zhí)行計劃。當確定了在執(zhí)行計劃中包括什么步驟以及執(zhí)行步驟的順序時,數(shù)據(jù)庫服務器考慮影響效率的許多因素。例如,查詢可能請求包含第一列中的第一值以及第二列中的第二值的行。如果第一列被索引,則數(shù)據(jù)庫服務器可能生成使用該索引以更有效地訪問數(shù)據(jù)的執(zhí)行計劃。這樣的執(zhí)行計劃可能包括按下面指定的順序執(zhí)行的以下步驟。
1.訪問索引并生成包括第一列中的第一值的行的行ID。
2.獲得由行ID限定的行的集合。
3.以第二列中的第二值過濾行的集合。
查詢執(zhí)行計劃包括被稱為“計劃操作符”的步驟。計劃操作符定義了一組操作,其在執(zhí)行計劃中被執(zhí)行并且可以由數(shù)據(jù)庫服務器執(zhí)行以訪問一個或多個行源。行源可以是存儲在數(shù)據(jù)庫中的數(shù)據(jù)(例如,表中的一個或多個行),或者是另一計劃操作符的一個或多個輸出行。在Oracle 8i Concepts(甲骨文(Oracle)公司著,1999年二月)一書的第22-24章中解釋了執(zhí)行計劃。Oracle 8i Concepts中的內(nèi)容結合于此作為參考。
執(zhí)行計劃的示意圖執(zhí)行計劃可以由執(zhí)行計劃示意圖表示。圖1為執(zhí)行計劃示意圖,用于說明包括部分查詢緩存的執(zhí)行計劃實例的各種特征。在圖1中,(通過數(shù)據(jù)庫服務器)生成執(zhí)行計劃102用于查詢104。查詢104為以下查詢SELECT t1.col4,t2.col2FROM t1,t2WHERE t1.col1=t2.col2 AND t1.col3=192GROUP BY t1.col4;查詢104包含謂詞105,即,t1.col1=t2.col2和t1.col3=192。謂詞是定義被查詢的表中的行必須滿足的標準的邏輯表達式。
在執(zhí)行計劃102中,使用框來表示計劃操作符。具體來說,組計劃操作符106、連接計劃操作符108、掃描表和過濾計劃操作符112、掃描表計劃操作符116都是構成執(zhí)行計劃102的計劃操作符。在父計劃操作符和子計劃操作符之間的樹枝代表從子計劃操作符到父計劃操作符的行的流。因此,子計劃操作符的輸出行是到父計劃操作符的輸入行。計劃操作符在本文被描述為執(zhí)行計劃操作符本身定義的操作。然而,這僅僅是表示當數(shù)據(jù)庫服務器執(zhí)行計劃操作符時數(shù)據(jù)庫服務器正在執(zhí)行由計劃操作符定義的操作的便利方法。
在執(zhí)行計劃102中,掃描表和過濾計劃操作符112以及掃描表計劃操作符116分別執(zhí)行表t1的列col1以及表t2的列col2的掃描。但是,掃描表和過濾計劃操作符112附加地過濾表t1的被掃描的行,以便僅使具有col3=192的行被選擇并由此被包括在掃描表和過濾計劃操作符112的輸出中。連接計劃操作符108連接從掃描表和過濾計劃操作符112以及掃描表計劃操作符116輸出的行,以形成由連接計劃操作符108輸出的行。組計劃操作符106將由連接計劃操作符108創(chuàng)建的行分成組。組計劃操作符106的結果是,輸出中的每一行都代表不同的組(換句話說,輸出中的每個t1.col4都是唯一的)。
功能概述在部分查詢緩存中,計算查詢的各個計劃操作符的結果集并將其存儲在存儲區(qū)域中,用于其它查詢的潛在再利用。存儲區(qū)域是操作符輸出存儲器區(qū)域,將其稱作輸出存儲器。計劃操作符的結果集在此稱為緩存結果集。每個緩存結果集都將具有基于結果集的各個計劃操作符的定義所生成的簽名。具有相同或相似的定義并且進而潛在地具有相同或相似的結果集的計劃操作符將具有相同或相似的簽名。為了計算計劃操作符(即,為其生成結果),生成簽名用于計劃操作符,并用于搜索用于帶有相同簽名的緩存結果集的存儲區(qū)域。如果找到了緩存結果集,則可以進一步檢查緩存結果集的計劃操作符,以確定緩存結果集是否可被用作正被計算的計劃操作符的結果集。在另一實施例中,如果找到了給定簽名的緩存結果集,則對計劃操作符不做進一步檢查,并且將緩存結果集用作計劃操作符的結果集。如果沒有找到緩存結果集,則執(zhí)行計劃操作符。另外,可以將通過執(zhí)行計劃操作符生成的結果集存儲在輸出區(qū)域中,用于另一相應計劃操作符的后續(xù)使用。
在一實施例中,首先,通過從結果集中搜索計劃操作符來執(zhí)行整個查詢的搜索,其中,結果集包括了查詢的執(zhí)行計劃的所有計劃操作符。如果結果集沒有被存儲用于對應于整個查詢的計劃操作符,則對于構成執(zhí)行計劃的一個或多個計劃操作符,搜索輸出存儲器,以檢查是否存儲了緩存結果集用于相應的計劃操作符。
在一實施例中,從包括查找的最大部分的計劃操作符(如,包括整個查詢的計劃操作符)進行搜索,然后搜索包括查找的下一最大部分的計劃操作符,其包含在查詢的最大部分的計劃操作符中。換句話說,如果沒有找到父計劃操作符的緩存結果集,則搜索用于作為父計劃操作符的直接孩子的計劃操作符(如果有的話)的緩存結果集。
執(zhí)行查詢圖2是示出根據(jù)本發(fā)明實施例的執(zhí)行計劃操作符的方法200的流程圖。方法200示出了當執(zhí)行計劃操作符時執(zhí)行的步驟。在步驟201中,生成用于查詢的計劃操作符。在步驟202中,生成該計劃操作符的簽名。在步驟204中,通過執(zhí)行計劃操作符生成結果集。在步驟206中,將在步驟204中生成的結果集存儲在輸出存儲器(例如,高速緩存)中。輸出存儲器將在下文中討論。在步驟208中,以簽名(以及可選地,計劃操作符)與緩存結果集相關的方式存儲簽名(以及可選地,計劃操作符)。
圖3是示出根據(jù)本發(fā)明實施例的利用緩存結果集的方法300的流程圖。在步驟302中,生成計劃操作符用于查詢。在步驟303中,生成簽名用于正被評估的計劃操作符。在步驟304中,從輸出存儲器搜索緩存結果集。在執(zhí)行搜索的過程中,可以在正被評估的計劃操作符的簽名以及存儲的與緩存結果集相關的簽名之間進行比較。在一實施例中,可能需要嚴格匹配。在可選步驟306中,如果找到匹配,則執(zhí)行進一步的評估,其中,將存儲的計劃操作符與正被評估的計劃操作符進行比較,以確定緩存結果集是否可用。在步驟308中,如果步驟306包含在方法300中,那么如果在步驟306中確定緩存結果集可用,則返回緩存結果集(或者返回給用戶作為結果集,或者用作另一計劃操作符的輸入),而不執(zhí)行計劃操作符。在步驟308中,如果步驟306不包括在方法300中,那么如果在步驟304中找到匹配(例如,如果發(fā)現(xiàn)兩個簽名充分相似),則返回緩存結果集,而不執(zhí)行計劃操作符。
參照圖1,在實現(xiàn)方法300的過程中,當接收到查詢104時,數(shù)據(jù)庫服務器將查詢計劃102公式化。然后,數(shù)據(jù)庫服務器檢查計劃操作符輸出存儲器區(qū)域,以確定緩存結果集是否被存儲用于構成執(zhí)行計劃102的計劃操作符。首先搜索構成查詢的較大部分的計劃操作符,這是因為,如果找到了對應于構成較大部分的計劃操作符的結果集,則無需搜索構成包含在較大部分中的較小部分的計劃操作符。
例如,在執(zhí)行計劃102中,首先,搜索對應于組計劃操作符106的緩存結果集。如果找到了結果集,則將找到的結果集返回給用戶作為查詢104的結果集,而不是第二次執(zhí)行組計劃操作符106。此外,不需要搜索剩余的計劃操作符的結果集,這是因為,執(zhí)行計劃102的剩余計劃操作符包括在組計劃操作符106中。
然而,如果沒有找到對應于組計劃操作符106的緩存結果集,那么數(shù)據(jù)庫服務器搜索對應于連接計劃操作符108的緩存結果集。如果找到了對應于連接計劃操作符108的緩存結果集,則返回該緩存結果集用作到組計劃操作符106的輸入,并且無需執(zhí)行執(zhí)行計劃102的剩余操作符。在對對應于連接計劃操作符108的緩存結果集執(zhí)行組計劃操作符106以后,將組計劃操作符106的結果集(基于對應于連接計劃操作符108的緩存結果集)返回給用戶作為查詢104的結果集。在另一查詢包括組計劃操作符106或類似的計劃操作符的情況下,可以將執(zhí)行組計劃操作符106的結果集存儲在輸出存儲器中。
如果沒有找到對應于連接計劃操作符108的緩存結果集,則數(shù)據(jù)庫服務器搜索對應于掃描表和過濾計劃操作符112以及掃描表計劃操作符116的緩存結果集。如果找到了對應于掃描表和過濾計劃操作符112的緩存結果集,則返回該緩存結果集以備連接計劃操作符108使用。如果沒有找到掃描表和過濾計劃操作符112的緩存結果集,則數(shù)據(jù)庫服務器執(zhí)行掃描表和過濾計劃操作符112,并且返回執(zhí)行掃描表和過濾計劃操作符112的結果集,以備連接計劃操作符108使用。此外,可以存儲掃描表和過濾計劃操作符112的結果集以備后續(xù)使用。類似地,如果找到了掃描表計劃操作符116的緩存結果集,則返回緩存結果集以備連接計劃操作符108使用。如果沒有找到用于掃描表計劃操作符116的緩存結果集,則數(shù)據(jù)庫服務器執(zhí)行掃描表計劃操作符116,并且返回執(zhí)行掃描表計劃操作符116的結果集以備連接計劃操作符108使用。此外,可以存儲掃描表計劃操作符116的結果集以備后續(xù)使用。然后對返回的結果集執(zhí)行連接計劃操作符108,而不管返回的結果集源于執(zhí)行掃描表和過濾計劃操作符112以及掃描表計劃操作符116,或源于找到對應于掃描表和過濾計劃操作符112以及掃描表計劃操作符116的緩存結果集,還是源于找到用于掃描表和過濾計劃操作符112以及掃描表計劃操作符116二者其中之一的緩存結果集并執(zhí)行所述這二者中的另一個。使用連接計劃操作符108的結果集來執(zhí)行下一個組計劃操作符106,并且返回組計劃操作符106的結果集給用戶作為查詢104的結果集。如上所述,在另一查詢包括組計劃操作符106或連接計劃操作符108中的一個的情況下,可以將執(zhí)行組計劃操作符106和/或連接計劃操作符108的結果集存儲在計劃操作符輸出存儲器中。
在一實施例中,可以不必存儲給定操作符的結果集。相反,可以執(zhí)行成本收益分析來確定是否存儲給定操作符的結果集,或者是否不存儲結果集并且如果另一查詢包括相同的操作符則第二次執(zhí)行操作符??杀挥糜诖_定是否存儲給定操作符的結果集的一些因素是執(zhí)行操作符所需的時間和資源以及可用的存儲區(qū)域量。例如,如果執(zhí)行計劃操作符所需的時間小于搜索用于緩存結果集的輸出存儲器所需的預期時間,則可以不存儲結果集。類似地,如果存儲結果集所需的存儲區(qū)域大于輸出存儲器中的可用存儲區(qū)域(例如,或是因為結果集太大,或是因為存儲區(qū)域滿或接近滿了),則也可以不存儲結果集。相反,如果結果集不需要多的存儲區(qū)域或者有大量的存儲區(qū)域可用,并且計劃操作符需要相當多的時間來執(zhí)行,則可以存儲結果集。可以用于確定是否存儲新近執(zhí)行的計劃操作符的結果集的其他因素對于本領域的技術人員來說是顯而易見的。
兩個不同查詢中的每一個都可被不同的數(shù)據(jù)庫語句集來公式化,但是卻可能具有相同的執(zhí)行計劃。例如,第一查詢可能包括NATURAL連接,而除了連接關鍵字(JOIN KEY)在USING子句中被顯式命名而不是使用NATURAL連接外,第二查詢可與第一查詢相同。通過公式化執(zhí)行計劃并搜索執(zhí)行計劃的結果集,即使兩個查詢由不同的數(shù)據(jù)庫語句集形成,一個查詢的結果集也可被返回作為另一查詢的結果集。
輸出存儲器可以是任何形式的存儲器,諸如以下在硬件描述部分中說明的那些存儲器。在一實施例中,輸出存儲器是一個或多個臨時或短期存儲裝置(例如,易失性存儲裝置)中的一個或多個存儲區(qū)域。在一實施例中,同長期存儲器(例如,硬盤)相比,短期輸出存儲器(例如,閃存或RAM)可能具有相對較快的訪問時間。在一實施例中,輸出存儲器是一個或多個長期存儲裝置(例如,非易失性存儲裝置)中的一個或多個存儲區(qū)域。在一實施例中,輸出存儲器是一個或多個長期存儲裝置以及短期存儲裝置中的一個或多個存儲區(qū)域的組合。
計劃操作符的簽名在一實施例中,基于計劃操作符的定義為每個計劃操作符建立簽名。生成簽名使得具備相同或相似定義的計劃操作符具有相同簽名。在一實施例中,簽名可以基于用于定義或描述計劃操作符的數(shù)據(jù)結構。例如,與計劃操作符相關的數(shù)據(jù)結構可被用來生成哈希(Hash)值,哈希值可被映射到用于形成被用來組成簽名的序列號的數(shù)字值。
計劃操作符的結果集可與計劃操作符的簽名被一起存儲。當接收到新查詢時,通過搜索與具有相同簽名的計劃操作符相關的結果集來搜索與先前執(zhí)行的計劃操作符相關的結果集。使用簽名可以寫入不同的兩個查詢,但是其各自的執(zhí)行計劃可以共享帶有相同簽名的計劃操作符。
使用簽名使得數(shù)據(jù)庫服務器快速找到可被用于查詢的結果集。在一實施例中,每個計劃操作符都被映射到代表該計劃操作符的恰當描述的簽名。在可選實施例中,每個計劃操作符都被映射到還用于其它計劃操作符的集合和/或排列的簽名,并且與該簽名相關的結果集被用于簽名的集合和/或排列中的每個計劃操作符。在本實施例中,簽名不必然代表計劃操作符的恰當描述。在一實施例中,在找到匹配的簽名之后,比較計劃操作符,以評估來自一個計劃操作符的結果集是否被期望用作其它計劃操作符的結果集。在另一實施例中,如果兩個簽名匹配或充分相似,則使用找到的緩存結果集,而無需進一步檢查產(chǎn)生緩存結果集的計劃操作符。
相似但不完全相同的計劃操作符很多時候,查詢相似但不完全相同。通過搜索對應于不一致的查詢的計劃操作符,可以增加返回查詢的結果集的速度。因此,在一實施例中,當搜索計劃操作符的結果集時,如果發(fā)現(xiàn)用于不同計劃操作符的緩存結果集相似,則可以使用相似操作的結果集,而不是執(zhí)行實際操作。例如,如果生成的用于查詢的計劃操作符涉及查找與2000年11月1日至2004年1月1日之間的日期相關的一組數(shù)據(jù),并且發(fā)現(xiàn)了用于找到與2000年11月1日至2004年2月23日之間的日期相關的數(shù)據(jù)的計劃操作符的緩存結果集,則可以使用找到的緩存結果集,而不是執(zhí)行被生成用于查詢的實際計劃操作符。在一實施例中,找到的緩存結果集被“按原樣(as is)”使用,而沒有進一步修改。在另一實施例中,過濾找到的緩存結果集,以去除緩存結果集中的一些或全部多余數(shù)據(jù)。在另一實施例中,評估緩存結果集或緩存結果集的簽名,以確定用戶是否可能注意到接收到的被請求的結果與找到的緩存結果集之間的差異,在此實例中為與2004年1月2日至2004年2月23日之間的日期相關的多余數(shù)據(jù)。如果預期到用戶不會注意到此差異,則返回找到的緩存結果集,而不是執(zhí)行計劃操作符。如果預期到用戶會注意到此差異,則執(zhí)行計劃操作符,或者過濾緩存結果集以去除2004年1月2日至2004年2月23日之間的多余數(shù)據(jù)。
在一實施例中,如果預期到典型用戶不可能關心返回哪個結果集,則可以認為兩個計劃操作符相似。例如,在一實施例中,如果預期到緩存結果集的內(nèi)容除了有小百分比的行不同外與計劃操作符的內(nèi)容幾乎相同,則緩存結果集可被用作計劃操作符的結果集。無論是相似但不相同還是不相似,都可以通過用戶輸入來控制可以以這種方式使用的緩存結果集。例如,用戶輸入可以包括指定是否可以返回相似但不同的緩存結果集的查詢中的命令或參數(shù),或者經(jīng)由應用程序員界面(“API”)被設置為指定是否可以返回相似但不同的緩存結果集的用戶數(shù)據(jù)庫會話中的變量。參數(shù)或變量還可以指定兩個計劃操作符或簽名可能不同的程度,而同時仍然允許一個計劃操作符或簽名的緩存結果集用于另一個計劃操作符或簽名的結果集。
還有,在一實施例中,如果期望第一計劃操作符除了返回一些多余數(shù)據(jù)之外還返回第二計劃操作符的所有結果集,并且期望該多余數(shù)據(jù)的數(shù)量不足以造成混淆對應于第二計劃操作符的結果集的內(nèi)容,那么第一計劃操作符的結果集可以被按原樣或在其修改之后被接受作為第二計劃操作符的結果集。類似地,在一實施例中,如果期望第一計劃操作符返回比第二計劃操作符更小的結果集,但是期望所丟失的數(shù)據(jù)是不重要的或少量的,則第一計劃操作符的結果集可以按原樣或在修改之后被接受作為第二計劃操作符的結果集。
失效的緩存結果集即使給定查詢的計劃操作符可能完全相同,但是由于在不同的時間執(zhí)行查詢,因此計劃操作符的結果集仍可能不同。在一實施例中,當找到對應于給定計劃操作符的緩存結果集時,執(zhí)行檢查,以確定找到的緩存結果集是否失效。例如,在一實施例中,根據(jù)計劃操作符輸出存儲器中的緩存結果集來存儲計算緩存結果集的時間。如果緩存結果集的年限大于閾值年限,則緩存結果集就不再保存在高速緩存中,或者被用作另一查詢的計劃操作符的結果集。閾值年限可以基于上述的用戶輸入。
硬件描述圖4是示出可以執(zhí)行本發(fā)明的實施例的計算機系統(tǒng)400的框圖。具體而言,計算機系統(tǒng)400可被用作數(shù)據(jù)庫服務器和/或可以被編程以實現(xiàn)上述的部分查詢緩存方法。計算機系統(tǒng)400包括總線402或用于傳輸信息的其它通信裝置,以及與總線402連接的用于處理信息的處理器404。計算機系統(tǒng)400還包括連接至總線402的主存儲器406,諸如隨機存取存儲器(RAM)或者其它動態(tài)存儲裝置,用于儲存信息和將由處理器404執(zhí)行的指令。在執(zhí)行將由處理器404執(zhí)行的指令期間,主存儲器406還可用于儲存臨時變量或其他中間信息。計算機系統(tǒng)400進一步包括只讀存儲器(ROM)408或連接至總線402的其他靜態(tài)存儲裝置,用于存儲靜態(tài)信息和處理器404的指令。提供諸如磁盤或光盤的存儲裝置410,并使其連接至總線402用于存儲信息和指令。
計算機系統(tǒng)400可以經(jīng)由總線402連接至諸如陰極射線管(CRT)的顯示器412,用于向計算機用戶顯示信息。包括字母數(shù)字鍵和其他鍵的輸入裝置414連接至總線402,用于將信息和命令選擇傳遞到處理器404。另一種類型的用戶輸入裝置是諸如鼠標、跟蹤球、或光標方向鍵的光標控制416,用于將方向信息和命令選擇傳遞到處理器404并用于控制顯示器412上的光標移動。輸入裝置通常在兩個軸上(第一個軸(例如X軸)和第二個軸(例如Y軸))具有兩個自由度,使裝置能指定平面上的位置。
計算機系統(tǒng)400可被用于存儲計劃操作符的結果集。根據(jù)本發(fā)明的一個實施例,響應于執(zhí)行包括在主存儲器406中的一個或多個指令的一個或多個序列的處理器404,計算機系統(tǒng)400提供計劃操作符的結果集的存儲器并搜索存儲器112中的先前執(zhí)行的計劃操作符的緩存結果集。這樣的指令可以從諸如存儲裝置410的另一計算機可讀介質(zhì)讀入主存儲器406。通過執(zhí)行包括在主存儲器406中的指令序列,使得處理器404執(zhí)行本文所述的處理步驟。還可以應用多處理布局中的一個或多個處理器,以執(zhí)行包含在主存儲器406中的指令序列。在可選實施例中,可以使用硬連線電路(hard-wiredcircuitry)來取代軟件指令或者與軟件指令結合來實施該發(fā)明。因此,本發(fā)明的實施例將不限于硬件電路和軟件的任何特定組合。
這里使用的術語“計算機可讀介質(zhì)”是“機器可讀介質(zhì)”的一個實例,指的是參與向處理器404提供指令用于執(zhí)行的任何介質(zhì)。這種介質(zhì)可以采取多種形式,包括但不限于非易失性介質(zhì)、易失性介質(zhì)、和傳輸介質(zhì)。非易失性介質(zhì)舉例來說包括光盤或磁盤,諸如存儲裝置410。易失性介質(zhì)包括動態(tài)存儲器,諸如主存儲器406。傳輸介質(zhì)包括同軸電纜、銅線、和光纖,包括組成總線402的導線。傳輸介質(zhì)還可采取聲波或光波形式,例如那些在無線電波和紅外線數(shù)據(jù)通信過程中產(chǎn)生的聲波和光波。
通常形式的機器可讀介質(zhì)包括如軟盤、軟性盤、硬盤、磁帶,或者任何其它磁性介質(zhì)、CD-ROM、任何其它光介質(zhì)、打孔紙、紙帶、或者任何帶孔圖樣的物理介質(zhì)、RAM、PROM、EPROM、FLASH-EPROM、或者其他任何存儲芯片或者盒式磁帶,或者以下提到的載波、或者計算機可讀的任何其他介質(zhì)。
各種形式的計算機可讀介質(zhì)可以參與將一個或者多個指令的一個或多個序列承載到處理器404用于執(zhí)行。例如,指令開始可承載在遠程計算機的磁盤中。遠程計算機可以將指令加載到其動態(tài)存儲器中,然后使用調(diào)制解調(diào)器通過電話線發(fā)送指令。計算機系統(tǒng)400本地的調(diào)制解調(diào)器可接收電話線上的數(shù)據(jù),并使用紅外發(fā)射器將數(shù)據(jù)轉(zhuǎn)換成紅外信號。連接到總線402的紅外探測器可以接收紅外信號攜帶的數(shù)據(jù),并且將數(shù)據(jù)放到總線402上。總線402將數(shù)據(jù)承載到主存儲器406,處理器404從主存儲器取回并執(zhí)行這些指令。在由處理器404執(zhí)行這些指令之前或之后,由主存儲器406接收的指令可隨意地存儲在存儲裝置410上。
計算機系統(tǒng)400還包括連接至總線402的通信接口418。提供雙向數(shù)據(jù)通信的通信接口418,連接到與局域網(wǎng)422連接的網(wǎng)絡鏈路420。例如,通信接口418可以是綜合業(yè)務數(shù)字網(wǎng)(ISDN)卡或者調(diào)制解調(diào)器,用于提供到相應類型的電話線的數(shù)據(jù)通信連接。又如,通信接口418可以是局域網(wǎng)(LAN)卡,用于提供至兼容局域網(wǎng)(LAN)的數(shù)據(jù)通信連接。也可以使用無線鏈路。在任何這樣的實施中,通信接口418發(fā)送和接收承載表示各種類型的信息的數(shù)字數(shù)據(jù)流的電信號、電磁信號、和光學信號。
網(wǎng)絡鏈路420通??赏ㄟ^一個或者多個網(wǎng)絡向其它數(shù)據(jù)裝置提供數(shù)據(jù)通信。例如,網(wǎng)絡鏈路420可通過局域網(wǎng)422與主機424連接,或者與互聯(lián)網(wǎng)服務提供商(ISP)426操作的數(shù)據(jù)設備連接。ISP426又通過目前通稱為“互聯(lián)網(wǎng)”428的全球分組數(shù)據(jù)通信網(wǎng)絡提供數(shù)據(jù)通信服務。局域網(wǎng)422和互聯(lián)網(wǎng)428都使用承載數(shù)字數(shù)據(jù)流的電信號、電磁信號、或光學信號。通過各種網(wǎng)絡的信號和網(wǎng)絡鏈路420上的信號以及通過通信接口418的信號,都傳送數(shù)字數(shù)據(jù)給計算機系統(tǒng)400或者傳送來自計算機系統(tǒng)的數(shù)字數(shù)據(jù),是傳輸信息的載波的示例性形式。
計算機系統(tǒng)400能通過網(wǎng)絡、網(wǎng)絡鏈路420、和通信接口418發(fā)送消息和接收數(shù)據(jù)(包括程序代碼)。在互聯(lián)網(wǎng)的實例中,服務器420可通過互聯(lián)網(wǎng)428、ISP 426、局域網(wǎng)422、和通信接口418,傳送用于應用程序的所請求的程序代碼。正如在此描述的,根據(jù)本發(fā)明,一個這樣下載的應用程序提供了與先前執(zhí)行的輸出存儲器中的計劃操作符相關的結果集的存儲器。
所接收的代碼可以在其被接收時由處理器404執(zhí)行,和/或存儲在存儲裝置410或者其它非易失性存儲器中用于隨后執(zhí)行。按照這種方式,計算機系統(tǒng)400可以獲得載波形式的應用代碼。
在以上的說明中,已經(jīng)參照可以隨著實施的不同而改變的多個特定細節(jié)描述了本發(fā)明的實施例。因此,本發(fā)明的唯一和專有標志,以及申請人所期望的本發(fā)明,即為本申請以公布權利要求的特定形式所陳述的權利要求,包括任何后續(xù)修改。被清楚地陳述用于權利要求中所包含的術語的任何定義,都將限定在權利要求中所使用的這些術語的含義。因此,非限制性地,權利要求中沒有明確提到的元件、特性、特征、優(yōu)點、或者屬性都不應該以任何方式限制權利要求的范圍。因此,說明書及其附圖是用于示例說明的目的,而不是用于限制本發(fā)明。
權利要求
1.一種用于處理對數(shù)據(jù)庫服務器的請求的方法,包括在所述數(shù)據(jù)庫服務器接收來自用戶的第一查詢;生成用于經(jīng)由所述數(shù)據(jù)庫服務器執(zhí)行所述第一查詢的第一計劃,其中,所述計劃包括多個第一計劃操作符,所述多個第一計劃操作符至少包括一個輸出第一結果集的第一計劃操作符;存儲所述第一結果集;接收來自用戶的第二查詢;生成用于經(jīng)由所述數(shù)據(jù)庫服務器執(zhí)行所述第二查詢的第二計劃,其中,所述第二執(zhí)行計劃包括多個第二計劃操作符,所述多個第二計劃操作符至少包括一個對應于所述第一計劃操作符的第二計劃操作符;確定所述第一結果集中的至少一部分可被用作所述第二操作符的第二結果集;以及基于存儲的所述第一結果集計算所述第二查詢。
2.根據(jù)權利要求1所述的方法,其中,存儲所述第一結果集的步驟包括使簽名與所述第一結果集相關。
3.根據(jù)權利要求2所述的方法,其中,基于由所述第一計劃操作符執(zhí)行的操作來生成所述簽名。
4.根據(jù)權利要求2所述的方法,其中,所述確定步驟至少包括將所述第二計劃操作符的簽名與多個計劃操作符的被存儲的簽名進行比較,以確定是否所述多個計劃操作符中的每個都是所述第二計劃操作符。
5.根據(jù)權利要求1所述的方法,其中,所述第一計劃操作符和所述第二計劃操作符完全相同。
6.根據(jù)權利要求1所述的方法,其中,所述第一計劃操作符和所述第二計劃操作符不完全相同。
7.根據(jù)權利要求1所述的方法,其中,所述第一計劃操作符和所述第二計劃操作符相似。
8.根據(jù)權利要求1所述的方法,其中,所述第一計劃操作符和所述第二計劃操作符完全相同,但是所述第一結果集和所述第二結果集不同。
9.根據(jù)權利要求1所述的方法,其中,所述第一執(zhí)行計劃包括第三計劃操作符,所述方法進一步包括響應于所述第三計劃操作符輸出第三結果集,其中,不存儲所述第三結果集。
10.根據(jù)權利要求1所述的方法,其中,所述確定步驟至少包括確定何時計算所述第一結果集。
11.根據(jù)權利要求1所述的方法,其中,所述第一計劃操作符和所述第二計劃操作符之間存在差異,并且所述計算步驟至少包括基于所述差異修改所述第一結果集。
12.一種承載有一個或多個指令序列的機器可讀介質(zhì),當被一個或多個處理器執(zhí)行時,使所述一個或多個處理器執(zhí)行包括以下步驟的方法在所述數(shù)據(jù)庫服務器接收來自用戶的第一查詢;生成用于經(jīng)由所述數(shù)據(jù)庫服務器執(zhí)行所述第一查詢的第一計劃,其中,所述計劃包括多個第一計劃操作符,所述多個第一計劃操作符至少包括一個輸出第一結果集的第一計劃操作符;存儲所述第一結果集;接收來自用戶的第二查詢;生成用于經(jīng)由所述數(shù)據(jù)庫服務器執(zhí)行所述第二查詢的第二計劃,其中,所述第二執(zhí)行計劃包括多個第二計劃操作符,所述多個第二計劃操作符至少包括一個對應于所述第一計劃操作符的第二計劃操作符;確定所述第一結果集中的至少一部分可被用作所述第二操作符的第二結果集;以及基于存儲的所述第一結果集計算所述第二查詢。
13.根據(jù)權利要求12所述的機器可讀介質(zhì),其中,存儲所述第一結果集的步驟包括使簽名與所述第一結果集相關。
14.根據(jù)權利要求13所述的機器可讀介質(zhì),其中,基于由所述第一計劃操作符執(zhí)行的操作來生成所述簽名。
15.根據(jù)權利要求13所述的機器可讀介質(zhì),其中,所述確定步驟至少包括將所述第二計劃操作符的簽名與多個計劃操作符的被存儲的簽名進行比較,以確定是否所述多個計劃操作符中的每個都是所述第二計劃操作符。
16.根據(jù)權利要求12所述的機器可讀介質(zhì),其中,所述第一計劃操作符和所述第二計劃操作符完全相同。
17.根據(jù)權利要求12所述的機器可讀介質(zhì),其中,所述第一計劃操作符和所述第二計劃操作符不完全相同。
18.根據(jù)權利要求12所述的機器可讀介質(zhì),其中,所述第一計劃操作符和所述第二計劃操作符相似。
19.根據(jù)權利要求12所述的機器可讀介質(zhì),其中,所述第一計劃操作符和所述第二計劃操作符完全相同,但是所述第一結果集和所述第二結果集不同。
20.根據(jù)權利要求12所述的機器可讀介質(zhì),其中,所述第一執(zhí)行計劃包括第三計劃操作符,所述方法進一步包括響應于所述第三計劃操作符輸出第三結果集,其中,不存儲所述第三結果集。
21.根據(jù)權利要求12所述的機器可讀介質(zhì),其中,所述確定步驟至少包括確定何時計算所述第一結果集。
22.根據(jù)權利要求12所述的機器可讀介質(zhì),其中,所述第一計劃操作符和所述第二計劃操作符之間存在差異,并且所述計算步驟至少包括基于所述差異修改所述第一結果集。
全文摘要
當執(zhí)行查詢時形成由多個計劃操作符組成的執(zhí)行計劃。在執(zhí)行任何給定計劃操作符之前,檢查存儲區(qū)域。如果已存儲了對應于計劃操作符的結果集,則使用緩存結果集,而不是執(zhí)行計劃操作符。如果不存在對應于特定計劃操作符的結果集,則執(zhí)行計劃操作符,并且可以存儲被輸出的結果集已備另一執(zhí)行計劃的另一計劃操作符使用。
文檔編號G06F17/30GK1947118SQ200580012505
公開日2007年4月11日 申請日期2005年4月20日 優(yōu)先權日2004年4月22日
發(fā)明者切廷·厄茲通 申請人:甲骨文國際公司