(57)【要約】  クエリーが実行されると実行計画が形成されるが、それは複数の計画オペレータからなる。任意の所与の計画オペレータを実行する前に、記憶領域が調べられる。計画オペレータに対応して結果セットが記憶されている場合には、その計画オペレータを実行する代わりに、そのキャッシングされた結果セットを用いる。その特定の計画オペレータに対応する結果セットが存在しない場合には、その計画オペレータを実行し、出力される結果セットを別の実行計画の別の計画オペレータによる使用のために記憶してもよい。
2007534087.tif 000002
【特許請求の範囲】
【請求項１】
データベースサーバへの要求を処理するための方法であって、
第１のクエリーを前記データベースにおいてユーザから受信することと、
前記第１のクエリーを前記データベースサーバを介して実行するために第１の計画を発生させることとを含み、前記計画は、第１の結果セットを出力する少なくとも第１の計画オペレータを含む第１の複数の計画オペレータを含み、前記方法はさらに、
前記第１の結果セットを記憶することと、
第２のクエリーをユーザから受信することと、
前記第２のクエリーを前記データベースサーバを介して実行するために第２の計画を発生させることとを含み、前記第２の実行計画は、前記第１の計画オペレータに対応する少なくとも第２の計画オペレータを含む第２の複数の計画オペレータを含み、前記方法はさらに、
前記第１の結果セットの少なくとも一部分を前記第２のオペレータの第２の結果セットとして用いてもよいことを判断することと、
前記第２のクエリーを、記憶された前記第１の結果セットに基づいて計算することとを含む、方法。
【請求項２】
前記第１の結果セットを記憶するステップはシグネチャを前記第１の結果セットと関連付けることを含む、請求項１に記載の方法。
【請求項３】
前記シグネチャは前記第１の計画オペレータによって実行されるオペレーションに基づいて発生される、請求項２に記載の方法。
【請求項４】
前記判断するステップは、前記第２の計画オペレータのシグネチャを、複数の計画オペレータの、記憶されるシグネチャと少なくとも比較することにより、前記複数の計画オペレータの各々が前記第２の計画オペレータであるかどうかを判断することを含む、請求項２に記載の方法。
【請求項５】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一である、請求項１に記載の方法。
【請求項６】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一ではない、請求項１に記載の方法。
【請求項７】
前記第１の計画オペレータおよび前記第２の計画オペレータは類似している、請求項１に記載の方法。
【請求項８】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一であるが、前記第１の結果セットおよび前記第２の結果セットは異なる、請求項１に記載の方法。
【請求項９】
前記第１の実行計画は第３の計画オペレータを含み、前記方法は、さらに、第３の結果セットを前記第３の計画オペレータに応答して出力することを含み、前記第３の結果セットは記憶されない、請求項１に記載の方法。
【請求項１０】
前記判断するステップは、いつ前記第１の結果セットが計算されたかを少なくとも判断することを含む、請求項１に記載の方法。
【請求項１１】
前記第１の計画オペレータと前記第２の計画オペレータとの間には差異が存在し、前記計算するステップは前記第１の結果セットを前記差異に基づいて少なくとも修正すること
を含む、請求項１に記載の方法。
【請求項１２】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに、
第１のクエリーを前記データベースにおいてユーザから受信するステップと、
前記第１のクエリーを前記データベースサーバを介して実行するために第１の計画を発生させるステップとを含み、前記第１の計画は、第１の結果セットを出力する少なくとも第１の計画オペレータを含む第１の複数の計画オペレータを含み、前記方法はさらに、
前記第１の計画の組を記憶するステップと、
第２のクエリーをユーザから受信するステップと、
前記第２のクエリーを前記データベースサーバを介して実行するために第２の計画を発生させるステップとを含み、前記第２の実行計画は、前記第１の計画オペレータに対応する少なくとも第２の計画オペレータを含む第２の複数の計画オペレータを含み、前記方法はさらに、
前記第１の結果セットの少なくとも一部分を前記第２のオペレータの第２の結果セットとして用いてもよいことを判断するステップと、
前記第２のクエリーを、記憶された前記第１の結果セットに基づいて計算するステップとを含む方法を実行させる命令からなる１つ以上のシーケンスを担持するマシン読取可能媒体。
【請求項１３】
前記第１の結果セットを記憶するステップはシグネチャを前記第１の結果セットと関連付けることを含む、請求項１２に記載のマシン読取可能媒体。
【請求項１４】
前記シグネチャは前記第１の計画オペレータによって実行されるオペレーションに基づいて発生される、請求項１３に記載のマシン読取可能媒体。
【請求項１５】
前記判断するステップは、前記第２の計画オペレータのシグネチャを、複数の計画オペレータの、記憶されるシグネチャと少なくとも比較することにより、前記複数の計画オペレータの各々が前記第２の計画オペレータであるかどうかを判断することを含む、請求項１３に記載のマシン読取可能媒体。
【請求項１６】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一である、請求項１２に記載のマシン読取可能媒体。
【請求項１７】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一ではない、請求項１２に記載のマシン読取可能媒体。
【請求項１８】
前記第１の計画オペレータおよび前記第２の計画オペレータは類似している、請求項１２に記載のマシン読取可能媒体。
【請求項１９】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一であるが、前記第１の結果セットおよび前記第２の結果セットは異なる、請求項１２に記載のマシン読取可能媒体。
【請求項２０】
前記第１の実行計画は第３の計画オペレータを含み、前記方法は、さらに、第３の結果セットを前記第３の計画オペレータに応答して出力することを含み、前記第３の結果セットは記憶されない、請求項１２に記載のマシン読取可能媒体。
【請求項２１】
前記判断するステップは、いつ前記第１の結果セットが計算されたかを少なくとも判断することを含む、請求項１２に記載のマシン読取可能媒体。
【請求項２２】
前記第１の計画オペレータと前記第２の計画オペレータとの間には差異が存在し、前記計算するステップは前記第１の結果セットを前記差異に基づいて少なくとも修正することを含む、請求項１２に記載のマシン読取可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はデータベースコマンドを処理することに関し、特に、クエリーの結果セットをキャッシングすることに関する。
【背景技術】
【０００２】
発明の背景
このセクションにおいて記載される方策は追及され得る方策ではあるが、必ずしもこれまでに構想または追及されてきた方策ではない。したがって、特段の指示がなければ、このセクションに記載される方策のいずれもが、単にそれらがこのセクションに含まれるというだけで先行技術としての資格がある、と仮定されるべきではない。同様に、特段の指示がなければ、方策で認識される問題は先行技術において認識されていたと仮定されるべきではない。
【０００３】
あるデータベースサーバは、データベース動作を実行するよう要求を表現するステートメントを受取ると、実行計画を発生し得る。実行計画は要求を実行するようデータベースサーバによって実行されるステップおよび動作を定義する。データベース動作を要求するよう用いられるステートメントは構造化されたクエリー言語（ＳＱＬ）などのようなデータベース言語に準拠するデータベースコマンドの形式であってもよい。
【０００４】
クエリーの結果セットを高速に返すことは望ましい。ますますより多くの人々が、データベースを用いて、探している情報を得ようとするにつれ、データベースに対して発行されたクエリーのうちのあるものは同じであるという可能性が増大する。あるシステムでは、少なくともあるクエリーの結果セットが記憶される。クエリーが受信されると、テキストに基づく検索が実行されて、以前に実行されたクエリーを見つけ出す。（同じテキストを有する）同じ同一のクエリーが２回目に対して提示されていることがわかり、そのクエリーに対する結果セットが記憶された場合には、システムはキャッシングされた結果セットを返し、そのクエリーを２回実行することはしない。データベースを用いる人々が多ければ多いほど、クエリーの結果セットをセーブすることにより得られるパフォーマンスの改善はより大きくなる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、多くのクエリーは、同一ではなく、しかしながら類似している。多くクエリーはそれらの結果セット内において同一のデータからなる部分的な組を処理してもよい。しかしながら、クエリーは同一ではないので、期待される結果セットとして、データの、同一の部分的な組を有しそうなキャッシングされた結果セットは、結果セットの類似性にもかかわらず、再使用され得ず、類似のクエリーの各々が実行される。
【０００６】
前述のことに基づき、クエリーの結果セットを記憶し再使用することが依然として求められている。
【０００７】
この発明は、同様の参照番号は同様の要素を示す添付の図面の図において、限定によってではなく、例によって示される。
【発明を実施するための最良の形態】
【０００８】
発明の詳細な説明
部分的クエリーキャッシングのための方法および装置を記載する。以下の記載において
は、説明のため、数多くの具体的な詳細を述べて、この発明の十分な理解を促す。しかしながら、この発明はこれらの具体的な詳細を伴わずに実施されてもよいことは明らかである。他の例では、周知の構造および装置をブロック図形式で示すことにより、この発明を不必要に曖昧にすることを回避する。
【０００９】
いくつかの特徴を以下に記載するが、それらは、各々、互いとは独立して、または他の特徴との任意の組合せとともに用いられ得る。しかしながら、どのような個々の特徴も、上で論じられる問題のいずれにも対応しないかもしれず、または上で論じられる問題の１つに対応するのみかもしれない。上で論じられる問題のいくつかはここに記載される特徴のいずれによっても十分に対応されはしないかもしれない。見出しを設けてはいるが、ある特定の見出しに関係付けられる一方でその見出しを有するセクションにおいては見出されない情報が、本明細書の他の部分においてさらに見出されるかもしれない。
【００１０】
ここに記載されるのは、あるクエリーに対して以前に発生された結果の少なくともある部分を、別のクエリーの、後の計算のために用いる方策である。クエリーの実行計画によって定義されるオペレーションに対して発生される結果セットを、別のクエリーの実行の同一または類似のオペレーションに対する結果セットとして用いる。
【００１１】
実行計画
データベースサーバは効率性に対して最適化された実行計画を発生させる。実行計画を含むようどのようなステップにするか、およびそれらのステップが実行される順序を決定する際、データベースサーバは効率性に影響する多くの要因を占める。たとえば、クエリーは、第１の値を第１の列に含み第２の値を第２の列に含む要求の行であってもよい。第１の列がインデックス付けされると、データベースサーバはそのインデックスを用いてデータにより効率よくアクセスする実行計画を発生させてもよい。そのような実行計画は以下に示される順序で実行される以下のようなステップを含んでもよい。
【００１２】
１．インデックスにアクセスし、第１の値を第１の列に含む行の行ＩＤを発生させる。
２．行ＩＤによって識別される行の組を得る。
【００１３】
３．第２の列における第２の値に対する行の組をフィルタ処理する。
クエリー実行計画は「計画オペレータ」と称されるステップを含む。計画オペレータは、実行計画において実行されデータベースサーバによって実行されることにより１つ以上の行ソースにアクセスしてもよいオペレーションの組を定義する。行ソースはデータベース（たとえばテーブルにおける１つ以上の行）または別の計画オペレータの１つ以上の出力される行において記憶されるデータであってもよい。実行計画は、オラクル・コーポレイション（Oracle Corporation）による１９９９年２月のオラクル８ｉ概念（Oracle 8i Concepts）の第２２〜２４章に説明されている。オラクル８ｉ概念の内容をここに引用により援用する。
【００１４】
例示的実行計画図
ある実行計画は実行計画図によって表現され得る。図１は、部分的クエリーキャッシングを含む実行計画の一例のさまざまな特徴を示すよう与えられる実行計画図である。図１において、実行計画１０２がクエリー１０４に対し（データベースサーバによって）発生される。クエリー１０４は、
SELECT t1.col4, t2.col2
FROM t1, t2
WHERE t1.col.1=t2.col2 AND t1.col3=192
GROUP BY t1.col4;
であるクエリーである。
【００１５】
クエリー１０４は述語１０５を含み、それはｔ１．ｃｏｌ１＝ｔ２．ｃｏｌ２およびｔ１．ｃｏｌ３＝１９２である。述語とは、クエリーが適用されるテーブルにおける行によって満たされなければならない基準を定義する論理表現である。
【００１６】
実行計画１０２においては、計画オペレータはブロックを用いて示される。具体的には、グループ計画オペレータ１０６、結合計画オペレータ１０８、テーブルスキャンおよびフィルタ計画オペレータ１１２、およびテーブルスキャン計画オペレータ１１６が、実行計画１０２を形成する計画オペレータである。親計画オペレータと子計画オペレータとの間の分岐は子計画オペレータから親計画オペレータへの行の流れを表現する。したがって、子計画オペレータの出力行は親計画オペレータへの入力行である。計画オペレータは、ここにおいては、計画オペレータそれら自体が定義するオペレーションを実行するものとして記載される。しかしながら、これは、単に、データベースサーバが、計画オペレータを実行する際に計画オペレータによって定義されるオペレーションを実行していることを表現する簡便な態様である。
【００１７】
実行計画１０２においては、テーブルスキャンおよびフィルタ計画オペレータ１１２およびテーブルスキャン計画オペレータ１１６はテーブルｔ１の列ｃｏｌ１のスキャンおよびテーブルｔ２の列ｃｏｌ２のスキャンをそれぞれ実行する。しかしながら、テーブルスキャンおよびフィルタ計画オペレータ１１２は、さらに、テーブルｔ１のスキャンされた行をフィルタ処理して、ｃｏｌ３＝１９２を有する行のみが選択され、それによって、テーブルスキャンおよびフィルタ計画オペレータ１１２の出力に含まれる。結合計画オペレータ１０８はテーブルスキャンおよびフィルタ計画オペレータ１１２ならびにテーブルスキャン計画オペレータ１１６から出力される行を結合して、結合計画オペレータ１０８により出力される行を形成する。グループ計画オペレータ１０６は結合計画オペレータ１０８によって形成された行をグループに分ける。グループ計画オペレータ１０６の結果、出力における各行は異なるグループを表現する。（つまり、出力における各テーブルｔ１．列ｃｏｌ４は一意である。）
機能上の概観
部分的クエリーキャッシングにおいては、クエリーの個々の計画オペレータの結果セットを計算し、他のクエリーについての再使用の可能性のため、記憶領域に記憶する。この記憶領域はオペレータ出力記憶領域であり、それを出力領域と称することにする。計画オペレータの結果セットは、ここにおいては、キャッシングされる結果セットと称される。各キャッシングされる結果セットはその結果セットのそれぞれの計画オペレータの定義に基づいて発生されるシグネチャを有することになる。同一または類似の定義、したがっておそらく同一または類似の結果セットを伴う計画オペレータは、同じかまたは類似のシグネチャを有することになる。計画オペレータを計算する（つまり計画オペレータに対して結果を発生させる）ために、その計画オペレータに対してシグネチャを発生させ、そのシグネチャを用いて、同じシグネチャを伴うキャッシングされた結果セットを求めて記憶領域を検索する。キャッシングされた結果セットがある場合には、そのキャッシングされた結果セットの計画オペレータをさらに調べて、そのキャッシングされた結果セットが、計算されつつある計画オペレータに対する結果セットとして用いられてもよいかどうかを判断してもよい。別の実施例では、所与のシグネチャに対するキャッシングされた結果セットがある場合には、計画オペレータはさらには調べられず、キャッシングされた結果セットを計画オペレータの結果セットとして用いる。キャッシングされた結果セットがない場合には、計画オペレータを実行する。加えて、計画オペレータを実行することにより発生された結果セットを、別の対応する計画オペレータによる後の使用のために、出力記憶に記憶してもよい。
【００１８】
ある実施例では、まず検索をクエリー全体に対して実行するが、それは、そのクエリー
の実行計画の計画オペレータのすべてを包含する計画オペレータの結果セットを検索することにより行なわれる。クエリー全体に対応する計画オペレータに対して結果セットが記憶されなかった場合には、次いで、実行計画を形成する計画オペレータの１つ以上について、出力記憶を検索して、キャッシングされた結果セットがその対応する計画オペレータに対して記憶されたかどうかを見る。
【００１９】
ある実施例では、計画オペレータを検索するが、それは、その検索の最も大きな部分を包含する計画オペレータ（たとえばクエリー全体を包含する計画オペレータなど）で始まり、その検索のうち次に大きな部分を包含する計画オペレータに対して検索することに進む。この、次に大きい部分は、クエリーの最も大きな部分の計画オペレータ内に包含される。換言すると、キャッシングされた結果セットが親計画オペレータに対して見つからない場合には、もし存在するのであれば、その親計画オペレータの直近の子である計画オペレータについて、キャッシングされた結果セットを求めて検索を行なう。
【００２０】
クエリーを実行する
図２はこの発明のある実施例に従って計画オペレータを実行する方法２００を示すフローチャートである。方法２００は計画オペレータを実行する際に実行されるステップを示す。ステップ２０１において、計画オペレータをクエリーに対して発生させる。ステップ２０２において、その計画オペレータのシグネチャを発生させる。ステップ２０４において、その計画オペレータを実行することにより結果セットを発生させる。ステップ２０６において、ステップ２０４で発生された結果セットを出力記憶に記憶（たとえばキャッシング）する。出力記憶についてはさらに以下で論じる。ステップ２０８において、シグネチャおよび選択肢として計画オペレータを、そのシグネチャおよび選択肢としてその計画オペレータがキャッシングされた結果セットと関連付けられる態様で、記憶する。
【００２１】
図３は、この発明の実施例に従って、キャッシングされた結果セットを利用する方法３００を示すフローチャートである。ステップ３０２において、計画オペレータをクエリーに対して発生させる。ステップ３０３において、評価されつつある計画オペレータに対してシグネチャを発生させる。ステップ３０４において、出力記憶内を、キャッシングされた結果セットを求めて検索する。この検索を実行することにおいて、評価されつつある計画オペレータのシグネチャと、キャッシングされた結果セットに関連付けられて記憶されるシグネチャとの間において比較を実行してもよい。ある実施例においては、精密な一致を必要としなくてもよい。選択肢のステップ３０６では、一致が見出されると、さらなる評価を行ない、そこにおいては、記憶された計画オペレータを、評価されつつある計画オペレータと比較して、キャッシングされた結果セットを用いてもよいかどうかを見る。ステップ３０８において、ステップ３０６が方法３００に含まれ、ステップ３０６において、キャッシングされた結果セットが使用可能であると判断される場合には、その計画オペレータを実行する代わりに、キャッシングされた結果セットを（ユーザに結果セットとして、または別の計画オペレータによる入力としての使用のために）返す。ステップ３０８において、ステップ３０６が方法３００に含まれず、ステップ３０４において一致が見出される場合には（たとえば２つのシグネチャが十分に類似していることが見出される場合には）、計画オペレータを実行する代わりに、キャッシングされた結果セットを返す。
【００２２】
図１を参照して、方法３００を実施することにおいて、クエリー１０４を受取ると、データベースサーバはクエリー計画１０２を立てる。次いで、データベースサーバは計画オペレータ出力記憶領域を調べて、キャッシングされた結果セットが、実行計画１０２を形成する計画オペレータについて記憶されたかどうかを見る。クエリーの、より大きな部分を構成する計画オペレータがまず検索されるが、それは、そのようなより大きな部分を形成する計画オペレータに対応する結果セットがある場合には、そのようなより大きな部分により包含されるより小さな部分を形成する計画オペレータを検索する必要はないからで
ある。
【００２３】
たとえば、実行計画１０２においては、まず、グループ計画オペレータ１０６に対応するキャッシングされた結果セットに対して検索が行なわれる。結果セットが発見されると、その発見された結果セットはユーザにクエリー１０４の結果セットとして返され、グループ計画オペレータ１０６を２回実行することはしない。加えて、残りの計画オペレータに対して結果セットを検索する必要はなく、なぜならば、実行計画１０２の、残りの計画オペレータは、グループ計画オペレータ１０６内に包含されるからである。
【００２４】
しかしながら、グループ計画オペレータ１０６に対応するキャッシングされた結果セットがない場合には、データベースサーバは結合計画オペレータ１０８に対応するキャッシングされた結果セットを検索する。結合計画オペレータ１０８に対応するキャッシングされた結果セットが見つけられた場合には、そのキャッシングされた結果セットをグループ計画オペレータ１０６に対し入力として使用のため返し、実行計画１０２の、残りのオペレータを実行する必要はない。結合計画オペレータ１０８に対応するキャッシングされた結果セットにおいてグループ計画オペレータ１０６を実行した後、（結合計画オペレータ１０８に対応するキャッシングされた結果セットに基づく）グループ計画オペレータ１０６の結果セットをユーザに対しクエリー１０４の結果セットとして返す。別のクエリーがグループ計画オペレータ１０６または類似の計画オペレータを含むことに備えて、グループ計画オペレータ１０６の実行の結果セットを出力記憶に記憶してもよい。
【００２５】
結合計画オペレータ１０８に対応するキャッシングされた結果セットがない場合には、データベースサーバはテーブルスキャンおよびフィルタ計画オペレータ１１２ならびにテーブルスキャン計画オペレータ１１６に対応するキャッシングされた結果セットを検索する。テーブルスキャンおよびフィルタ計画オペレータ１１２に対応するキャッシングされた結果セットがある場合には、そのキャッシングされた結果セットを結合計画オペレータ１０８による使用のため返す。キャッシングされた結果セットがテーブルスキャンおよびフィルタ計画オペレータ１１２についてない場合には、データベースサーバはテーブルスキャンおよびフィルタ計画オペレータ１１２を実行し、テーブルスキャンおよびフィルタ計画オペレータ１１２を実行した結果セットを、結合計画オペレータ１０８による使用のため返す。加えて、テーブルスキャンおよびフィルタ計画オペレータ１１２の結果セットを後の使用のため記憶してもよい。同様に、キャッシングされた結果セットがテーブルスキャン計画オペレータ１１６について見つけられた場合には、そのキャッシングされた結果セットを結合計画オペレータ１０８の使用のため返す。キャッシングされた結果セットがテーブルスキャン計画オペレータ１１６に対して見つけられなかった場合には、データベースサーバはテーブルスキャン計画オペレータ１１６を実行し、テーブルスキャン計画オペレータ１１６を実行した結果セットを結合計画オペレータ１０８による使用のため返す。加えて、テーブルスキャン計画オペレータ１１６の結果セットを後の使用のため記憶してもよい。結合計画オペレータ１０８を、次いで、テーブルスキャンおよびフィル計画オペレータ１１２ならびにテーブルスキャン計画オペレータ１１６を実行することから生じたにせよ、テーブルスキャンおよびフィルタ計画オペレータ１１２ならびにテーブルスキャン計画オペレータ１１６に対応するキャッシングされた結果セットを見つけたことから生じたにせよ、またはテーブルスキャンおよびフィルタ計画オペレータ１１２ならびにテーブルスキャン計画オペレータ１１６の一方に対して記憶されるキャッシングされた結果セットを見つけ出し、他方を実行したことから生じたにせよ、返された結果セットにおいて実行する。次のグループ計画オペレータ１０６を結合計画オペレータ１０８の結果セットを用いて実行し、グループ計画オペレータ１０６の結果セットをユーザにクエリー１０４の結果セットとして返す。上で言及したように、グループ計画オペレータ１０６および／または結合計画オペレータ１０８を実行したことの結果セットを、別のクエリーがグループ計画オペレータ１０６または結合計画オペレータ１０８の一方を含むことに備えて
、計画オペレータ出力記憶に記憶してもよい。
【００２６】
ある実施例では、所与のオペレータの結果セットを必ずしも記憶しなくてもよい。その代わりに、費用利益分析を行なって、その所与のオペレータの結果セットを記憶するかどうか、または別のクエリーが同じオペレータを含む場合には結果セットを記憶しないで所与のオペレータを２回実行させるかどうかを判断する。所与のオペレータの結果セットを記憶するかどうかを判断することにおいて用いられてもよい要素のいくつかは、オペレータを実行することに対し必要な時間および資源、ならびに利用可能な記憶領域の量である。たとえば、計画オペレータを実行するよう必要とされる時間が、キャッシングされた結果セットを求めて出力記憶を検索するよう必要とされる予想される時間より短い場合には、結果セットは記憶されないかもしれない。同様に、結果セットを記憶するよう必要とされる記憶領域が出力領域における利用可能な記憶領域よりも大きい（なぜならば結果セットが非常に大きいかまたは記憶領域がいっぱいであるかもしくはほとんどいっぱいであるなどのため）場合には、結果セットは、同様に、記憶されないかもしれない。対照的に、結果セットが大きな記憶領域を必要としないかまたは大量の利用可能な記憶領域があり、計画オペレータが実行するのに非常に多くの時間を要する場合には、結果セットを記憶するかもしれない。当業者にとって明らかであるように、他の要素を用いて、新たに実行された計画オペレータの結果セットを記憶すべきかどうかを判断してもよい。
【００２７】
２つの異なるクエリーを、各々、データベースステートメントからなる異なる組によって構築してもよいが、それでも、同じ実行計画を有してもよい。たとえば、第１のクエリーはＮＡＴＵＲＡＬ（自然な）結合を含み、一方、第２のクエリーは、ＮＡＴＵＲＡＬ結合を用いる代わりに結合鍵がＵＳＩＮＧ（使用）節において明示的に名付けられることを除き、第１のクエリーと同じであってもよい。実行計画を構築し、その実行計画の結果セットを検索することにより、１つのクエリーの結果セットを他のクエリーの結果セットとして、それら２つのクエリーはデータベースステートメントからなる異なる組によって形成されるものの、返してもよい。
【００２８】
出力記憶はどのような種類のメモリであってもよく、たとえば、以下においてハードウェア概観で記載されるようなものであってもよい。ある実施例では、出力記憶は１つ以上の一時または短期記憶装置（たとえば揮発性記憶装置など）における１つ以上の記憶領域である。ある実施例では、その短期出力記憶は長期メモリ（たとえばハードドライブなど）と比較されると相対的に高速なアクセス時間を有してもよい（たとえばフラッシュメモリまたはＲＡＭなど）。ある実施例では、出力記憶は１つ以上の長期記憶装置（たとえば不揮発性記憶装置など）における１つ以上の記憶領域である。ある実施例では、出力記憶は１つ以上の長期記憶装置および短期記憶装置における１つ以上の記憶領域の組合せである。
【００２９】
計画オペレータのシグネチャ
ある実施例では、シグネチャを、各計画オペレータごとに、その計画オペレータの定義に基づいて確立する。シグネチャの発生は、同じまたは類似の定義を伴う計画オペレータが同じシグネチャを有するように行なわれる。ある実施例では、シグネチャは計画オペレータを定義または記述するよう用いられるデータ構造に基づいてもよい。たとえば、計画オペレータに関連付けられるデータ構造を用いてハッシュ値を発生させ、それを、シグネチャを構成するよう用いられるシーケンス番号を形成することに対して用いられる数値にマッピングしてもよい。
【００３０】
計画オペレータの結果セットはその計画オペレータのシグネチャとともに記憶してもよい。新たなクエリーが受取られると、先に実行された計画オペレータに関連付けられる結果セットの検索が、同じシグネチャを有する計画オペレータに関連付けられる結果セット
を検索することにより行なわれる。シグネチャを用いて、２つのクエリーを異なるように書いてもよいが、それらのそれぞれの実行計画は同じシグネチャを伴う計画オペレータを共有してもよい。
【００３１】
シグネチャの使用により、データサーバはクエリーに対して用いられてもよい結果セットをすばやく見つけることができる。ある実施例では、各計画オペレータを、その計画オペレータの記述そのものを表現するシグネチャにマッピングする。ある代替的実施例では、各計画オペレータを、他の計画オペレータの組および／または範囲に対してさらに用いられるシグネチャにマッピングし、このシグネチャに関連付けられる結果セットをそのシグネチャの組および／または範囲内における計画オペレータの各々に対して用いる。この実施例では、シグネチャは計画オペレータの記述そのものを必ずしも表現しはしない。ある実施例では、シグネチャの一致を見つけ出した後、計画オペレータを比較して、１つの計画オペレータからの結果セットが他の計画オペレータの結果セットとして使用可能であると期待されるかどうかを評価する。別の実施例では、２つのシグネチャが一致するかまたは十分に近い場合には、見つけ出された、キャッシングされた結果セットを、そのキャッシングされた結果セットを生じさせた計画オペレータをさらに調べることなく使用する。
【００３２】
類似しているが同一ではない計画オペレータ
クエリーは類似はしているが同一ではないことがしばしばである。同一ではないクエリーに対応する計画オペレータを検索することにより、結果セットがそのクエリーについて返されるであろう速度は増大するかもしれない。したがって、ある実施例では、ある計画オペレータの結果セットを検索する際、類似している、異なる計画オペレータに対するキャッシングされた結果セットが見つかった場合には、類似のオペレーションの結果セットを、実際のオペレーションを実行する代わりに用いてもよい。たとえば、あるクエリーに対して発生されたある計画オペレータが２０００年１１月１日〜２００４年１月１日の日付に関連付けられるデータの組を見つけ出すことを要し、あるキャッシングされた結果セットが、２０００年１１月１日〜２００４年２月２３日の日付に関連付けられるデータを見つける計画オペレータについて発見された場合には、その発見された、キャッシングされた結果セットを、そのクエリーに対して発生された実際の計画オペレータを実行する代わりに、用いてもよい。１つの実施例では、発見された、キャッシングされた結果セットを、さらなる修飾を伴わず、「そのまま」用いる。別の実施例では、発見された、キャッシングされた結果セットを、さらにフィルタ処理して、キャッシングされた結果セットにおける余剰データの一部またはすべてを除去する。別の実施例では、キャッシングされた結果セットまたはキャッシングされた結果セットのシグネチャを評価して、ユーザが、要求される結果と、この例では２００４年１月２日〜２００４年２月２３日の日付に関連付けられる余剰データである、発見された、キャッシングされた結果セットとの間の違いを受取ることを嫌がりそうであるかどうかを判断する。ユーザがそのような違いを気にしないであろうと予想される場合には、見つけられた、キャッシングされた結果セットを返し、計画オペレータは実行されない。ユーザがそのような違いを嫌がるであろうと予想される場合には、計画オペレータを実行するかまたはキャッシングされた結果セットをフィルタ処理して余剰データ２００４年１月２日〜２００４年２月２３日を除去する。
【００３３】
ある実施例では、典型的なユーザが、どちらの結果セットが返されるかを気にしないようである、と予想される場合には、２つの計画オペレータを同様に考慮してもよい。たとえば、ある実施例では、キャッシングされた結果セットの内容が計画オペレータのそれとほとんど同じであり、行のわずかなパーセンテージのみだけ異なる、と予想される場合には、キャッシングされた結果を計画オペレータの結果セットとして用いてもよい。類似しているが異なる、つまり非同類である、キャッシングされた結果セットをこのような態様で用いてもよいかどうかは、ユーザ入力により制御されてもよい。たとえば、ユーザは、
類似してはいるが異なるキャッシングされた結果セットを返してもよいかどうかを特定するコマンドまたはパラメータをクエリーに含ませてもよく、またはユーザのデータベースセッションにおけるある変数を、アプリケーション・プログラマ・インターフェイス（「ＡＰＩ」）を介して、類似しているが異なるキャッシングされた結果セットを返してもよいかどうかを特定するよう設定してもよい。パラメータまたは変数は、さらに、２つの計画オペレータまたはシグネチャが異なってもよい程度を特定し、その一方で、一方のキャッシングされた結果セットが他方の結果セットに対して用いられること可能にしてもよい。
【００３４】
さらに、ある実施例では、第１の計画オペレータが、第２の計画オペレータの結果セットのすべてを何らかの余剰データに加えて返すことが予想され、その余剰データが第２の計画オペレータの結果セットに対応する内容を不明瞭にするほど大量ではないと予想される場合には、第１の計画オペレータの結果セットを第２の計画オペレータの結果セットとしてそのまままたは修正された後に受入れてもよい。同様に、ある実施例では、第１の計画オペレータが第２の計画オペレータよりも小さい結果セットを返すことが予想されるが、欠落しているデータが重要または少量ではないと予想される場合には、第１の計画オペレータの結果セットを第２の計画オペレータの結果セットとしてそのまままたは修正された後に受入れてもよい。
【００３５】
古いキャッシングされた結果セット
所与のクエリーに対する計画オペレータは同一であるかもしれないが、それら計画オペレータの結果セットは、それらのクエリーが異なる時間に実行された結果のように異なるかもしれない。ある実施例では、所与の計画オペレータに対応するキャッシングされた結果セットを見つけると、チェックを行なって、その見つけられた、キャッシングされた結果セットが古いかどうかを見る。たとえば、ある実施例では、キャッシングされた結果セットが計算された時間を、計画オペレータ出力記憶においてキャッシングされた結果セットと関連付けて記憶する。キャッシングされた結果セットの古さがしきい値古さよりも古い場合には、キャッシングされた結果セットは、もはや、キャッシュに保存されせず、別のクエリーの計画オペレータに対し結果セットとして使用されない。このしきい値古さは上記されたユーザ入力に基づいてもよい。
【００３６】
ハードウェア概観
図４は、コンピュータシステム４００を示すブロック図であり、この発明のある実施例を実施してもよいマシンの一例である。具体的には、コンピュータシステム４００はデータベースサーバとして用いられてもよく、および／または上に記載された部分的なクエリーキャッシング法を実施するようプログラミングされてもよい。コンピュータシステム４００は情報を通信するためのバス４０２または他の通信機構、およびバス４０２に結合され情報を処理するためのプロセッサ４０４を含む。コンピュータシステム４００は、さらに、バス４０２に結合され、プロセッサ４０４によって実行されるべき情報または命令を記憶するためのメインメモリ４０６、たとえばランダムアクセスメモリ（ＲＡＭ）または他のダイナミック記憶装置などを含む。メインメモリ４０６は、さらに、プロセッサ４０４によって実行されるべき命令の実行中に一時的な変数または他の中間情報を記憶するために用いられてもよい。コンピュータシステム４００は、さらに、バス４０２に結合され、静的情報および命令をプロセッサ４０４のために記憶するためのリードオンリーメモリ（ＲＯＭ）４０８または他のスタティック記憶装置を含む。記憶装置４１０、たとえば磁気ディスクまたは光ディスクなどが設けられ、情報および命令を記憶するためにバス４０２に結合される。
【００３７】
コンピュータシステム４００は、バス４０２を介して、ディスプレイ４１２、たとえば陰極線管（ＣＲＴ）などに、コンピュータユーザに対して情報を表示するために結合され
てもよい。英数字キーおよび他のキーを含む入力装置４１４を、情報およびコマンド選択をプロセッサ４０４に通信するため、バス４０２に結合する。他のタイプのユーザ入力装置は、方向情報およびコマンド選択をプロセッサ４０４に通信するためおよびカーソルの動きをディスプレイ４１２上において制御するためのカーソル制御４１６、たとえばマウス、トラックボールまたはカーソル方向キーなどである。この入力装置は、典型的には、２つの自由度を２つの軸、つまり第１の軸（たとえばｘ）および第２の軸（たとえばｙ）において有し、装置が位置を面内において特定することを可能にする。
【００３８】
コンピュータシステム４００は計画オペレータの結果セットを記憶するために用いられてもよい。この発明の１つの実施例に従うと、計画オペレータの結果セットの記憶およびメモリ１１２における先に実行された計画オペレータのキャッシングされた結果セットに対する検索は、プロセッサ４０４がメインメモリ４０６に含まれる１つ以上の命令からなる１つ以上のシーケンスを実行することに応答して、コンピュータシステム４００により与えられてもよい。そのような命令は、メインメモリ４０６に、他のコンピュータ読取可能媒体たとえば記憶装置４１０などから読込まれてもよい。メインメモリ４０６に含まれる命令のシーケンスの実行は、プロセッサ４０４がここに記載される処理ステップを実行することを引起こす。マルチ処理構成における１つ以上のプロセッサをさらに用いて、メインメモリ４０６に含まれる命令のシーケンスを実行してもよい。代替的実施例では、結線された回路系をソフトウェア命令に代えて、またはソフトウェア命令との組合せで用いて、この発明を実施してもよい。斯くして、この発明の実施例はハードウェア回路系およびソフトウェアのどのような具体的な組合せにも限定されるものではない。
【００３９】
ここで用いられている「コンピュータ読取可能媒体」という語は「マシン読取可能媒体」の一例であり、実行のため命令をプロセッサ４０４に与えることにかかわる任意の媒体を指す。そのような媒体は数多くの形式を取り得、不揮発性媒体、揮発性媒体、および伝送媒体を含むが、それらに限定されるものではない。不揮発性媒体は、たとえば、光または磁気ディスク、たとえば記憶装置４１０などを含む。揮発性媒体はダイナミックメモリ、たとえばメインメモリ４０６などを含む。伝送媒体は、バス４０２を含むワイヤを含む、同軸ケーブル、銅線およびファイバ光学素子を含む。伝送媒体は音波または光波の形式、たとえば電波および赤外線データ通信中に生ずるものなどの形式も取り得る。
【００４０】
コンピュータ読取可能媒体の一般的な形態は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープもしくは任意の他の磁気媒体、ＣＤ−ＲＯＭ、任意の他の光学媒体、パンチカード、紙テープ、穴のパターンを有する任意の他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、フラッシュ−ＥＰＲＯＭ、任意の他のメモリチップもしくはカートリッジ、以下に記載されるような搬送波、またはコンピュータが読取り得る任意の他の媒体を含む。
【００４１】
さまざまな形式のコンピュータ読取可能媒体が、実行のためにプロセッサ４０４に対し１つ以上の命令からなる１つ以上のシーケンスを担持することに関与してもよい。たとえば、それらの命令はまず遠隔のコンピュータの磁気ディスクに担持されてもよい。遠隔のコンピュータは、それらの命令をそのダイナミックメモリにロードし、それらの命令を電話回線を介してモデムを使用することにより送り得る。コンピュータシステム４００に局在するモデムはそのデータを電話回線において受信し、赤外線送信機を用いてそのデータを赤外線信号に変換し得る。バス４０２に結合された赤外線検出器によって、赤外線信号で搬送されたデータが受信され、そのデータがバス４０２に置かれ得る。バス４０２はそのデータをメインメモリ４０６に搬送し、そこからプロセッサ４０４は命令を検索し実行する。メインメモリ４０６によって受取られる命令は、選択肢として、記憶装置４１０において、プロセッサ４０４による実行前または後に、記憶されてもよい。
【００４２】
コンピュータシステム４００は、さらに、バス４０２に結合される通信インターフェイス４１８を含む。通信インターフェイス４１８は、ローカルネットワーク４２２に結合されるネットワークリンク４２０に結合する２方向データ通信を与える。たとえば、通信インターフェイス４１８は、対応するタイプの電話回線に対するデータ通信接続を与えるよう、統合サービスデジタル網（ＩＳＤＮ）カードまたはモデムであってもよい。別の例として、通信インターフェイス４１８はコンパチブルＬＡＮに対するデータ通信接続を与えるようローカルエリアネットワーク（ＬＡＮ）であってもよい。無線リンクも実現されてもよい。そのようなどの実現例においても、通信インターフェイス４１８は、さまざまなタイプの情報を表現するデジタルデータストリームを搬送する電気信号、電磁気信号または光信号を送受する。
【００４３】
ネットワークリンク４２０は典型的にはデータ通信を１つ以上のネットワークを介して他のデータ装置に与える。たとえば、ネットワークリンク４２０は接続をローカルネットワーク４２２を介してホストコンピュータ４２４またはインターネットサービスプロバイダ（ＩＳＰ）４２６によって動作されるデータ装置に与えてもよい。ＩＳＰ４２６は、次いで、通信サービスを、今では一般に「インターネット」４２８と称される世界的なパケットデータ通信網を介して与える。ローカルネットワーク４２２およびインターネット４２８は、ともに、デジタルデータストリームを搬送する電気信号、電磁気信号または光信号を用いる。さまざまなネットワークを介する信号およびネットワークリンク４２０において通信インターフェイス４１８を介する信号は、デジタルデータをコンピュータシステム４００との間で搬送し、情報を移送する搬送波の例示的な形態である。
【００４４】
コンピュータシステム４００は、プログラムコードを含むメッセージの送信およびデータの受信を、ネットワーク、ネットワークリンク４２０および通信インターネット４１８を介して行ない得る。インターネットの例では、サーバ４２０によって、要求されたコードが、アプリケーションプログラムに対して、インターネット４２８、ＩＳＰ４２６、ローカルネットワーク４２２および通信インターネット４１８を介して送信されるかもしれない。この発明に従うと、１つのそのようなダウンロードされたアプリケーションは、ここに記載されるように、出力記憶における先に実行された計画オペレータと関連付けられる結果セットの記憶を可能にする。
【００４５】
受信されるコードは、受信されると、プロセッサ４０４によって実行されてもよく、および／または後の実行のために記憶装置４１０もしくは他の不揮発性記憶において記憶されてもよい。この態様で、コンピュータシステム４００はアプリケーションコードを搬送波の形式で得てもよい。
【００４６】
上の記載において、この発明の実施例は実施例ごとに異なってもよい数多くの具体的な詳細を参照して記載されてきた。したがって、何がこの発明であるか、および何が出願人によってこの発明であるよう意図されるかを唯一および排他的に示すものは、この出願から、任意の後の修正を含んでそれが出る具体的な形における特許請求の範囲である。そのような請求の範囲に含まれる文言に対しここにおいて明示的に述べられるすべての定義は請求の範囲において用いられるような文言の意味を支配する。したがって、請求の範囲において明示的に記載されない限定、要素、特性、特徴、利点または属性は請求の範囲をいかなる態様にも限定するべきではない。明細書および図面は、したがって、例示的な意味において見られるものであり、限定的な意味において見られるものではない。
【図面の簡単な説明】
【００４７】
【図１】実行計画図である。
【図２】この発明のある実施例に従う、計画オペレータを実行する方法を示すフローチャートの図である。
【図３】この発明のある実施例に従う、結果セットを記憶する方法を示すフローチャートの図である。
【図４】この発明のある実施例を実施してもよいコンピュータシステムを示すブロック図である。
【図１】
2007534087.tif 000003
【図２】
2007534087.tif 000004
【図３】
2007534087.tif 000005
【図４】
2007534087.tif 000006
【手続補正書】
【提出日】平成18年6月26日(2006.6.26)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
クエリーをデータベースサーバにおいて計算するための方法であって、
第１のクエリーを前記データベースにおいてユーザから受信することと、
前記第１のクエリーを前記データベースサーバを介して実行するために第１の計画を発生させることとを含み、前記計画は、第１の結果セットを出力する少なくとも第１の計画オペレータを含む第１の複数の計画オペレータを含み、前記方法はさらに、
第１のシグネチャを前記第１の計画オペレータに対して発生させることと、
前記第１の結果セットを、前記第１の計画オペレータを実行することにより発生させることと、
前記第１の結果セットを前記第１のシグネチャに関連付けて記憶することと、
前記第１の結果セットを前記第１のシグネチャに関連付けて記憶した後、
第２のクエリーをユーザから受信することと、
前記第２のクエリーを前記データベースサーバを介して実行するために第２の計画を発生させることとを含み、前記第２の実行計画は、少なくとも第２の計画オペレータを含む第２の複数の計画オペレータを含み、前記方法はさらに、
前記第１のシグネチャに基づいて、前記第１の結果セットからなる少なくとも部分的な組を前記第２のオペレータの第２の結果セットとして用いてもよいことを判断することと、
記憶された前記第１の結果セットからなる前記部分的な組に基づいて、前記第２のクエリーに対し、第２の結果セットを計算することとを含む、方法。
【請求項２】
前記シグネチャは前記第１の計画オペレータによって実行されるオペレーションに基づいて発生される、請求項１に記載の方法。
【請求項３】
前記判断するステップは、前記第２の計画オペレータのシグネチャを、複数の計画オペレータの、記憶されるシグネチャと少なくとも比較することにより、前記複数の計画オペレータの各々が前記第２の計画オペレータであるかどうかを判断することを含む、請求項１に記載の方法。
【請求項４】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一である、請求項１に記載の方法。
【請求項５】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一ではない、請求項１に記載の方法。
【請求項６】
前記第１の計画オペレータおよび前記第２の計画オペレータは類似している、請求項１に記載の方法。
【請求項７】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一であるが、前記第１の結果セットおよび前記第２の結果セットは異なる、請求項１に記載の方法。
【請求項８】
前記第１の実行計画は第３の計画オペレータを含み、前記方法は、さらに、第３の結果セットを前記第３の計画オペレータに応答して出力することを含み、前記第３の結果セットは記憶されない、請求項１に記載の方法。
【請求項９】
前記判断するステップは、いつ前記第１の結果セットが計算されたかを少なくとも判断することを含む、請求項１に記載の方法。
【請求項１０】
前記第１の計画オペレータと前記第２の計画オペレータとの間には差異が存在し、前記計算するステップは前記第１の結果セットを前記差異に基づいて少なくとも修正することを含む、請求項１に記載の方法。
【請求項１１】
第２のクエリーをユーザから受信することは、前記第２のクエリーを異なるユーザから受信することを含む、請求項１に記載の方法。
【請求項１２】
前記第１の結果セットからなる前記部分的な組を、記憶された前記第１の結果セットにフィルタを適用することにより計算することを含み、前記部分的な組は前記第２のクエリーに含まれる条件に基づいて発生される、請求項１に記載の方法。
【請求項１３】
１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに、
第１のクエリーを前記データベースにおいてユーザから受信するステップと、
前記第１のクエリーを前記データベースサーバを介して実行するために第１の計画を発生させるステップとを含み、前記計画は、第１の結果セットを出力する少なくとも第１の計画オペレータを含む第１の複数の計画オペレータを含み、さらに、
第１のシグネチャを前記第１の計画オペレータに対して発生させるステップと、
前記第１の結果セットを、前記第１の計画オペレータを実行することにより発生させるステップと、
前記第１の結果セットを前記第１のシグネチャに関連付けて記憶するステップと、
前記第１の結果セットを前記第１のシグネチャに関連付けて記憶した後、
第２のクエリーをユーザから受信するステップと、
前記第２のクエリーを前記データベースサーバを介して実行するために第２の計画を発生させるステップとを含み、前記第２の実行計画は、少なくとも第２の計画オペレータを含む第２の複数の計画オペレータを含み、さらに、
前記第１のシグネチャに基づいて、前記第１の結果セットからなる少なくとも部分的な組を前記第２のオペレータの第２の結果セットとして用いてもよいことを判断するステップと、
記憶された前記第１の結果セットからなる前記部分的な組に基づいて、前記第２のクエリーに対し、第２の結果セットを計算するステップとを含む方法を実行させる命令からな
る１つ以上のシーケンスを担持するマシン読取可能媒体。
【請求項１４】
前記シグネチャは前記第１の計画オペレータによって実行されるオペレーションに基づいて発生される、請求項１３に記載のマシン読取可能媒体。
【請求項１５】
前記判断するステップは、前記第２の計画オペレータのシグネチャを、複数の計画オペレータの、記憶されるシグネチャと少なくとも比較することにより、前記複数の計画オペレータの各々が前記第２の計画オペレータであるかどうかを判断することを含む、請求項１３に記載のマシン読取可能媒体。
【請求項１６】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一である、請求項１３に記載のマシン読取可能媒体。
【請求項１７】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一ではない、請求項１３に記載のマシン読取可能媒体。
【請求項１８】
前記第１の計画オペレータおよび前記第２の計画オペレータは類似している、請求項１３に記載のマシン読取可能媒体。
【請求項１９】
前記第１の計画オペレータおよび前記第２の計画オペレータは同一であるが、前記第１の結果セットおよび前記第２の結果セットは異なる、請求項１３に記載のマシン読取可能媒体。
【請求項２０】
前記第１の実行計画は第３の計画オペレータを含み、前記方法は、さらに、第３の結果セットを前記第３の計画オペレータに応答して出力することを含み、前記第３の結果セットは記憶されない、請求項１３に記載のマシン読取可能媒体。
【請求項２１】
前記判断するステップは、いつ前記第１の結果セットが計算されたかを少なくとも判断することを含む、請求項１３に記載のマシン読取可能媒体。
【請求項２２】
前記第１の計画オペレータと前記第２の計画オペレータとの間には差異が存在し、前記計算するステップは前記第１の結果セットを前記差異に基づいて少なくとも修正することを含む、請求項１３に記載のマシン読取可能媒体。
【請求項２３】
第２のクエリーをユーザから受信することは、前記第２のクエリーを異なるユーザから受信することを含む、請求項１３に記載のマシン読取可能媒体。
【請求項２４】
前記第１の結果セットからなる前記部分的な組を、記憶された前記第１の結果セットにフィルタを適用することにより計算することを含み、前記部分的な組は前記第２のクエリーに含まれる条件に基づいて発生される、請求項１３に記載のマシン読取可能媒体。
【国際調査報告】
2007534087.tif 000007
2007534087.tif 000008
2007534087.tif 000009