(57)【特許請求の範囲】
【請求項１】
データベースにおいて、第１の複数のフラグメントを有する第１の表と第２の複数のフラグメントを有する第２の表との間に結合述語を有する結合への応答を生成する方法であって、前記第１の複数のフラグメントのそれぞれは前記第１の表の水平区分のうちのいずれか１つであり、及び前記第２の複数のフラグメントのそれぞれは前記第２の表の水平区分のうちのいずれか１つであり、
前記方法は、コンピュータに下記ステップを実行させることを含み、該ステップが、
結合述語を有するクエリーの実行要求に応じて、結合フラグメント・マップをメモリから検索するステップであって、該結合フラグメント・マップは、前記第１の表から作成される第１のフラグメント・マップ及び前記第２の表から作成される第２のフラグメント・マップから作成され、前記第１のフラグメント・マップは、前記第１の表と前記第２の表との間の前記クエリーによって共通すると指定された属性、及び該共通すると指定された属性ごとに、前記第１の表からの第１のフラグメント番号を含み、及び前記第２のフラグメント・マップは、前記第１の表と前記第２の表との前記クエリーによって共通すると指定された属性、及び該共通すると指定された属性ごとに、前記第２の表からの第２のフラグメント番号を含み、前記結合フラグメント・マップは、前記第１のフラグメント番号と、該第１のフラグメント番号ごとに、該第１のフラグメント番号の前記共通すると指定された属性に属し且つ前記結合述語を満足する前記第２のフラグメント番号とを含む、前記検索するステップと、
前記結合フラグメント・マップを用いて、前記結合述語を満足することができないフラグメントを前記第１の複数のフラグメント及び前記第２の複数のフラグメントから削除するステップと、
削除されなかったフラグメントに対して前記結合述語を含む前記クエリーを実行するステップと
を含む、前記方法。
【請求項２】
データベースにおいて、第１の複数のフラグメントを有する第１の表と第２の複数のフラグメントを有する第２の表との間の結合を処理する方法であって、前記第１の複数のフラグメントのそれぞれは前記第１の表の水平区分のうちのいずれか１つであり、及び前記第２の複数のフラグメントのそれぞれは前記第２の表の水平区分のうちのいずれか１つであり、
前記方法は、コンピュータに下記ステップを実行させることを含み、該ステップが、
結合述語を有するクエリーの実行に応じて、結合フラグメント・マップをメモリから検索するステップであって、該結合フラグメント・マップは、前記第１の表から作成される第１のフラグメント・マップ及び前記第２の表から作成される第２のフラグメント・マップから作成され、前記第１のフラグメント・マップは、前記第１の表と前記第２の表との間の前記クエリーによって共通すると指定された属性、及び該共通すると指定された属性ごとに、前記第１の表からの第１のフラグメント番号を含み、及び前記第２のフラグメント・マップは、前記第１の表と前記第２の表との前記クエリーによって共通すると指定された属性、及び該共通すると指定された属性ごとに、前記第２の表からの第２のフラグメント番号を含み、前記結合フラグメント・マップは、前記第１のフラグメント番号と、該第１のフラグメント番号ごとに、該第１のフラグメント番号の前記共通すると指定された属性に属し且つ前記結合述語を満足する前記第２のフラグメント番号とを含む、前記検索するステップと、
前記結合フラグメント・マップを用いて、前記結合述語を満足するレコードを有しうるフラグメントを前記第１の複数のフラグメント及び前記第２の複数のフラグメントから識別するステップと、
前記識別されたフラグメントに対して前記結合述語を含む前記クエリーを実行するステップと
を含む、前記方法。
【請求項３】
前記フラグメントを識別するステップが、前記結合フラグメント・マップを用いて、前記結合述語を満足しうる前記第１のフラグメントのセットを識別するステップを含む、請求項２に記載の方法。
【請求項４】
前記フラグメントを識別するステップが、前記結合フラグメント・マップを用いて、前記第１のフラグメントの前記セットを有し前記結合述語を満足するところの前記第２のフラグメントのセットを識別するステップを更に含む、請求項３に記載の方法。
【請求項５】
前記フラグメントを識別するステップが、前記結合フラグメント・マップを用いて、前記第２のフラグメントの前記セットを有し前記結合述語を満足するところの前記第１のフラグメントの前記セットのサブセットを識別するステップを更に含む、請求項４に記載の方法。
【請求項６】
前記フラグメントを識別するステップが、前記結合フラグメント・マップを用いて、前記第１のフラグメントの前記セットを有し前記結合述語を満足するところの前記第２のフラグメントの前記セットのサブセットを識別するステップを更に含む、請求項５に記載の方法。
【請求項７】
前記第１のフラグメントの前記サブセットを識別するステップ及び前記第２のフラグメントの前記サブセットを識別するステップが、更なるフラグメントが削除されなくなるまで繰り返される、請求項６に記載の方法。
【請求項８】
コンピュータ読取り可能媒体であって、コンピュータに、請求項１〜７のいずれか１項に記載の方法の各ステップを実行させるためのプログラムを記録したコンピュータ読取り可能媒体。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、データベース・システムに関し、特に、データベース・システムによって結合述語を有するクエリーを処理する方法及び該方法の各ステップをコンピュータに実行させるためのプログラムを記録したコンピュータ読取り可能媒体に関する。
【０００２】
【従来の技術】
データベースは、情報の集合である。リレーショナル・データベースは、一つ以上の二次元表として一般に示される。各表は、行及び列に項目及び項目の属性を配列している。各表の行は、項目（レコードと称する）に対応し、かつ各表の列は、項目の属性（フィールドと称する）に対応する。リレーショナル・データベースでは、表の集合は、共通の属性または“キー”を介して相互に関連付けることができる。共通キーは、一つの表の情報を別の表の対応する情報に自動的に相互参照されることができる。
複雑な検索は、“クエリー”によりデータベースで実行されうる。クエリーは、データベースから検索するためにデータベース・システムに対する情報を特定すべき一つ以上の述語を含む。結合クエリーは、二つ以上の表からの情報を要求するクエリーである。例えば、一つの表に顧客情報を、別の表にクレジットカード・トランザクションを記憶するデータベースでは、結合クエリーは、住居が存在している州で顧客が買い物をしたようなトランザクションを要求しうる。結合クエリーは、二つの表からのレコードを選択するために基準を特定すべく少なくとも一つの結合述語を含まなければならない（例えば、顧客の住居の州がトランザクションが発生する州と同じである）。結合クエリーは、また、個々の表からのレコードを選択すべく一つ以上の単一表述語を含みうる。
【０００３】
結合クエリーを実行するために、通常のデータベース・システムは、いずれかのレコードが結合述語を満足するかどうかを決定すべく第１の表の各レコードに対して第２の表の全てのレコードを検査する。そのようなレコードは、“マッチ(match) ”したと言いうる。次いで、データベース・システムは、マッチしたレコードからのクエリー表を構築する。
多くの状況において、通常のデータベース動作は、結合クエリーを実行するときには許容できない程にスローでありうる。結合クエリーを処理するために必要な時間を低減するために複数の技術が開発されている。結合クエリーの性能を改良するための一つの技術は、データベース・システムによって検索するデータの量を低減することである。特に、結合述語を満足することができないレコードは、クエリーの両方の表から削除されるべきである。
【０００４】
そのような技術の一例は、以下のクエリーで説明されうる：
［例１］
SELECT * FROM R, S
WHERE R.r = S.s
and R.r < 10;
このクエリーは、結合述語R.r = S.s を満足させる全てのレコードを見つけることを試みる。
また、表Ｒからのレコードは、述語R.r < 10も満足させなければならないしかつR.r は、S.s に等しくなければならないので、推移の代数律(algegraic rule of transitivity)を適用することによって、データベース・システムは、表Ｓのマッチングレコードが条件S.s < 10も満足させなければならないということを決定する。
【０００５】
Ｓの述語を演繹した後、データベース・システムは、結合の結果に寄与することができないかもしれないＳの走査からのレコードを削除するために述語を適用しうる。フラグメンテーションは、クエリーの処理スピードを増すために用いる別の技術である。
フラグメンテーションは、フラグメントと呼ばれる水平区分に表を分ける。フラグメンテーションの後、表は、フラグメントの集合から構成される。
フラグメントは、一組のレコードを含む。フラグメントにレコードを記憶するための基準は、ユーザによって定義されかつ“フラグメンテーション・スキーム”として知られている。いずれのレコードも基準を満足させないならばフラグメントは、空であることが可能である。
【０００６】
【発明が解決しようとする課題】
“走査”は、表のフラグメントを読み出す処理である。フラグメントは、クラスタまたはネットワーク・アーキテクチャの個別のディスクまたは個別のノードに個々に記憶されうる。論理的に、全てのフラグメントは、同時に走査されうるし、それにより、完全な表を読み取ることができる全体の速度を増大する。定義により、同時に二つ以上のフラグメントを読み取るために、データベース・システムは、多重走査演算子を用いなければならない。“フラグメント削除”は、データベース・システムが、クエリーの結果に参加することができない表からのフラグメントを識別しかつ考慮からそれらのフラグメントを除去することができるような処理である。フラグメント削除の例は、以下のクエリーで説明されうる：
［例２］
SELECT * FROM R where R.month > “September ”
表Ｒが１２個のフラグメントを有し（一つが一年の各月）かつR.month （月）列が表Ｒの各レコードのフラグメントを識別するということを想定する。例えば、第１番目のフラグメントは、そのR.month 値が“January（１月）”である全てのレコードを含み、第２番目のフラグメントは、そのR.month 値が“February （２月）”である全てのレコードを含む、等である。
【０００７】
例２のクエリー及びフラグメンテーション・スキームを用いて、データベース・システムは、そのR.month 値が“October（１０月）”、“November（１１月）”、または“December（１２月）”であるレコードに対応している３個のフラグメント、具体的にはfragments #10 - #12 （第１０番目のフラグメント〜第１２番目のフラグメント）以外の、全てを削除することができる。削除された第１番目〜第９番目のフラグメントは、クエリーを満足させているレコードを戻すことができないかもしれないしかつ走査される必要もない。それゆえに、フラグメント削除は、データベース・システムに１２個の全ての代わりに３個のフラグメントを走査することを可能にする。
本発明は、結合への応答を生成するためのコンピュータに実装される方法を提供することを課題とする。
【０００８】
【課題を解決するための手段】
本発明は、データベースにおいて、第１の複数のフラグメントを有する第１の表（table）と第２の複数のフラグメントを有する第２の表との間に結合述語を有する結合への応答を生成するためにコンピュータに下記ステップを実行させる方法であって、
結合フラグメント・マップを検索するステップであって、該結合フラグメント・マップは、前記第１の表からの個々のフラグメントについて、前記第２の表からの前記フラグメントを識別し、該第２の表からのフラグメントは前記第１の表からの前記個々のフラグメントからのレコードを伴い前記結合述語を満足するところのレコードを含む、前記検索するステップと、
前記マップを用いて、前記結合述語を満足することができないフラグメントを削除するステップと、
削除されなかった前記フラグメント上の前記結合述語を実行するステップと
を含む、前記方法を提供する。
【０００９】
データベースにおいて、第１の複数のフラグメントを有する第１の表（table）と第２の複数のフラグメントを有する第２の表との間の結合を処理するためにコンピュータに下記ステップを実行させる方法であって、
結合フラグメント・マップを検索するステップであって、該結合フラグメント・マップは、前記第１の表からの個々のフラグメントについて、前記第２の表からのフラグメントを識別し、該第２の表からのフラグメントは前記第１の表からの前記個々のフラグメントからのレコードを伴ところの前記結合の結合述語を満足するところのレコードを含む、前記検索するステップと、
前記マップを用いて、前記結合述語を満足するレコードを有しうるフラグメントを識別するステップと、
前記識別されたフラグメント上の前記結合述語を実行するステップと
を含む、前記方法。
【００１０】
本発明の１つの実施態様では、前記第１の表からの、前記結合の単一表述語を満足するところの第１のフラグメントのセットを識別するステップを更に含む。
【００１１】
本発明の１つの実施態様では、前記フラグメントを識別するステップが、前記マップを用いて、前記フラグメントの第１のセットを伴い前記結合述語を満足するところの前記第２の表からの第２のフラグメントのセットを識別するステップを含む。
【００１２】
本発明の１つの実施態様では、クエリーを実行するステップをさらに含み、該クエリーを実行するステップは、前記第１のフラグメントのセット及び前記第２のフラグメントのセット上で該クエリーを実行するステップを含む。
【００１３】
本発明の１つの実施態様では、前記フラグメントを識別するステップが、前記マップを用いて、前記結合述語を満足しうる前記第１の表からの第１のフラグメントのセットを識別するステップを含む、請求項２に記載の方法。
【００１４】
本発明の１つの実施態様では、前記フラグメントを識別するステップが、前記マップを用いて、前記第１のフラグメントのセットを伴い前記結合述語を満足するところの前記第２の表からの第２のフラグメントのセットを識別するステップを更に含む。
【００１５】
本発明の１つの実施態様では、前記フラグメントを識別するステップが、前記マップを用いて、前記第２のフラグメントのセットを伴い前記結合述語を満足するところの前記第１のフラグメントのセットのサブセットを識別するステップを更に含む。
【００１６】
本発明の１つの実施態様では、前記フラグメントを識別するステップが、前記マップを用いて、前記第１のフラグメントのセットを伴い前記結合述語を満足するところの前記第２のフラグメントのセットのサブセットを識別するステップを更に含む。
【００１７】
本発明の１つの実施態様では、前記サブセットを識別するステップが、更なるフラグメントが削除されなくなるまで繰り返される。
【００１８】
本発明は、データベースにおいて、データベース表のクエリーを実行すべく動作しかつフラグメントへの表（table）の分離を支持するシステムにおいて、第１の表及び第２の表に結合演算を適用するためにコンピュータに下記ステップを実行させる方法であって、
前記第１の表の各フラグメントについて、前記第２の表のそれらのフラグメントを識別し、該識別をマップに記憶するステップステップであって、該第２の表からのフラグメントは前記第１の表フラグメントからのレコードを伴い前記結合述語を満足するところのレコードを含む、前記記憶するステップと、
前記クエリーの単一表述語を満足するレコードを有する前記第１の表からの第１のフラグメントのセットを識別するステップと、
前記マップを適用することによって、前記第２の表からの第２のフラグメントのセットを識別するステップであって、該第２の表からのフラグメントは前記第１のフラグメントのセットからのレコードを伴い前記結合述語を満足するところのレコードを含む、前記識別するステップと、
前記第１のフラグメントのセット及び前記第２のフラグメントのセット上の前記クエリーを実行するするステップと
を含む、前記方法を提供する。
【００１９】
本発明は、データベースにおいて、第１の複数のフラグメントを有する第１の表（table）と第２の複数のフラグメントを有する第２の表との間の結合を処理するためにコンピュータに下記ステップを実行させる方法であって、
前記第１の表からの個々のフラグメントについて、前記第２の表からのフラグメントを識別するマップを検索するステップであって、該第２の表からのフラグメントは前記第１の表からの前記個々のフラグメントからのレコードを伴い前記結合述語を満足するところのレコードを含む、前記検索するステップと、
前記第１の表からレコードを受け取るステップと、
前記マップを用いて、前記第２の表からのフラグメントのセットを識別するステップであって、該第２の表からのフラグメントは、前記受け取ったレコードの前記フラグメントを伴い、前記結合述語を満足する、前記識別するステップと、
前記受け取ったレコードを伴い前記結合述語を満足するところのレコードに対して前記識別されたフラグメントのセットを走査するステップと
を含む、前記方法を提供する。
【００２０】
本発明の１つの実施態様では、前記マップを用いて、前記結合述語を満足するレコードを含むフラグメントを選択するためにするステップを更に含み、前記受け取るステップ、使用するステップ及び走査するステップが、前記選択したフラグメントからの全てのレコードに適用される。
【００２１】
本発明は、データベース表のクエリーを実行すべく動作しかつフラグメントへの表（table）の分離を支持するシステムにおいて、第１の表及び第２の表に結合演算を適用するためにコンピュータに下記ステップを実行させる方法であって、
前記第１の表の各フラグメントについて、前記第２の表のそれらのフラグメントを識別し、該識別をマップに記憶するステップであって、該第２の表からのフラグメントは前記第１の表フラグメントからのレコードを伴い前記結合述語を満足するところのレコードを含む、前記記憶するステップと、
前記クエリーの単一表述語を満足するレコードを有する前記第１の表からの第１のフラグメントのセットを識別するステップと、
前記第１の表からレコードを受け取るステップと、
前記マップを適用することによって、前記第２の表からのフラグメントのセットを識別するステップであって、該第２の表からのフラグメントは前記受け取ったレコードを伴い、前記結合述語を満足するレコードを含む、前記識別するステップと、
前記受け取ったレコードを伴い前記結合述語を満足するところのレコードに対して、前記識別されたフラグメントのセットを走査するステップと
を含む、前記方法を提供する。
【００２２】
本発明は、リレーショナル・データベース表（table）のクエリーを実行すべく動作しかつフラグメントへの表の分離を支持するシステムにおいて、第１の表及び第２の表で結合述語を有するクエリーを最適化するためにコンピュータに下記ステップを実行させる方法であって、
第１のフラグメントのセットを識別するステップであって、該第１のフラグメントは、前記結合述語を満足することができるレコードを有する前記第１の表のフラグメントである、前記識別するステップと、
第２のフラグメントのセットを識別するステップであって、該第２のフラグメントは、前記結合述語を満足することができるレコードを有する前記第２の表のフラグメントである、前記識別するステップと、
前記識別されたフラグメントの前記クエリーを実行するステップと
を含む、前記方法を提供する。
【００２３】
本発明の１つの実施態様では、前記第１のフラグメントのセットは、結合フラグメント・マップによって識別され、該結合フラグメント・マップは、前記第１の表の各フラグメントについて、前記第２の表のフラグメントを識別し、該第２の表からのフラグメントは前記第１の表の個々のフラグメントからのレコードを伴い前記結合述語を満足するところのレコードを含む。
【００２４】
本発明の１つの実施態様では、前記識別されたフラグメントの前記クエリーを実行するステップは、
前記第１のフラグメントのセットからの選択したフラグメントからのレコードを検索するステップと、
前記第２のフラグメントのセットからのフラグメントのサブセットを識別するステップであって、前記サブセットは、前記選択したフラグメントを伴い前記結合述語を満足しうるところのレコードを有する前記第２の表のフラグメントである、前記識別するステップと、
前記結合述語を満足するレコードに対して前記フラグメントのサブセットを走査するステップと
を含む。
【００２５】
本発明は、リレーショナル・データベース表（table）のクエリーを実行すべく動作しかつフラグメントへの表の分離を支持するシステムにおける結合述語を処理するためにコンピュータに下記ステップを実行させる方法であって、
結合述語を有する簡略化されたクエリーを実行して、結合フラグメント・マップを生成するステップであって、前記結合フラグメント・マップは、前記第１の表の各フラグメントについて、前記第２の表のフラグメントを識別し、該第２の表からのフラグメントは前記第１の表フラグメントからのレコードを伴い前記結合述語を満足するところのレコードを含む、前記生成するステップと、
前記結合述語を満足するレコードを有する前記第１の表のフラグメントである第１のフラグメントのセットを識別すべく前記結合フラグメント・マップを使用するステップと、
前記結合フラグメント・マップを用いて、前記結合述語を満足するレコードを有する前記第２の表のフラグメントである第２のフラグメントのセットを識別するステップと、
前記第１のフラグメントのセットからの選択したフラグメントからのレコードを検索するステップと、
第２のフラグメントのセットからのフラグメントのサブセットを識別するステップであって、前記サブセットは、前記第２の表のフラグメントであり、該第２の表からのフラグメントは、前記選択したフラグメントを伴い前記結合述語を満足するところのレコードを有する、前記識別するステップと、
前記結合述語を満足するレコードに対して前記フラグメントのサブセットを走査するステップを具備する、前記方法を提供する。
【００２６】
本発明は、コンピュータ読取り可能媒体であって、コンピュータに、請求項１〜１８のいずれか１項に記載の方法の各ステップを実行させるためのプログラムを記録したコンピュータ読取り可能媒体を提供する。
【００２７】
本発明は、表のフラグメントへの分離を支持するデータベース・システムにおいて、第１の表（table）及び第２の表に結合述語を有する結合を最適化するためにコンピュータに下記ステップを実行させる方法であって、
前記結合述語を有する簡略化されたクエリーを実行して、結合フラグメント・マップを生成するステップを含み、前記結合フラグメント・マップは、前記第１の表の各フラグメントについて、前記第２の表のフラグメントを識別し、該第２の表からのフラグメントは前記第１の表フラグメントからのレコードを伴い前記結合述語を満足するところのレコードを含む、前記方法を提供する。
【００２８】
本発明の１つの実施態様では、前記結合フラグメント・マップは、前記第２の表のフラグメントを前記第１の表の各フラグメントについてリストし、該第２の表からのフラグメントは前記第１の表フラグメントからのレコードを伴い前記結合述語を満足するところのレコードを含む。
【００２９】
本発明の１つの実施態様では、前記結合フラグメント・マップは、前記第１の表及び前記第２の表からの各対のフラグメントに対するビットを有するビットマップである。
【００３０】
本発明の１つの実施態様では、前記ビットマップを圧縮するステップを更に含む。
【００３１】
本発明の１つの実施態様では、前記第１の表から第１のフラグメントを選択し、前記第２の表から第２のフラグメントを選択し、かつフラグメントのペアリングが前記結合述語を満足するレコードを含むかどうかを決定すべく前記第１のフラグメントと第２のフラグメントの前記ペアリングに対応するビットをチェックするステップを更に含む。
【００３２】
本発明の１つの実施態様では、前記ビットマップを生成するステップが、当該ビットマップがいっぱいになったならば打ち切られる。
【００３３】
本発明の１つの実施態様では、前記第１及び第２の表は、前記ビットマップが十分にスパースであるかどうかを決定すべくサンプルされる。
【００３４】
本発明の１つの実施態様では、前記ビットマップの生成は、サーバが、オンにされたスパースな数のビットを有するビットマップを探し出すために異なる表の種々のカラムを結合するようなディスカバリ処理によってトリガされる。
【００３５】
本発明の１つの実施態様では、結合フラグメント・マップが、揮発性メモリに記憶される。
【００３６】
本発明の１つの実施態様では、結合フラグメント・マップの生成が、明示的ユーザデータ定義コマンドによってトリガされる。
【００３７】
本発明の１つの実施態様では、結合フラグメント・マップの生成が、二つの表の間の参照保全規約の定義によってトリガされる。
【００３８】
本発明の１つの実施態様では、前記簡略化されたクエリーは、前記クエリーからの単一表述語を含まない。
【００３９】
本発明の１つの実施態様では、前記簡略化されたクエリーは、単一簡略結合述語を含む。
【００４０】
本発明の１つの実施態様では、前記第１の表または前記第２の表からのレコードが追加されるかまたは変更されたならば前記結合フラグメント・マップを更新するステップを更に含む。
【００４１】
本発明の１つの実施態様では、最初のクエリーと同じ結合述語及び少なくとも一つの異なる述語を有するところの新しいクエリーに対して、前記結合フラグメント・マップを検索するステップを更に含む。
【００４２】
本発明の１つの実施態様では、前記結合フラグメント・マップを用いて、前記最初のクエリーを適用する前記第１の表のフラグメント及び前記第２の表のフラグメントを選択するステップを更に含む。
【００４３】
本発明の更なる利点は、以下の詳細な説明に示されるであろうし、部分的には説明から自明であろうし、また、本発明を実施することによって修得しうる。本発明の利点は、及び特許請求の範囲において特に指摘された手段及び組合せにより認識されかつ得られうる。
【００４４】
【発明を実施するための最良の形態】
本発明は、データベース・システムが別の表からの情報を用いて一つの表からのフラグメントを削除することによって結合の処理を最適化することができる、“コ・フラグメント削除(Co-Fragment Elimination) ”と呼ばれるものを取り入れた方法及び装置を提供する。明細書及び特許請求の範囲で用いたように、用語“表(table) ”は、あらゆるレコードの集合を表すために用いる。
【００４５】
結合は、その最も一般的な形において、二つ以上の表からの情報を収集する動作である。これは、含まれる表のレコードからの情報を組み合わせる一つ以上の結合述語を特定することによって行われる。例えば、二つの表Ｒ及びＳの間の一般的な単一述語  結合は、以下のクエリーによって特定することができる：
SELECT R.all, S.all
FROM R,S
WHERE f(r) relop g(s)
ここでf(r)は、Ｒのレコードｒのフィールドから導出された任意の関数を示し、g(s)は、Ｓのレコードｓのフィールドから導出された任意の関数を示し、relop は、=, !=, <, <=, >, >=のいずれか一つである。上記クエリーの結合述語は、f(r) relop g(s) である。f(r)は、R.state (R. 州）のように簡単でありうるかまたは一つ以上のR の列の任意の関数であるようなより複雑な何かでありうる。
【００４６】
結合動作の結果は、ユーザに直接戻されうるかまたはそれがユーザに戻される前に更に処理されうる。また、結合出力のそのような後続処理は、データベースにおける他のデータレコードを更新し、挿入しまたは削除する目的のためにも用いられうる。本発明は、結合の出力に基づいて全てのそのようなアクティビティに適用される。
【００４７】
図１を参照すると、汎用コンピュータ・システム１０は、ユーザがデータベースのデータ上でクエリーを見ること及び実行することを可能にするプログラムを走らせる。コンピュータ・システム１０は、（パーソナルコンピュータまたはワークステーションのような）ディジタル・コンピュータ１２、ディスプレイ１４、（フロッピディスクドライブ、ハードディスクドライブ、ＣＤ−ＲＯＭドライブ、または磁気光学ディスクドライブのような）大量記憶装置１６、キーボード１８、及びマウス２０または（入力タブレットのような）他のポインタ装置を含む。コンピュータ１２は、通常の構成のものでありかつメモリ２２、プロセッサ２４、及び、メモリバス及び周辺バス（図示省略）のような、他の慣用のコンポーネントを含む。また、コンピュータ１２は、コンピュータ・システム１０がそれによってコンピュータネットワークを形成すべく通信リンク（図示省略）にわたり他のコンピュータ（図示省略）に接続されるような通信ハードウェア及びプログラム（図示省略）も含む。
【００４８】
コンピュータ・システム１０は、データを記憶しかつ処理するためのデータベース３０を含む。データベース３０は、単一コンピュータに集中化されうるか、またはそれは、コンピュータネットワークにわたり分散される。この説明では、データベース管理システムは、コンピュータ１２上で実行されるように示されるけれども、一般に、データベース３０は、永続的または一時的のいずれかで、データベースにリンクされたコンピュータ上で実行されるデータベース管理システム３８によって管理される。
【００４９】
本発明は、クレジッドカード会社に対する情報を記憶するように構成されたデータベースを用いて説明される。データベース３０は、顧客表（“表Ｒ”）３２及びトランザクション表（“表Ｓ”）３４を伴うリレーショナル・データベースである。更に、データベース３０は、結合フラグメント・マップ３６ビットマップ（図５〜６を参照して以下に説明する）を含む。データベース３０はまた、オブジェクト、インデックス表と相互作用しかつ操作するための規律のような、他の資源、及びクエリー要求（図示省略）を実行するためのインタプリタ（解釈プログラム）を含みうる。
【００５０】
図２Ａを参照すると、顧客表３２は、各顧客に対するレコード４０を含む。各レコード４０は、顧客番号フィールド（Ｒ．番号(R.number)）４２、顧客名前フィールド（Ｒ．名前(R.name)）４４、顧客州フィールド（Ｒ．州(R.state) ）４６を含む一つ以上の顧客住所フィールド、及びクレジットカード有効月フィールド（Ｒ．月(R.month) ）４８を含む。顧客表３２は、各有効月に対して一つずつ、１２個のフラグメントに区分される。各フラグメントは、その有効月だけのレコードを含む。
【００５１】
図２Ｂを参照すると、トランザクション表３４は、各クレジットカード・トランザクションに対するレコード５０を含む。各レコード５０は、トランザクション番号フィールド（Ｓ．番号(S.number)）５２、販売者名前フィールド（Ｓ．名前(S.name)）５４、販売者州フィールド（Ｓ．州(S.state）５６、トランザクション日付フィールド（Ｓ．週(S.week)）５８、及び顧客番号フィールド（Ｓ．ｒ番号(S.rnumber) ）５９を含む。
【００５２】
顧客番号フィールド４２及び５９は、表Ｓを表Ｒにリンクするためのキーとして用いられうる。これらの説明のために、トランザクション表３４は、５２個のフラグメントにフラグメントされる。各フラグメントが、一年の５２週の一つにおけるトランザクション日付を有するトランザクションに対するレコードを含む。
【００５３】
図１に戻り、ユーザ（人間またはプログラム）は、データベース３０からの情報を検索するために結合クエリーを提出しうる。例えば、ユーザは、顧客州フィールドR.state 及びトランザクション州フィールドS.state が同じ値を有するようなレコードをリストすべくデータベース３０にクエリーを行いうる。ここで次のクエリーを考慮する：
［例３］
SELECT * FROM R, S
WHERE R.month > "September"
AND R.state = S. state
例２のクエリーを参照して説明したように、データベース・システムは、既知の単一表技術を適用することによって表Ｒから９個のフラグメントを削除することができる。
【００５４】
他のフラグメントを削除するために、データベース・システムは、結合フラグメント・マップ３６を生成しまたはアクセスする。結合フラグメント・マップ３６は、二つの表からのどのフラグメントが結合述語を満足することができるレコードを含まずかつクエリー実行中に探索される必要がないかを示す。それゆえに、結合フラグメント・マップは、データベースの内容及び結合述語の両方に対して特異的である。データベースの内容が変化したならば、結合フラグメント・マップは、無効になりうる。結合フラグメント表３６は、ビットマップとして、多重フィールド−フラグメント・マップとして、または、どの対のフラグメントが結合述語を満足することができるレコードを含まないかを示す、フラグメント−フラグメント・マップまたは他のデータ構造として記憶されうる。結合フラグメント・マップは、クエリーにおける二つの表に対して二つのフィールド−フラグメント・マップ６０及び７０（図３Ａ及び３Ｂ参照）から構成されうる。結合フラグメント・マップは、リレーショナル、階層構造、オブジェクト指向型、または非リレーショナル・データベースを用いているデータベース・システムで実行されうる。
【００５５】
図３Ｂを参照すると、データベース・システム３０は、フィールド−フラグメント・マップ７０を生成しまたはアクセスする。フィールド−フラグメント・マップ７０は、表Ｓからのいずれのフラグメントがどの州からのレコードを含むかを示す。フィールド−フラグメント・マップ７０は、各州に対するエントリ７２を含みうる。各エントリ７２は、州がマッチするレコードを含む表Ｓからのフラグメントのリスト７６に対して特定の州７４をマッチする。例えば、フィールド−フラグメント・マップ７０は、S.state = "CA"を伴うレコードを含む表Ｓからのフラグメントのリスト、S.state = "AZ"を伴うレコードを含むフラグメントのリスト、等を含む。５０個の州が存在するので、フィールド−フラグメント・マップ７０において、あるものは空きでありうる、５０個エントリ７２が存在しうる。各リスト７６は、表Ｓに５２個のフラグメントが存在するので最大で５２個のフラグメント番号を含みうる。
【００５６】
図３Ａを参照して、データベース・システム３０は、表Ｒに対して同様なフィールド−フラグメント・マップ６０を生成しまたはアクセスする。また、フィールド−フラグメント・マップ６０も各州に対してエントリ６２を含む。各エントリ６２は、特定の州にマッチするレコードを含む表Ｒからのフラグメントのリスト６６に対して特定の州６４をマッチする。あるものが空きでありうる、５０個のエントリ６２が存在すべきであるが、各リスト６６は、表Ｒに１２個のフラグメントだけが存在するので、最大１２個のフラグメント番号を含みうる。図３Ａ及び３Ｂを参照すると、一緒にフィールド−フラグメント・マップ６０及び７０の最初の行を読み込むことによって、データベース・システムは、表Ｒのあるフラグメント番号（４、５、９及び１２）からのあるレコードが、表Ｓのあるフラグメント番号（２、４、７、２７及び３９）からのあるレコードにマッチするということを決定しうる。同様に、各マップの第２の行を読み込むことによって、データベース・システムは、表Ｒのあるフラグメント番号（１、２、７、９及び１１）からのレコードが、表Ｓのあるフラグメント番号（５、７、２７、３０、３１及び４５）からのレコードにマッチするということを決定しうる。
【００５７】
図４を参照すると、結合フラグメント・マップは、二つのフラグメント・マップ６０及び７０を組み合わせることによって形成された、単一のフィールド−フラグメント・マップ８０から構成されうる。フィールド−フラグメント・マップは、二つのフィールド−フラグメント・マップから州列６４及び７４を削除することによって生成されうる。フィールド−フラグメント・マップ結合マップ８０は、１２個のエントリ８２、即ち、表Ｒの各フラグメントについて一つのエントリを含む。エントリ８２は、表Ｒの上記関連付けられたフラグメント８４からのレコードを伴い結合述語を満足するところのレコードを含む表Ｓからのフラグメント番号のリスト８６を含む。例えば、最初のエントリは、表Ｒの第１番目のフラグメントからの一つ以上のレコードを伴い結合述語を満足するところのレコードを含む表Ｓからのフラグメント（５、７、２７、３０、３１、４５）のリストを有する。この説明では、フィールド−フラグメント・マップ８０は、二つのフィールド−フラグメント・マップ６０及び７０の最初の二つの行だけを組み合わせることによって生成された。
【００５８】
図５を参照すると、フィールド−フラグメント・マップ８０は、ビットマップ９０に変形することができる。フラグメント番号のリストの代わりに、ビットマップ９０は、表Ｒの各フラグメントに対する行９２及び表Ｓの各フラグメントに対する列９４を含む。ビットマップ９０では、“ｏｎ（オン）”ビット（図においてシェードされた）は、表Ｓのフラグメントにおけるあるレコードが表Ｒの対応するフラグメントに結合しうることを示す。ビットマップ９０は、例えば、ラン−レングス符号化または他の技術によって、圧縮されうる。ビットマップ９０は、この例及び例３のクエリーにより記述されるように、結合クエリーに含まれるいずれかの表からフラグメントを削除するために用いることができる。単一表述語(R.month > "September") を用いて、表９の第１番目〜第９番目のフラグメントが削除される。ビットマップ９０から、第１０番目のフラグメントのような、表Ｒのある一定の残りのフラグメントは、それらが表Ｓのいずれかのフラグメントからのレコードを伴い結合述語を満足するところのレコードを含まないので、削除できる。同様に、ビットマップ９０は、表Ｓのある一定のフラグメントが表Ｒの第１０番目〜第１２番目のフラグメントのレコードにマッチするレコードを含まないということを示す。例えば、表Ｓの第１番目、第３番目、第６番目、第８番目〜第２６番目、第２８番目〜第２９番目、第３２番目〜第３８番目、第４０番目〜第４４番目及び第４６番目〜第５２番目のフラグメントは、結合述語を満足するいかなるレコードにも寄与することができない。従って、ビットマップ９０を用いて、データベース・システムは、表Ｒからの２個のフラグメント以外の全て及び表Ｓからの９個のフラグメント以外の全てを削除することができる。
【００５９】
コ・フラグメント削除の後、データベース・システムは、表Ｒの２個のフラグメントにおける各レコードに対して表Ｓの９個のフラグメントだけを探索しなければならない。対照的に、従来の技術では、表Ｓの全ての５２個のフラグメントは、表Ｒの３個のフラグメントにおける各レコードに対して探索される。一般的に用いられ結合方法は、ハッシュ結合方法、ソフトマージ結合方法、及びネステッド・ループ方法である。後者は、インデックスでまたはインデックスなしで実行されうる。本発明は、いずれの結合方法にも適用される。特許請求の範囲の目的に対して、用語“サーチング”は、一つの特定の結合方法の使用を意味しない。ビットマップ９０は、可逆的である。即ち、（単一表述語に基づいて）表Ｓから削除されたフラグメントは、ビットマップ９０で、表Ｓの削除されたフラグメントにだけ結合する表Ｒからのフラグメントを削除するために用いることができる。
【００６０】
また、ビットマップ９０は、フラグメントを動的に削除するためにクエリーの実行でも使用することができる。再び、例３のクエリーを参照すると、最適化の後、データベース・システムは、表Ｒからの２個のフラグメント以外及び表Ｓの９個のフラグメント以外の全てを削除した。従来の技術では、結合演算子は、３個のフラグメントから表Ｒの各レコードを読み出しかつ結合述語を満足するレコードに対して表Ｓの残りの９個のフラグメントのそれぞれを走査する。しかしながら、表Ｒの特定のレコードに対して、表Ｓの全ての９個のフラグメントを探索する必要がない。ビットマップは、第１１番目のフラグメントから取り出された表Ｒからのレコードが、表Ｓの９つの残っているフラグメントの６つ、具体的には、第５番目、第７番目、第２７番目、第３０番目及び第４５番のフラグメントにだけマッチを見出すことができる、ということを示している。従って、表Ｒからのこの特定のレコードに対して、表Ｓの６個のフラグメントだけが走査される必要がある。同様に、表Ｒから取り出されたレコードが第１２番目のフラグメントからであるならば、表Ｓから５個のフラグメント、具体的には、第２番目、第４番目、第７番目、第２７番目及び第３９番目のフラグメントだけが走査される必要がある。
【００６１】
ビットマップの生成は、多くの方法でトリガすることができる。クエリー最適化装置は、クエリー処理戦略としてビットマップを生成すべく決定できる。ユーザは、インデックスの生成と同様な方法で所与のデータベースに対してデータ定義言語を用いてビットマップを明示的に生成できる。データベース・システムは、外部キー関係が完全性拘束条件として特定されるときにビットマップを潜在的に生成することができる。システムは、スパースビットマップをもたらす表間の結合に対して徹底的に探索できる。これらの場合の全てにおいて、システムは、合成ビットマップの期待スパース性を確認するためにサンプリングを用いることができる。スパース性は、マッチングタプルを有する２つの表からのフラグメントを示しているビットマップにおいてオンにされるビットの割合である。
【００６２】
ビットマップ９０を生成（または構築）するために、データベース・システムは、最初のクエリーに基づいて“簡略化されたクエリー”を実行する。簡略化されたクエリーは、最初のクエリーと同じ結合述語を含むが、単一表述語を全く含まない。例えば、例３のクエリーに対する簡略化されたクエリーは：
［例４］
SELECT R.fragment#, S.fragment# FROM R, S
WHERE R.state = S.state
簡略化されたクエリーを実行することは、マッチングレコードを含む各表からの対応するフラグメント番号を戻す。ビットマップ９０は、上述した中間結合マップ８０を生成することなく、直接的に生成されうる。簡略化されたクエリーが実行される速さを増大するために種々の技術を用いうる。第１及び第２の表からのレコードの必要なフィールドは、表自信よりも表インデックスのリーブ（葉）から検索されることが好ましい。更に、それらが存在するならば、列インデックスを用いることができる。別の例として、フラグメンテーション・スキームからの情報を用いうる。簡略化されたクエリーのある一定の実行の下で、一度マッチが、二つの表からのフラグメント間で行われたならば、他のレコードは、同じマッチに対して検索する必要がない。
【００６３】
ビットマップがあまりにも充填されているならば、ビットマップの生成は、取り止められうる、即ち、非スパーズであり、第１の表のフラグメントからのレコードが、第２の表からのフラグメントの大きな割合で対応マッチングレコードを有するということを示している。サンプリングは、ビットマップが十分にスパースであるか否かの早期決定に到着すべくビットマップを構築する目的に対して第１及び第２の表の両方で用いられる。ビットマップは、データベースに対して不揮発性メタデータに記憶されるのとは反対に揮発性メモリにだけ記憶されうる。ビット９０を構築するために性能費用がある。特に、簡略化されたクエリーを実行しかつ結果のビットマップを記憶するための費用がある。従って、データベース・システムは、ビットマップがビットマップを構築するための費用を保証するために性能において十分なゲインを供給するかどうかを決定しなければならない。一般的に、ビットマップは、それが、例えば、連続したクエリーにおいて、二度以上用いることができるならば最大の利益を供給することができる。
【００６４】
ビットマップが生成されるときにはいつでも、ビットマップがシステムしきい値と比較して十分にスパースでないならば、システムは、ビットマップを再生成する不必要な後続の試みを回避するためにデータベースのメタデータ定義においていつまでもその事実を記憶している。フラグメント結合マップは、ユーザがマップを十分にスパースにするためにデータを明示的にフラグメントするときに用いられうる。また、それは二つの表の間のデータが潜在的に“相関される”ならば、十分なスパース・コ・フラグメンテーションマップを結果として生ずるように用いることもできる。データベース・システムは、表、列、及び結合述語の各組合せに対して異なるビットマップ９０を必要とする。例えば、以下の二つのクエリーに対して個別のビットマップを必要とするであろう：
［例５］
SELECT * FROM R, S WHERE R.state = S.state
［例６］
SELECT * FROM R, S WHERE R.state < S.state
しかしながら、クエリーが同じ結合述語を用いるが異なる単一表述語を含むならば、同じビットマップを用いることができる。
【００６５】
クエリーが複数の結合述語を含むならば、フラグメント結合マップは、複数の結合マップにおける各サンプル結合に対して生成されうる。例えば、もしクエリーが
[例７］
SELECT * FROM R, S
WHERE R.state = S.state and R.name = S.name
であれば、一つのフラグメント結合マップがR.state = S.state を伴う簡単なクエリーを用いて生成されかつ別のフラグメント結合マップがR.name = S.name を伴う簡単なクエリーを用いて生成される。更に、簡単な結合述語のビットマップは、多重結合クエリーに対するビットマップを生成するために組み合わせることができる。この説明では述語P1は、R.state= S.state であり述語P2は、R.name = S.name である。クエリー
［例８］
SELECT * FROM R, S WHERE P1 and P2
に対するビットマップは、 P1 及びP2に対するビットマップに論理ＡＮＤを適用することによって生成することができる。同様に、クエリー
［例９］
SELECT *   FROM R, S WHERE P1 or P2
に対するビットマップは、 P1 及びP2に対するビットマップに論理ＯＲを適用することによって生成することができる。
【００６６】
一般に、データベースは、多重結合述語を扱うことができる。例えば、クエリーが：
SELECT R.all, S.all
FROM R,S
WHERE f1(r) relop1 g1(s) and/or
F2(r) relop2 g2(s) and/or
・・・
・・・
・・・
fn(n) relopn gn(s)
であるならば、データベース・システムは、組み合わされた全てのｎ述語に対して一つのフラグメント結合マップを構築することができるか、または、それは、各結合述語に対して一つの、ｎの個別のフラグメント結合マップ、またはこれら二つの極端間のフラグメント結合マップの中間組合せを構築することができる。しかしながら、データベース・システムが二つ以上の述語に対応しているビットマップを構築するならば、そのビットマップは、同じ述語を含むクエリーに対してだけ用いることができる。クエリーがより少ない数の述語を有するならばそのビットマップを用いることができない。それゆえに、最大効用のために、各単一結合述語に対して一つのフラグメント結合マップを構築することは利益がありうる。これらの個々の結合フラグメント・マップは、クエリーによって後述されるようにＡＮＤまたはＯＲにされうる。また、コ・フラグメント削除は、
SELECT * FROM R,S,T WHERE R.a = S.a AND S.a = T.a
と同じであるクエリー
［例１０］
SELECT * FROM R,S,T WHERE R.a = S.a = T.a
のように、３つ以上の表の結合上で実行されうる。例１０の例では、B1は、“ R.a = S.a”に対するビットマップでありかつB2は、“ S.a = T.a”に対するビットマップである。
【００６７】
上述したように、ビットマップB1は、表Ｒ及びＳからのフラグメントを削除するために用いることができ、ビットマップB2は、表Ｓ及びＴからのフラグメントを削除するために用いることができる。表ＲとＴの間のフラグメントを低減するために二つの技術を用いうる。第１の技術では、ビットマップB3は、ビットマップB1とB2を組み合わせることによって構築される。この技術は、ビットマップを構築するために結合マップを組み合わせることに類似する。次に、ビットマップB3は、Ｒ及びＴを低減するために用いることができる。第２の技術では、（ビットマップB2により）表Ｓから削除されたフラグメントは、再び表Ｒからフラグメントを削除するために用いることができる。一般に、データベース・システムは、個々に表Ｒ、Ｓ及びＴからのフラグメントを削除するために単一表フラグメント削除を用いることによって始動されうる。そして、ビットマップB1は、表Ｓからのフラグメントを削除するために表Ｒに対抗して用いられ、ビットマップB2は、表Ｔにおけるフラグメントを削除するために表Ｓに対抗して用いることができる。次いで、データベース・システムは、再び表Ｓを低減するために表Ｔにおいて新たに削除されたフラグメントを用い、そして、それは、再び表Ｒを低減するために表Ｓにおいて新たに削除されたフラグメントを用いる。データベース・システムは、いずれの表からもはやフラグメントを削除することができなくなるまでこの手順を繰り返し続ける。
【００６８】
その手順が記憶することができかつ後で用いることができる（“簡略化されたビットマップクエリー”を用いてそれを明示的に構築することなしに）ビットマップB3を発生することを結果として生ずるので、表ＲとＴの間の結合クエリーが共通であるならば、データベース・システムは、前の手順を選ぶべきである。他方、データベース・システムは、表ＲとＴの間の結合クエリーが相対的に稀でありビットマップB3を維持することのオーバーヘッドを保証しないならば、後者の手順を選ぶべきである。結合フラグメント・マップが実際の結合クエリーの結果から生成されるので、即ち、マップが表における実際のデータに依存するので、その有用性は、基礎をなしている表が変更される場合に消滅するかあるいは破壊される。
【００６９】
レコードが一つのまたは両方の表から削除されても、ビットマップをまだ使用することができる。データベース・システムがもはやマッチングレコードを有していないフラグメントを探索するので、性能は理想よりも低くなるであろう。レコードが一つのまたは両方の表において追加されたかまたは更新されたならば、ビットマップの完全性は、破壊されうる。フラグメントを更新する前までは認可されなかったが、追加されたかまたは変更された値がマッチングレコードを含むものとしてフラグメントをここで認めるならば、ビットマップの完全性が違反されてしまう。それゆえに、データベース・システムは、システムが変更されたかまたは新たなレコードに対抗して述語をチェックしない限りレコードが追加または更新されたときにはいつでもビットマップの完全性が違反されると想定しなければならない。
【００７０】
ビットマップを無効にする更新が生じた場合、システムは、ビットマップの完全性を増加的に更新しかつ維持することを決定できる。代替的に、システムは、ビットマップを無効にしかつそれを再生成することを決定できる。そのようなビットマップの再生成は、ビットマップが最適化装置によって必要と思われる次の瞬間に、即にかまたはユーザによる特定の、手動によるコマンド（命令）の結果としてのいずれかにより達成することができる。ビットマップの完全性が破壊されたときに、将来のクエリーで用いることができる前にそれは、復元されなければならない。先に示したように、ビットマップ９０を変更するために費用がかかり、かつそれを廃棄しかつ再生成することに費用がかかる。データベース・システムは、二つの代替のより良い方を選択すべくビットマップを変更または再生成するために必要な時間を推測しうる。例えば、データベース・システムに対して小さな増分変化が行われたならば、ビットマップは、変更されるであろうし、データベースにおいてより多くの数の変化が行われたならば、ビットマップは、再生成されるであろう。
【００７１】
図６を参照すると、データベース・システムは、最適化装置１１０、ビットマップ発生装置１７０、辞書管理装置１９０、及び実行装置２００を含んでいる複数のソフトウェアサブシステムを含む。サブシステムは、ビットマップを生成しかつ使用すべく相互作用する。最適化装置１１０は、コ・フラグメント削除を実行するためにビットマップに対する必要性を認識し、ビットマップを構築させる事象をトリガし、かつフラグメントを削除するためにビットマップを用いる。ビットマップ発生装置１７０は、ビットマップを生成するためにクエリーを形成し、簡略化されたクエリーを実行し、結果からフラグメント番号を収集し、そして収集したフラグメント番号からビットマップを生成する。辞書管理装置１９０は、他のクエリー及びユーザにアクセスさせるべくビットマップをグローバル的にアクセス可能な不揮発性記憶装置に保存し、要求によりビットマップを最適化装置に供給する。更に、辞書管理装置１９０は、先のビットマップを無効にする基礎をなしている表の一つまたは両方に対してデータ変更が発生したならば、無効としてビットマップに印を付ける。実行装置２００は、結合述語の実行中に動的コ・フラグメント削除を実行するためにビットマップを用いる。
【００７２】
図７を参照すると、ユーザからのクエリーを処理するためにデータベース・システムによって用いられる方法１００が示されている。まず、データベース・システムは、最適化装置を参照して以下に説明するように、クエリーを最適化する（ステップ１０２）。次に、データベース・システムは、表の一つのアクティブフラグメントを走査する（ステップ１０４）。可能ならば、データベース・システムは、同時にフラグメントを走査すべきである。結合述語は、走査中に受け取った各レコードに対して実行される（ステップ１０６）。一度結合述語の実行が終了したならば、処理が完了する。図８を参照すると、最適化装置は、例２を参照して先に説明したように、単一表クエリー述語を用いて両方の表Ｒ及びＳ上で単一表フラグメント削除を実行する（ステップ１１２）。
【００７３】
次いで、データベース・システムは、新しいビットマップが生成されるべきかどうかを決定する（ステップ１１４）。ユーザは、コマンドを挿入することによりまたはデフォルトを設定することによってデータベース・システムにビットマップを生成することを強制する。代替的に、ユーザは、データベース・システムにビットマップが生成されるべきかどうかを決定させる。この場合には、データベース・システムは、ビットマップを構築する費用が利益の価値があるかどうかを決定する。特に、通常の技術を用いて、コンピュータ・システムは、簡略化されたクエリーを実行し、ビットマップを生成し、ビットマップを記憶し、かつビットマップを用いてクエリーを実行する時間の長さを推測し、かつビットマップなしでクエリーを実行するために推測した時間の長さとその時間を比較する。
【００７４】
ビットマップが必要であるならば、データベース管理システムは、ビットマップがクエリーに対して利用可能であるかどうかを決定する（ステップ１１５）。ビットマップは、それが現行クエリーの結合述語に正確にマッチする結合述語によって生成され、かつビットマップの完全性が違反されていないときにだけ利用可能であると考えられうる。ビットマップが必要であるならば、最適化装置は、ビットマップ発生装置を呼出す（ステップ１１６）。ビットマップを生成するためにビットマップ発生装置を呼び出した後、またはステップ１１５で決定されたようにビットマップが既に利用可能であるならば、最適化装置は、ビットマップを取り出し（ステップ１１７）、かつ表Ｒのような、表の一つを最適化するためにサブルーチンを呼出す（ステップ１１８）。
【００７５】
図９を参照して、データベース・システムは、表Ｒを最適化するための方法１２０を含む。データベース・システムは、インアクティブとしてステップ１１２における単一表述語を用いて表Ｒから削除されたフラグメントに印を付け、かつアクティブとして残りのフラグメントに印を付けることによって始動する（ステップ１２２）。次いで、表Ｒは、インアクティブとして印が付けられる（ステップ１２４）。ビットマップは、次いで、表Ｓのどのフラグメントが、もしあれば、表Ｒからの各アクティブフラグメントに結合するかということを決定するために用いられる。データベース・システムは、表Ｒからの各アクティブフラグメントを検査するためにループを入力する（ステップ１２８）。データベース・システムは、表Ｒからのフラグメントが表Ｓのフラグメントからのレコードを伴い結合述語を満足するところのレコードを含むかどうかを決定するためにビットマップを用いる（ステップ１３０）。マッチが存在しないならば、表Ｒからのフラグメントは、インアクティブとして印が付けられる（ステップ１３２）。他方、マッチが存在すれば、フラグメントは、アクティブのままであり表Ｒは、また、アクティブと印を付けられる（ステップ１３４）。一度、表Ｒからの最後のアクティブフラグメントが検査されたならば、データベース・システムは、表Ｓを最適化すべくサブルーチンに進む（ステップ１３６）。
【００７６】
図１０を参照すると、データベース・システムは、表Ｓを最適化するための方法１４０を含む。データベース・システムは、インアクティブとしてステップ１１２において表Ｓから削除されたフラグメントに印を付け、かつアクティブとして表Ｓの残りのフラグメントに印を付けることによって始動する（ステップ１４２）。コンピュータ・システムは、フラグ(fragment ＿ eliminated ＿from＿S)を“フォールス(false)”に設定し（ステップ１４４）かつ、インアクティブとして表Ｓに印を付ける（ステップ１４６）。ビットマップは、次いで、表Ｒのどのフラグメントが、もしあれば、表Ｓからの各アクティブフラグメントに結合するかということを決定するために用いられる。データベース・システムは、表Ｓからの各アクティブフラグメントを検査するためにループを入力する（ステップ１４８）。データベース・システムは、表Ｓからのフラグメントが表Ｒのフラグメントからのレコードを伴い結合述語を満足するところのレコードを含むかどうかを決定するためにビットマップを用いる（ステップ１５２）。マッチが存在しないならば、表Ｒからのフラグメントは、インアクティブとして印が付けられ（ステップ１５４）かつフラグは、“真(true)”として設定される（ステップ１５６）。他方、マッチが存在すれば、フラグメントは、アクティブのままであり表Ｓは、アクティブと印を付けられる（ステップ１５８）。一度、両方の表におけるフラグメントが検査され、いずれかの表がインアクティブとして印を付けられたならば、クエリーは、それがゼロのレコードを戻すように、一時停止できる。
【００７７】
一度表Ｓからの最後のアクティブフラグメントが検査されたならば、データベースプログラムは、フラグをチェックする（ステップ１６４）。表Ｓからのあるフラグがビットマップを用いて削除されているので、表Ｓからの新たに削除されたフラグメントは、表Ｒからのフラグメントのあるものを削除することを試みるために用いることができる。従って、フラグが“真”に設定されるならば、データベース・システムは、表Ｒを最適化するための方法１２０に戻る（ステップ１６６）。一度サブルーチン１２０が終了したならば、表Ｒからの新しく削除されたフラグメントは、表Ｓからの更なるフラグメントを削除するために用いられる。それゆえに、データベース・システムは、もはやフラグメントが削除できなくなるまでサブルーチン１２０と１４０の間を交互にする。この時点ではフラグは、“フォールス”に設定されかつデータベース・システムは、クエリーの実行を行うために最適化装置に戻る（ステップ１６８）。
【００７８】
図９に戻り、サブルーチン１２０がサブルーチン１４０から呼び出されかつ追加フラグが表Ｒからインアクティブとして印を付けられたならば、ステップ１３６においてデータベース・システムは、表Ｓを最適化するためにサブルーチン１４０に進むより最適化装置に戻る。図１１を参照すると、ビットマップ発生装置１７０は、それが構築されている間に破損されることからビットマップを防ぐべく両方の表をロックすることによって始動する（ステップ１７２）。次いで、簡略化されたクエリーが構築される（ステップ１７４）。簡略化されたクエリーは、ユーザによって与えられたクエリーと同じ結合述語を含むが、全ての単一表述語は、除去される。簡略化されたクエリーは、実行され、かつ両方の表からのフラグメント番号は、二つのフィールド−フラグメント表（例えば、フラグメント表６０及び７０）を供給するためにクエリー結果から収集される（ステップ１７６）。次いで、フィールド−フラグメント表６０及び７０からのフラグメント番号は、ビットマップ９０を構築するために用いられる（ステップ１７８）。最後に、辞書管理装置サブルーチン１９０が呼び出され（ステップ１８０）、ロックが解除され、かつデータベース・システムは、最適化装置に戻る（ステップ１８２）。
【００７９】
図１２を参照すると、辞書管理装置１９０は、先のビットマップが現行のクエリーの結合述語に対して生成されたかどうかを決定することによって始動する（ステップ１９２）。先のビットマップが存在するならば、古いビットマップは、廃棄され（ステップ１９４）かつ新しいビットマップが保存される（ステップ１９６）。このクエリーに対して古いビットマップが存在しないならば、先のビットマップを廃棄するステップは、省略される。最後に、データベース・システムは、ビットマップ発生装置サブルーチンに戻る（ステップ１９８）。
【００８０】
図１３を参照することにより、実行装置２００は、データベース・システムがステップ１０６において結合述語を実行するときに呼び出される（図７参照）。簡単に言うと、実行装置は、表の一つのアクティブフラグメントからのレコードを受け取る。実行装置は、走査されるべき他の表からのフラグメントを識別するためにフラグメント番号及びビットマップを用いる。実行装置は、それらのフラグメントを走査し、フラグメントからのマッチングレコードレコードを収集し、かつマッチングレコードをユーザに戻す。実行装置は、一つの表Ｒのアクティブフラグメントからのレコードを受け取ることによって始動する（ステップ２０２）。レコードは、表ＲとＳが以下に説明する動作において切り替えうるけれども、この例では表Ｒから受け取られる。次いで、データベース・システムは、マッチングレコードに対して走査されるべき表Ｓのフラグメントを識別するために結合フラグメント・マップを用いる（ステップ２０４）。特に、結合フラグメント・マップがビットマップであるならば、データベース・システムは、フラグメントのその対が結合述語を満足するレコードを含むかどうかを決定すべく表Ｒのフラグメント番号に等しい行及び表Ｓのフラグメント番号に等しい列におけるビットをアクセスする。表Ｓの識別されたフラグメントは、結合述語を満足するレコードに対して走査される（ステップ２０６）。これらのレコードは、収集され（ステップ２０８）かつユーザに戻される（ステップ２１０）。最後に、完了メッセージがユーザに送られ（ステップ２１２）かつ実行装置が終了する（ステップ２１４）。
【００８１】
線形処理として説明されたけれども、実行装置２００の方法は、表Ｓからの各アクティブフラグメントが検査されるようなループされた処理で実行することができ、ビットマップは、フラグメントが走査されるべきかどうかを決定するために用いられ、フラグメントは、走査され（それがマッチングレコードを含んでいるものと想定する）かつ結合述語を満足するレコードは、ユーザに戻され、そして処理は、次のアクティブフラグメントに進む。
【００８２】
本発明は、ソフトウェア実装により説明されたが、本発明は、ソフトウェアまたはハードウェアまたはファームウェア、またはそれら３つの組合せで実現されうる。本発明は、実施例により説明されたが、本発明は、提示しかつ説明した実施例に限定されるものではない。それよりも、本発明の範疇は、特許請求の範囲によって画定される。
【図面の簡単な説明】
【図１】本発明によるプログラマブルでかつリレーショナル・データベースを含んでいる汎用コンピュータ・システムを示す図である。
【図２Ａ】図１のリレーショナル・データベースの表を示す図である。
【図２Ｂ】図１のリレーショナル・データベースの表を示す図である。
【図３Ａ】図２Ａの表のフラグメント・マップを示す図である。
【図３Ｂ】図２Ｂの表のフラグメント・マップを示す図である。
【図４】本発明による結合マップを示す図である。
【図５】図４の結合マップから導出されたビットマップを示す図である。
【図６】データベース管理システムのコンポーネントを示す図である。
【図７】結合クエリーの処理のフロー図です。
【図８】本発明による結合クエリーを最適化する方法のフロー図である。
【図９】本発明による結合クエリーを最適化する方法のフロー図である。
【図１０】本発明による結合クエリーを最適化する方法のフロー図である。
【図１１】本発明による結合ビットマップを生成する方法のフロー図である。
【図１２】本発明による結合ビットマップを生成する方法のフロー図である。
【図１３】本発明によるクエリーを実行する方法のフロー図である。
【符号の説明】
１０ 汎用コンピュータ・システム
１２ ディジタル・コンピュータ
１４ ディスプレイ
１６ マス記憶装置１６
１８ キーボード１８
２０ マウス
２２ メモリ
２４ プロセッサ
３０ データベース
３２ 顧客表（“表Ｒ”）
３４ トランザクション表（“表Ｓ”）
３６ 結合フラグメント・マップ
３８ データベース管理システム
【図１】
0004866495.tif 000002
【図２Ａ】
0004866495.tif 000003
【図２Ｂ】
0004866495.tif 000004
【図３Ａ】
0004866495.tif 000005
【図３Ｂ】
0004866495.tif 000006
【図４】
0004866495.tif 000007
【図５】
0004866495.tif 000008
【図６】
0004866495.tif 000009
【図７】
0004866495.tif 000010
【図８】
0004866495.tif 000011
【図９】
0004866495.tif 000012
【図１０】
0004866495.tif 000013
【図１１】
0004866495.tif 000014
【図１２】
0004866495.tif 000015
【図１３】
0004866495.tif 000016