(57)【要約】【課題】配列を部分集合に関する処理時間を短縮する。【解決手段】表形式データは、各々が、項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストＶＬと、一意的なレコード番号の順に、項目値番号を指示するためのポインタ値が格納されたポインタ配列ＰＶとからなる情報ブロックに分割されている。レコードのうち、その一部が部分集合として選択されたことに応答して、部分集合のレコード番号を収容した順序付き集合配列が生成され、順序付き集合のそれぞれのレコード番号が指し示す位置の、前記ポインタ配列中のポインタ値が、前記レコード番号の配置された位置に対応して、項目値番号配列中に配置され、項目値番号配列中の値を参照して、位置の要素を格納した第２のポインタ配列ＰＶ２および値の要素を格納した第２の値リストＶＬ２が生成される。【選択図】　図１０
2004145692.tif 000002
【特許請求の範囲】
【請求項１】
各々が項目と当該項目に属する項目値とを含むレコードの配列として表される表形式データ中、処理対象とすべき部分集合を抽出するためのデータ処理方法であって、
ａ）前記表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる情報ブロックに分割するように構成するステップと、
ｂ）前記レコードのうち、その一部が部分集合として選択されたことに応答して、当該部分集合のレコード番号を収容した順序付き集合配列を生成するステップと、
ｃ）前記順序付き集合のそれぞれのレコード番号が指し示す位置の、前記ポインタ配列中のポインタ値を、前記レコード番号の配置された位置に対応して、項目値番号配列中に配置するステップと、
ｄ）前記項目値番号配列中の値を参照して、位置の要素を格納した第２のポインタ配列および値の要素を格納した第２の値リストを生成するステップとを備え、
前記順序付き集合配列のレコード番号から、当該レコード番号が指し示す位置の第２のポインタ配列中の要素、および、第２のポインタ配列中の要素が指し示す位置の前記第２の値リスト中の要素を介して、値リスト中の値が特定されることを特徴とするデータ処理方法。
【請求項２】
前記第２のポインタ配列および第２の値リストを生成するステップが、
前記項目値番号配列中の要素をソートし、かつ、重複値が排除された状態となった配列を生成し、これを第２の値リストとするステップと、
前記ソートおよび重複値の排除を反映するように、前記項目値番号配列中の要素を変換して、第２のポインタ配列を生成するステップとを有することを特徴とする請求項１に記載のデータ処理方法。
【請求項３】
各々が項目と当該項目に属する項目値とを含むレコードの配列として表される表形式データ中、処理対象とすべき部分集合を抽出するためのデータ処理方法であって、
ａ）前記表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる情報ブロックに分割するように構成するステップと、
ｂ）前記レコードのうち、その一部が部分集合として選択されたことに応答して、当該部分集合のレコード番号を収容した順序付き集合配列を生成するステップと、
ｃ）前記順序付き集合のそれぞれのレコード番号が指し示す位置の、前記ポインタ配列中のポインタ値を、前記レコード番号の配置された位置に対応して、項目値番号配列中に配置するステップと、
ｅ）前記項目値番号配列中を第２の値リストとして利用するとともに、もとの値リストを第２の値リストとして利用するステップとを備え、
前記順序付き集合配列のレコード番号から、当該レコード番号が指し示す位置の第２のポインタ配列中の要素、および、第２のポインタ配列中の要素が指し示す位置の前記第２の値リスト中の要素を介して、値リスト中の値が特定されることを特徴とするデータ処理方法。
【請求項４】
さらに、前記順序付き集合配列のサイズと、前記値リストのサイズとを比較するステップを備え、
前記比較の結果、部分集合のサイズが、値リストのサイズより所定の割合で小さい場合に、前記ｃ）およびｄ）、または、前記ｃ）およびｅ）のステップを実行することを特徴とする請求項１ないし３の何れか一項に記載のデータ処理方法。
【請求項５】
請求項１ないし４の何れか一項に記載のデータ処理方法により生成された第２のポインタ配列および／または第２の値リストを利用した検索方法であって、
第２の値リスト中の要素のうち、検索対象となる項目値を指し示す要素を特定するステップと、
前記第２の値リストと同じサイズのフラグ配列中、前記特定された要素の位置と対応する位置に、フラグがオンである状態を示す値を配置するステップと、
前記順序付き集合中のレコード番号が指し示す、第２のポインタ配列の要素を特定するステップと、
前記フラグ配列中、前記第２のポインタ配列の要素が指し示す位置のフラグの状態を参照するステップと、
前記フラグの状態がオンである場合、前記レコード番号を、新たに設けられた出力用の順序付き集合配列に、順次配置するステップとを備えたことを特徴とする方法。
【請求項６】
請求項１ないし４の何れか一項に記載のデータ処理方法により生成された第２のポインタ配列および／または第２の値リストを利用した集計方法であって、
前記第２の値リストの要素に対応して、値のカテゴリを示す分類番号を配置する分類番号配列を生成するステップと、
指定された分類番号に対応する、前記順序付き集合配列中のレコード番号を特定するステップと、
前記特定されたレコード番号が指し示す、所定の値リストの項目値を用いた集計を実行するステップとを備えたことを特徴とする方法。
【請求項７】
請求項１ないし４の何れか一項に記載のデータ処理方法により生成された第２のポインタ配列および／または第２の値リストを利用したソート方法であって、
前記第２の値リストの値ごとに、前記第２のポインタ配列の指し示す要素の数である存在数を算出するステップと、
前記存在数に基づき、前記第２の値リストの値に対応する、前記順序付き集合配列中のレコード番号を配置すべき先頭の位置を示す累計数配列を生成するステップと、
前記累計数配列を参照して、前記値リスト中の項目値のソート順が反映されるように、前記順序付き集合配列のレコード番号を、出力用の配列中に配置するステップとを備えたことを特徴とする方法。
【請求項８】
請求項１ないし４の何れか一項に記載のデータ処理方法により、生成された、複数の表形式データのそれぞれに関する情報ブロックにおける、第２のポインタ配列および／または第２の値リストを利用して、表形式データを結合する方法であって、
複数の表形式データのそれぞれにおいて、共有化すべき項目を見出すステップと、
当該項目に関する情報ブロックの第２の値リスト中の項目値を等価にするステップと、
前記項目値を等価にすることに応答して、それぞれの情報ブロックにおいて、第２のポインタ配列中の要素を、前記項目値の配置の変化に合致するように更新するステップとを備えたことを特徴とする方法。
【請求項９】
各々が項目と当該項目に属する項目値とを含むレコードの配列として表される表形式データ中、処理対象とすべき部分集合を抽出するために、コンピュータを動作させるデータ処理プログラムであって、
ａ）前記表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる情報ブロックに分割するように構成するステップと、
ｂ）前記レコードのうち、その一部が部分集合として選択されたことに応答して、当該部分集合のレコード番号を収容した順序付き集合配列を生成するステップと、
ｃ）前記順序付き集合のそれぞれのレコード番号が指し示す位置の、前記ポインタ配列中のポインタ値を、前記レコード番号の配置された位置に対応して、項目値番号配列中に配置するステップと、
ｄ）前記項目値番号配列中の値を参照して、位置の要素を格納した第２のポインタ配列および値の要素を格納した第２の値リストを生成するステップとを、前記コンピュータに実行させ、
前記順序付き集合配列のレコード番号から、当該レコード番号が指し示す位置の第２のポインタ配列中の要素、および、第２のポインタ配列中の要素が指し示す位置の前記第２の値リスト中の要素を介して、値リスト中の値が特定されるように、前記コンピュータを動作させることを特徴とするデータ処理プログラム。
【請求項１０】
前記第２のポインタ配列および第２の値リストを生成するステップにおいて、
前記項目値番号配列中の要素をソートし、かつ、重複値が排除された状態となった配列を生成し、これを第２の値リストとするステップと、
前記ソートおよび重複値の排除を反映するように、前記項目値番号配列中の要素を変換して、第２のポインタ配列を生成するステップとを前記コンピュータに実行させることを特徴とする請求項９に記載のデータ処理プログラム。
【請求項１１】
各々が項目と当該項目に属する項目値とを含むレコードの配列として表される表形式データ中、処理対象とすべき部分集合を抽出するために、コンピュータを動作させるデータ処理プログラムであって、
ａ）前記表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる情報ブロックに分割するように構成するステップと、
ｂ）前記レコードのうち、その一部が部分集合として選択されたことに応答して、当該部分集合のレコード番号を収容した順序付き集合配列を生成するステップと、
ｃ）前記順序付き集合のそれぞれのレコード番号が指し示す位置の、前記ポインタ配列中のポインタ値を、前記レコード番号の配置された位置に対応して、項目値番号配列中に配置するステップと、
ｅ）前記項目値番号配列中を第２の値リストとして利用するとともに、もとの値リストを第２の値リストとして利用するステップとを、前記コンピュータに実行させ、
前記順序付き集合配列のレコード番号から、当該レコード番号が指し示す位置の第２のポインタ配列中の要素、および、第２のポインタ配列中の要素が指し示す位置の前記第２の値リスト中の要素を介して、値リスト中の値が特定されるように、前記コンピュータを動作させることを特徴とするデータ処理プログラム。
【請求項１２】
さらに、前記順序付き集合配列のサイズと、前記値リストのサイズとを比較するステップを、前記コンピュータに実行させ、
前記比較の結果、部分集合のサイズが、値リストのサイズより所定の割合で小さい場合に、前記ｃ）およびｄ）、または、前記ｃ）およびｅ）のステップを、前記コンピュータに実行させることを特徴とする請求項９ないし１１の何れか一項に記載のデータ処理プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、表形式データの部分集合を効率的に処理するための方法およびプログラムに関する。
【０００２】
【従来の技術】
データベースなど大量のデータを、検索、集計、ソートするため、或いは、これらのデータをジョイン、更新等するためには多大な時間を要する。これを解決すべく、本発明者は、表形式のデータを極めて拘束に検索、集計およびソートするための手法、並びに、表形式のデータをジョインし、更新し、或いは、トランザクション処理する手法を提案している（たとえば、特許文献１〜３参照）。
【０００３】
【特許文献１】
国際公開第ＷＯ００／１０１０３号パンフレット
【特許文献２】
特開２０００−３３９３９０号公報
【特許文献３】
特開２００１−０４３２９０号公報
【０００４】
これら文献に提示された一連の方法は、一切のインデックスを用いず、統一的な処理を実行することができ、かつ、部分集合に対しても効率を落とすことなく処理を実行することが可能であるという点で革新的である。
本発明者の考案にかかる表形式データは、以下に説明するようなデータ構造を備えている。図１（ａ）は、表形式データの例を示す図である。この例では、レコード番号を格納した配列１００中の各レコード番号のそれぞれに、「会員名」、「地域」および「ファン」という項目の値（項目値）が対応付けられている（符号１０１参照）。本発明者の考案にかかるデータ構造は、図１（ａ）に示すような表形式データを、図２（ａ）〜（ｃ）に示すような形式で保持している。
【０００５】
たとえば、図２（ａ）に示すように、項目「会員名」に関して、当該項目値が５０温順（英字ではアルファベット順）でソートされた値リスト（以下、場合によって「ＶＬ」と称する。）２１１と、各レコード番号に対応して、当該レコード番号が指し示す値リスト２１１中の要素位置を示す番号が格納された、値リストへのポインタ配列（以下、場合によって「ＰＶ」と称する）２１２とが設けられている。このようにある項目に関して、ポインタ配列および値リスト、および、これらに加えて場合によって付随する一以上の配列を含む配列群を、情報ブロック（符号２０１参照）と称する。図２（ａ）から理解できるように、ポインタ配列は、表形式データのレコード数と同じ数の要素を含む。項目「地域」に関しても、情報ブロック２０２は、ＰＶおよびＶＬを含み、同様に、項目「ファン」に関しても、情報ブロック２０３は、ＰＶおよびＶＬを含む。
【０００６】
レコード番号「０」に着目すると、情報ブロック２０１中のＰＶの値は、「５」であるから、格納位置が「５」であるようなＶＬ中の項目値「Ｇｒｅｅｎｅ」が特定される。同様に、情報ブロック２０２、２０３のＰＶの値は、それぞれ、「５」および「２」であるため、対応する格納位置番号の項目値「Ｔｏｋｙｏ」および「Ｇ−Ｔｅａｍ」が特定される。これらは、図１（ａ）におけるレコード番号「１」に含まれるそれぞれの項目値と一致することが理解できるであろう。
このようなデータ構造を利用して、検索、集計、ソート、さらには、ジョインをすることにより、著しく高速な処理を実現している。
【０００７】
【発明が解決しようとする課題】
しかしながら、上記データ構造を用いた検索等の処理において、以下のような問題点が生じうることが認識された。
全体のレコード数から少数の部分集合を処理対象として、部分集合中から所望のレコードを検索する場合であっても、本出願人が考案した手法においては、ＶＬと同じサイズの配列を設け、当該配列の要素として、検索される値の範囲に含まれるか否かを示すフラグを配置する。同様に、検索の合否判定にも値リストと同じサイズの配列が必要となる。
【０００８】
ソート時や集計時においても、値リストと同じサイズの一以上の配列を要する。さらに、ジョインの処理時にも、値リストと同じサイズの種々の配列を設ける必要がある。
したがって、著しく大きなレコード数から、ごく少数の部分集合を処理対象として検索、集計、ソートおよびジョインの処理を行う場合であっても、情報ブロック中に大規模な値リストが設けられていると、処理に必要な配列のために大きなメモリ領域を必要とする。また、当該配列中に値を配置する処理、値を走査する処理などを要するため、レコード全体を処理対象とした場合と比較して、処理対象が少数である割には、処理時間を短縮することができないという問題点があった。
【０００９】
本発明は、上記配列を部分集合の大きさ、これに伴って限定される値リストの部分集合の大きさに合致させて、部分集合の大きさに相当する処理時間の短縮を実現する手法を提供することを目的とする。
【００１０】
【課題を解決するための手段】
本発明の目的は、各々が項目と当該項目に属する項目値とを含むレコードの配列として表される表形式データ中、処理対象とすべき部分集合を抽出するためのデータ処理方法であって、
ａ）前記表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる情報ブロックに分割するように構成するステップと、
ｂ）前記レコードのうち、その一部が部分集合として選択されたことに応答して、当該部分集合のレコード番号を収容した順序付き集合配列を生成するステップと、
ｃ）前記順序付き集合のそれぞれのレコード番号が指し示す位置の、前記ポインタ配列中のポインタ値を、前記レコード番号の配置された位置に対応して、項目値番号配列中に配置するステップと、
ｄ）前記項目値番号配列中の値を参照して、位置の要素を格納した第２のポインタ配列および値の要素を格納した第２の値リストを生成するステップとを備え、
前記順序付き集合配列のレコード番号から、当該レコード番号が指し示す位置の第２のポインタ配列中の要素、および、第２のポインタ配列中の要素が指し示す位置の前記第２の値リスト中の要素を介して、値リスト中の値が特定されることを特徴とするデータ処理方法により達成される。
【００１１】
本発明によれば、部分集合を構成するレコード番号に関連する値リストの項目値を指し示す第２の値リストを生成し、第２の値リストを参照して、データ処理（後述するような、検索、集計、ソート、結合処理）を実行することが可能となる。したがって、参照するデータ量を小さくできるため処理時間を短縮化することができる。また、データ処理の際に生成される配列のサイズも、第２の値リストや第２のポインタ配列と同じにすることができるため、必要とされるメモリ領域を小さくすることが可能となる。
【００１２】
好ましい実施態様においては、前記第２のポインタ配列および第２の値リストを生成するステップが、前記項目値番号配列中の要素をソートし、かつ、重複値が排除された状態となった配列を生成し、これを第２の値リストとするステップと、前記ソートおよび重複値の排除を反映するように、前記項目値番号配列中の要素を変換して、第２のポインタ配列を生成するステップとを有する。
【００１３】
また、別の好ましい実施態様において、各々が項目と当該項目に属する項目値とを含むレコードの配列として表される表形式データ中、処理対象とすべき部分集合を抽出するためのデータ処理方法は、
ａ）前記表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる情報ブロックに分割するように構成するステップと、
ｂ）前記レコードのうち、その一部が部分集合として選択されたことに応答して、当該部分集合のレコード番号を収容した順序付き集合配列を生成するステップと、
ｃ）前記順序付き集合のそれぞれのレコード番号が指し示す位置の、前記ポインタ配列中のポインタ値を、前記レコード番号の配置された位置に対応して、項目値番号配列中に配置するステップと、
ｅ）前記項目値番号配列中を第２の値リストとして利用するとともに、もとの値リストを第２の値リストとして利用するステップとを備え、
前記順序付き集合配列のレコード番号から、当該レコード番号が指し示す位置の第２のポインタ配列中の要素、および、第２のポインタ配列中の要素が指し示す位置の前記第２の値リスト中の要素を介して、値リスト中の値が特定される。
【００１４】
この実施態様においては、第２の値リストは、もとの値リストであるため、そのサイズを小さくすることはできないが、第２のポインタ配列として、順序付き集合配列と同じサイズの項目値番号配列を利用している。したがって、もとのポインタ配列およびもとの値リストを利用する場合と比較すると、参照するデータ量を小さくでき、処理時間を短縮化することが可能となる。
【００１５】
好ましい実施態様においては、さらに、前記順序付き集合配列のサイズと、前記値リストのサイズとを比較するステップを備え、前記比較の結果、部分集合のサイズが、値リストのサイズより所定の割合で小さい場合に、前記ｃ）およびｄ）、または、前記ｃ）およびｅ）のステップを実行する。
【００１６】
ここでは、第２のポインタ配列および第２の値リストを生成するための処理時間を考慮しても、処理時間の短縮化が認められる場合に、第２のポインタ配列および第２の値リストを生成し、これらを利用した処理を実行するように構成している。所定の割合は、たとえば、（部分集合のサイズ、つまり、レコード数）／（値リストのサイズ、つまり、レコード数）＝１／ｎ（ｎは１より大きな数）にて定めることができる。この「ｎ」は、オペレータが所望の数を入力することにより定められても良いし、あらかじめ所定の数に定められていても良い。
【００１７】
また、本発明の目的は、上記データ処理方法により生成された第２のポインタ配列および／または第２の値リストを利用した検索方法であって、第２の値リスト中の要素のうち、検索対象となる項目値を指し示す要素を特定するステップと、前記第２の値リストと同じサイズのフラグ配列中、前記特定された要素の位置と対応する位置に、フラグがオンである状態を示す値を配置するステップと、前記順序付き集合中のレコード番号が指し示す、第２のポインタ配列の要素を特定するステップと、前記フラグ配列中、前記第２のポインタ配列の要素が指し示す位置のフラグの状態を参照するステップと、前記フラグの状態がオンである場合、前記レコード番号を、新たに設けられた出力用の順序付き集合配列に、順次配置するステップとを備えたことを特徴とする方法によっても達成される。
【００１８】
別の実施態様において、上記データ処理方法により生成された第２のポインタ配列および／または第２の値リストを利用した集計方法は、前記第２の値リストの要素に対応して、値のカテゴリを示す分類番号を配置する分類番号配列を生成するステップと、指定された分類番号に対応する、前記順序付き集合配列中のレコード番号を特定するステップと、前記特定されたレコード番号が指し示す、所定の値リストの項目値を用いた集計を実行するステップとを備えている。
【００１９】
さらに別の実施態様において、上記データ処理方法により生成された第２のポインタ配列および／または第２の値リストを利用したソート方法は、前記第２の値リストの値ごとに、前記第２のポインタ配列の指し示す要素の数である存在数を算出するステップと、前記存在数に基づき、前記第２の値リストの値に対応する、前記順序付き集合配列中のレコード番号を配置すべき先頭の位置を示す累計数配列を生成するステップと、前記累計数配列を参照して、前記値リスト中の項目値のソート順が反映されるように、前記順序付き集合配列のレコード番号を、出力用の配列中に配置するステップとを備えている。
【００２０】
また、別の実施態様において、上記データ処理方法により、生成された、複数の表形式データのそれぞれに関する情報ブロックにおける、第２のポインタ配列および／または第２の値リストを利用して、表形式データを結合する方法は、複数の表形式データのそれぞれにおいて、共有化すべき項目を見出すステップと、当該項目に関する情報ブロックの第２の値リスト中の項目値を等価にするステップと、前記項目値を等価にすることに応答して、それぞれの情報ブロックにおいて、第２のポインタ配列中の要素を、前記項目値の配置の変化に合致するように更新するステップとを備えている。
【００２１】
さらに、本発明の目的は、各々が項目と当該項目に属する項目値とを含むレコードの配列として表される表形式データ中、処理対象とすべき部分集合を抽出するために、コンピュータを動作させるデータ処理プログラムであって、
ａ）前記表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる情報ブロックに分割するように構成するステップと、
ｂ）前記レコードのうち、その一部が部分集合として選択されたことに応答して、当該部分集合のレコード番号を収容した順序付き集合配列を生成するステップと、
ｃ）前記順序付き集合のそれぞれのレコード番号が指し示す位置の、前記ポインタ配列中のポインタ値を、前記レコード番号の配置された位置に対応して、項目値番号配列中に配置するステップと、
ｄ）前記項目値番号配列中の値を参照して、位置の要素を格納した第２のポインタ配列および値の要素を格納した第２の値リストを生成するステップとを、前記コンピュータに実行させ、
前記順序付き集合配列のレコード番号から、当該レコード番号が指し示す位置の第２のポインタ配列中の要素、および、第２のポインタ配列中の要素が指し示す位置の前記第２の値リスト中の要素を介して、値リスト中の値が特定されるように、前記コンピュータを動作させることを特徴とするデータ処理プログラムによっても達成される。
【００２２】
好ましくは、前記第２のポインタ配列および第２の値リストを生成するステップにおいて、前記項目値番号配列中の要素をソートし、かつ、重複値が排除された状態となった配列を生成し、これを第２の値リストとするステップと、前記ソートおよび重複値の排除を反映するように、前記項目値番号配列中の要素を変換して、第２のポインタ配列を生成するステップとを前記コンピュータに実行させる。
【００２３】
別の実施態様において、各々が項目と当該項目に属する項目値とを含むレコードの配列として表される表形式データ中、処理対象とすべき部分集合を抽出するために、コンピュータを動作させるデータ処理プログラムは、
ａ）前記表形式データを、各々が、特定の項目に属する項目値に対応した項目値番号の順に当該項目値が格納されている値リストと、一意的なレコード番号の順に、当該項目値番号を指示するためのポインタ値が格納されたポインタ配列とからなる情報ブロックに分割するように構成するステップと、
ｂ）前記レコードのうち、その一部が部分集合として選択されたことに応答して、当該部分集合のレコード番号を収容した順序付き集合配列を生成するステップと、
ｃ）前記順序付き集合のそれぞれのレコード番号が指し示す位置の、前記ポインタ配列中のポインタ値を、前記レコード番号の配置された位置に対応して、項目値番号配列中に配置するステップと、
ｅ）前記項目値番号配列中を第２の値リストとして利用するとともに、もとの値リストを第２の値リストとして利用するステップとを、前記コンピュータに実行させ、
前記順序付き集合配列のレコード番号から、当該レコード番号が指し示す位置の第２のポインタ配列中の要素、および、第２のポインタ配列中の要素が指し示す位置の前記第２の値リスト中の要素を介して、値リスト中の値が特定されるように、前記コンピュータを動作させる。
【００２４】
好ましくは、さらに、前記順序付き集合配列のサイズと、前記値リストのサイズとを比較するステップを、前記コンピュータに実行させ、前記比較の結果、部分集合のサイズが、値リストのサイズより所定の割合で小さい場合に、前記ｃ）およびｄ）、または、前記ｃ）およびｅ）のステップを、前記コンピュータに実行させる。
【００２５】
なお、本明細書において、種々の配列中に収容される数値を、「要素」や「値」と称するが、これらは表現上の相違にすぎず、本質的な相違は無い。たとえば、「値リスト」に収容されるものは、「項目値」とも表現するが、これも値リスト中の「要素」であることは明らかである。
【００２６】
【発明の実施の形態】
以下、添付図面を参照して、本発明の実施の形態につき説明を加える。図３は、本発明の実施の形態にかかる表形式データ中の処理対象となる部分集合のための変換配列を作成する処理、並びに、検索、集計、ソートおよびジョインの処理を実現するコンピュータシステムのハードウェア構成を示すブロックダイヤグラムである。本実施の形態においては、検索、集計、ソートおよびジョインの処理に先立って、図２（ａ）〜（ｃ）に示すような情報ブロックに関して、処理対象となるレコードおよび値リストの要素のみを含む配列を作成する。この処理を「事前処理」と称する。次いで、事前処理により作成された配列を作業領域として、検索、集計などの各種処理を実行する。
【００２７】
図３に示すように、このコンピュータシステム１０は、通常のものと同様の構成であり、プログラムを実行することによりシステム全体および個々の構成部分を制御するＣＰＵ１２、ワークデータなどを記憶するＲＡＭ（Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）１４、プログラム等を記憶するＲＯＭ（Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）１６、ハードディスク等の固定記憶媒体１８、ＣＤ−ＲＯＭ１９をアクセスするためのＣＤ−ＲＯＭドライバ２０、ＣＤ−ＲＯＭドライバ２０や外部ネットワーク（図示せず）と接続された外部端子との間に設けられたインタフェース（Ｉ／Ｆ）２２、キーボードやマウスからなる入力装置２４、ＣＲＴ表示装置２６を備えている。ＣＰＵ１２、ＲＡＭ１４、ＲＯＭ１６、外部記憶媒体１８、Ｉ／Ｆ２２、入力装置２４および表示装置２６は、バス２８を介して相互に接続されている。
【００２８】
本実施の形態にかかる、前処理のプログラム、検索、集計、ソート、ジョインなどのプログラムは、ＣＤ−ＲＯＭ１９に収容され、ＣＤ−ＲＯＭドライバ２０に読取られても良いし、ＲＯＭ１６に予め記憶されていても良い。また、いったんＣＤ−ＲＯＭ１９から読み出したものを、外部記憶媒体１８の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク（図示せず）、外部端子およびＩ／Ｆ２２を経て外部から供給されるものであっても良い。
【００２９】
また、本実施の形態においては、前処理、高速な検索、集計、ソートおよびジョイン処理を実現するために、図２（ａ）〜（ｃ）に示すデータ形式の情報ブロックを生成する必要がある。この情報ブロック生成プログラムも同様に、ＣＤ−ＲＯＭ１９に収容され、ＲＯＭ１６に記憶され、或いは、外部記憶媒体１８に記憶されても良い。或いは、これらプログラムは、ネットワーク（図示せず）を介して、外部から供給されても良いことはいうまでもない。また、本実施の形態において、情報ブロック生成プログラムにて生成されたデータ（情報ブロック）は、ＲＡＭ１４に記憶され、或いは、外部記憶媒体１８の所定の領域に記憶される。
【００３０】
次に、コンピュータシステム１０にて実行される処理の概略について説明を加える。図４に示すように、本実施の形態においてはレコード全体或いはその一部を処理対象とする検索、集計或いはソートの処理により、レコードがより限定的に選択され（ステップ４０１）、さらに、選択されたレコードの集合を処理対象として、検索、集計、ソート或いはジョインの処理が開始されるときに（ステップ４０２）、一定の条件の下で（ステップ４０３）、事前処理が実行される（ステップ４０４）。この事前処理を、場合により「スコープ」の設定処理と称し、事前処理が行われた後に行われる検索等の処理を、「スコープを用いた」検索等の処理と称する（ステップ４０５）。
【００３１】
なお、選択されたレコードの集合を「順序付集合」と称する。この順序付集合の配列には、選択されたレコード番号が、所定の順序（たとえば昇順）で配置される。事前処理においては、後の検索等の処理に利用するための第２のポインタ配列（ＰＶ２）および第２の値リスト（ＶＬ２）が生成される。この生成処理については後述する。第２のポインタ配列は、順序付集合の要素数と同じ要素を含み、順序付集合の配列中の要素に対応する第２の値リスト中の要素を指し示すようになっている。また、第２の値リストには、値リスト（ＶＬ）の格納位置番号が収容される。第２の値リストの要素の数は、順序付集合の配列中の要素の数以下である。つまり、順序付集合の配列中の要素（選択されたレコード）に対応する項目値の全てが異なる場合のみ、これら要素の数が一致する。したがって、順序付集合の配列中の要素数は、第２の値リストの要素数のとり得る最大値となる。
【００３２】
そこで、本実施の形態においては、本来の値リスト（ＶＬ）の要素数（サイズ）が、順序付集合の配列中の要素数（サイズ）より十分に小さい場合には（ステップ４０３参照）、本実施の形態における第２のポインタ配列および第２のＶＬを用いた処理、つまり、スコープを用いた検索等の処理が実行される（ステップ４０５）。たとえば、順序付集合のサイズが、ＶＬのサイズの１／ｎ（ｎ：設定された１より大きい値）以下であるとすれば良い。この「ｎ」は、レコード数、プロセッサの処理能力などにしたがって設定することができる。
【００３３】
このような判断は、以下の理由により実行される。スコープを用いた処理においては、事前処理（ステップ４０４）が必要であり、その実行には時間を要する。このため、順序付集合のサイズ（実際には第２の値リストのサイズ）が、ＶＬのサイズより十分に小さく、事前処理の実行時間が加えられた場合であっても、通常の処理（ステップ４０６）を実行するのに比較して、全体の処理時間を短縮できると考えられる場合のみ、つまり、事前処理およびスコープを用いた検索等の処理により、通常の処理と比較して、処理時間を短縮できる場合のみ、ステップ４０４およびステップ４０６の処理を実行することが望ましいからである。
したがって、上記「十分に小さい」とは、事前処理を経ても処理時間が短縮できる程度に小さいことを意味し、絶対的な数の大小を定義するものではない。
【００３４】
次に、本実施の形態にかかる事前処理につき説明を加える。図５は、本実施の形態にかかる事前処理を示すフローチャートである。図５に示すように、順序付き集合の配列中の位置（格納位置番号）を指定するパラメータを初期化した後（ステップ５０１）、当該パラメータの示す順序付き集合の配列中の要素が特定される（ステップ５０２）。初期的には、図６において、順序付き集合の配列６０１中、格納位置番号が「０」番の要素「０」が特定される。
【００３５】
次いで、上記順序付き集合の配列中の要素が指し示す、ポインタ配列中の要素を参照して、当該要素が指し示す位置の項目値の番号（項目値番号）が特定される（ステップ５０３）。上述した初期的状態の例では、順序付き集合の配列中の要素「０」が指し示すポインタ配列中の要素「２」が特定される。この要素は、値リスト中の関連する要素（項目値）の位置を示す番号を意味しているため、これを項目値番号と称している。
【００３６】
この項目値番号は、別途設けられた項目値番号配列中、パラメータが指し示す位置に配置される（ステップ５０４）。上記初期的状態の例では、ポインタ配列２１２中の要素（項目値番号）「２」が、項目値番号配列６１１中、パラメータ「０」が指し示す位置に格納される。なお、項目値番号配列は、順序つき集合の配列と同じ数の要素を備える。
【００３７】
このような処理を繰り返すことにより（ステップ５０５、５０６参照）、順序つき集合中の要素（選択されたレコード番号）ごとに、対応する項目値番号を収容した項目値番号配列を作成することができる（図６の符号６１１参照）。
項目値番号配列の生成を完了すると、コンパイル処理が実行される（ステップ５０７）。本実施の形態においては、レコードの部分集合が処理対象である場合に、当該部分集合に関連する値リスト中の項目値のみを参照している。したがって、処理対象となる範囲を限定することから、本書面において「スコープ」とも称する。
【００３８】
スコープを実現するためには、部分中の要素が参照する値リストの部分集合と、レコードの部分集合中の要素（レコード番号）と、値リストの部分集合との変換配列とを要する。前者が、第２の値リスト（ＶＬ２）であり、後者が第２のポインタ配列（ＰＶ２）となる。そして、第２の値リストおよび第２のポインタ配列を生成する処理をコンパイル処理と称する。
図７は、コンパイル処理の一例を示すフローチャートである。この例にかかるコンパイル処理においては、まず、項目値番号配列の複製が作成される（ステップ７０１）。図６に示すような情報ブロック２０１およびレコードの部分集合である順序つき集合の配列６０１に関する例では、図８（ａ）に示すように、項目値番号配列（元配列）と同じ要素を有するような複製配列が生成される。
【００３９】
次いで、複製配列がソートされた後（ステップ７０２および図８（ｂ）参照）、ソートされた複製配列中の重複値が排除され、配列がコンデンスされる（ステップ７０３および図８（ｃ）参照）。このようにして、要素がソートされかつ重複値が排除された配列が、第２の値リスト（ＶＬ２）となる。さらに、項目値番号配列（元配列）中の各要素の、第２の値リスト中の位置が特定され、特定された位置を示す値が、元配列の格納位置番号の要素として、新たに用意した配列に格納される（ステップ７０４および図８（ｄ）参照）。ステップ７０４にて要素が格納された配列が、第２のポインタ配列（ＰＶ２）となる。
【００４０】
項目値番号配列は、値の成分と位置の成分とが混在すると考えることができる。そこで、ステップ７０１〜７０３の処理において、値の成分のみを抽出し、抽出された値の成分のみを含む第２の値リスト（ＶＬ２）が生成されている。また、引き続くステップ７０４において位置の成分を抽出し、位置の成分のみを含む第２のポインタ配列（ＰＶ２）が生成されている。
このようにして、コンパイル処理により生成された第２の値リストおよび第２のポインタ配列は、情報ブロックの一部として、後述する検索、集計、ソート、ジョインなどの処理に利用される。
【００４１】
次に、上記第２の値リストおよび第２のポインタ配列を利用した（スコープを利用した）検索処理について説明する。図９は、本実施の形態にかかるスコープを利用した検索処理を示すフローチャートである。この処理においては、まず、第２の値リスト（ＶＬ２）と同じサイズのフラグ配列領域が確保される（ステップ９０１）。このフラグ配列においては、値リストの要素（項目値）のうち、検索対象となったものが格納される位置（格納位置）と同じ位置に、「１」が配置され、他の位置には「０」が配置される。したがって、次のステップにおいて、フラグ配列中に「１」或いは「０」の値が配置される。
【００４２】
図１０は、選択されたレコード（順序付き集合）の項目「ファン」に関して、「Ｔ−ｔｅａｍ」という項目値をもつレコードを検索する例を示している。ここでは、第２の値リスト（ＶＬ２）の要素が特定され、当該要素が指し示す値リスト（ＶＬ）中の要素（項目値）が検索対象であるか否かが判断される。項目値が検索対象であれば、フラグ配列中、第２の値リスト（ＶＬ２）の要素の格納位置に対応する位置に、「１」を配置する。図１０の例では、項目値「Ｔ−ｔｅａｍ」が検索対象であるため、フラグ配列中、第２の値リスト（ＶＬ２）中、値リスト（ＶＬ）の項目値「Ｔ−ｔｅａｍ」を指し示す要素の格納位置（格納位置番号「１」）に、値「１」が配置される。
【００４３】
このようにして、フラグ配列に値が配置されると、順序付き集合の配列中の位置８格納位置番号）を示すパラメータを初期化した後（ステップ９０３）、当該当該パラメータが指し示す、順序付き集合の配列中の要素が特定される（ステップ９０４）。図１１の例では、初期的には、順序つき集合の配列中、格納位置番号が「０」番の要素「０」が特定される。次いで、当該要素が指し示す、第２のポインタ配列（ＰＶ２）中の要素が特定され、さらに、ＰＶ２中の要素が指し示すフラグ配列中の値が特定される（ステップ９０５）。上記初期的状態の例では、第２のポインタ配列（ＰＶ２）中の要素「０」が指し示す位置のフラグ配列の値は「０」であることが特定される。
【００４４】
次いで、当該特定されたフラグ値が「１」であるか否かが判断される（ステップ９０６）。フラグ値が「１」であれば（ステップ９０６でイエス（Ｙｅｓ））、順序付き集合の配列の要素が、設けられた出力用配列中に配置される（ステップ９０７）。図１１の例においては、順序付き集合の配列中、格納位置番号「１」の要素「２」について、ＰＶ２およびフラグ配列をたどると、フラグ配列中のフラグ値が「１」となる。したがって、出力用配列中に、上記順序付き周到の配列の要素「２」が格納される。
このような処理が、順序付き集合の格納位置番号に対する全てのパラメータに関して実行される（ステップ９０８、９０９参照）。出力用配列に得られた要素が、それぞれ、検索により抽出されたレコード番号となる。
【００４５】
このように、本実施の形態によれば、レコードの部分集合である順序付き集合中の要素に対応付けられた、値リスト中の要素を示す情報（値リストの格納位置番号）を、第２の値リスト（ＶＬ２）に格納し、検索処理において、このサイズと同じサイズのフラグ配列を作成し、フラグ配列中の値を参照して、検索対象となったレコードであるか否かを判断している。フラグ配列のサイズは、第２の値リストのサイズと等しいため、全てのレコードに関連する値リストのサイズと比較して十分に小さい。したがって、フラグ配列の作成や値の参照に要する時間を短縮することができ、これにより、検索処理の処理時間を十分に短くすることが可能となる。
【００４６】
次に、スコープを利用した集計処理につき説明を加える。集計処理は、ある特定の１以上の項目値をもつレコード数を算出するものである。本実施の形態では、第２の値リストと同じサイズの存在数配列を設け、当該存在数配列に、第２の値リスト（ＶＬ２）中の項目値に関連するレコードの数を格納しておき、この存在数配列中の要素を取り出すことにより、即座に、集計を実現することができる。
【００４７】
図１２は、「項目」ファンに関する情報ブロックにおける第２のポインタ配列（ＰＶ２）、第２の値リスト（ＶＬ２）および存在数配列を示す図である。ＰＶ２において、格納位置番号「０」および「２」の２個の要素が、ＶＬ２の格納位置番号「０」に一致する。したがって、存在数配列中、格納位置番号「０」の要素は、「２」となる。その一方、ＰＶ２において、格納位置番号「１」の１個（単一）の要素が、ＶＬ２の格納位置番号「１」に一致する。したがって、存在数配列中、格納位置番号「１」の要素は、「１」となる。なお、存在数配列の生成については、次に述べるソート処理において、詳細に説明する。
【００４８】
本実施の形態によれば、集計処理においても、利用する存在数配列のサイズを、本来の値リストよりも十分に小さい第２の値リストと同じサイズにすることができる。したがって、存在数配列の作成に要する時間を短縮でき、これにより全体の処理時間を短くすることが可能となる。
【００４９】
次に、スコープを用いたソート処理につき説明を加える。図１３および図１４は、スコープを用いたソート処理を示すフローチャートである。図１３に示すように、まず、第２の値リスト（ＶＬ２）と同じサイズで、かつ、初期値「０」が配置された初期的な存在数配列が生成される（ステップ１３０１）。次いで、第２のポインタ配列（ＰＶ２）の位置（格納位置番号）を指定するためのパラメータを初期化した後（ステップ１３０２）、順序付き集合の配列中、パラメータが指し示す位置の要素が特定され、次いで、存在数配列中、当該要素が示す位置の値がインクリメントされる（ステップ１３０３）。ステップ１３０３は、最終のパラメータに達するまで繰り返される（ステップ１３０４、１３０５参照）。ステップ１３０５にてイエス（Ｙｅｓ）と判断された段階で、存在数配列が完成する。
【００５０】
図１５および図１６は、項目「ファン」に関する存在数配列および後述する累計数配列の生成過程の例を示す図である。図１５（ａ）に示すように、初期的には、パラメータ「０」の位置のＰＶ２の要素「０」が特定され、存在数配列中、当該ＰＶ２の要素が示す位置の値が「０」から「１」にインクリメントされる。次いで、図１５（ｂ）に示すように、パラメータ「１」の位置のＰＶ２の要素「１」が特定され、存在数配列中、当該ＰＶ２の要素が示す位置の値が、「０」から「１」にインクリメントされる。さらに、図１６（ａ）に示すように、パラメータ「２」の位置のＰＶ２の要素「０」が特定され、存在数配列中、当該ＰＶ２の要素が示す位置の値が、「１」から「２」にインクリメントされる。
【００５１】
存在数配列が完成すると、存在数配列に基づき、その要素を累計化した累計数を格納した累計数配列が生成される（ステップ１３０６）。累計数配列は、ある格納位置番号より前の格納位置番号に関して、トータルで幾つ要素が存在したかを示す。図１６（ｂ）の例では、累計数配列１６１２において、格納位置番号「０」の要素は、それより小さな格納位置番号が存在しないため「０」となり、格納位置番号「１」の要素は、それより小さな格納位置番号「０」の存在数（存在崇拝列１６１１中の要素）と等しく、「２」となる。また、この累計数配列においては、さらなる要素（格納位置番号「２」の要素）として、格納位置番号「２」より小さな格納位置番号の存在数の総和「３」が配置されても良い（符号１６１２のカッコ参照）。
【００５２】
このようにして累計数配列が生成されると、累計数配列を用いて、新たに確保した出力用配列中にレコード番号を配置する。図１４に示すように、まず、順序付き集合の配列中の位置（格納位置番号）を指定するパラメータを初期化した後（ステップ１４０１）、パラメータが指し示す順序付き集合の配列中の要素が特定され、次いで、第２のポインタ配列（ＰＶ２）中、特定された要素が示す位置の要素が特定される（ステップ１４０２）。
【００５３】
次いで、累計数配列中、第２のポインタ配列（ＰＶ２）中の特定された要素が示す位置の値（累計数）が特定される（ステップ１４０３）。さらに、パラメータが示す順序付き集合の配列中の要素が、別途設けた出力用配列中、ステップ１４０３にて特定された累計数が示す位置に配置される（ステップ１４０４）。この後、累計数配列において、ステップ１４０３にて特定された累計数がインクリメントされる（ステップ１４０５）。
【００５４】
ステップ１４０３にて特定される累計数は、当該累計数を特定するもととなった順序付き集合の配列中の要素、つまり、レコード番号を、出力用配列に格納すべき位置を示す。したがって、あるレコード番号を配置した後、次に同じ累計数が特定され、出力用配列にレコード番号を格納するために、ステップ１４０５において、累計数をインクリメントしておく。また、順序付き集合の配列中の要素が格納されるため、出力用配列は、順序付き集合の配列と同じサイズとなる。
【００５５】
このような処理を、最終パラメータに達するまで繰り返す（ステップ１４０６、１４０７参照）。このようにして得られた出力用配列において、キーとなった項目に関して、ソートされたレコード番号が示される。
【００５６】
図１７ないし図１９は、項目「ファン」をキーとしたソート処理の過程における配列の状態を示す図である。図１７においては、初期的に、パラメータ「０」が示す順序付き集合の配列の要素（レコード番号）「０」が特定されている。したがって、ＰＶ２を介して、ＰＶ２中の関連する要素が示す位置の累計数配列の値（累計数）「０」が特定される。したがって、出力用配列中、累計数が示す格納位置番号「０」の位置に、順序付き集合配列の要素「０」が格納され、その後、累計数が「０」から「１」にインクリメントされる。
【００５７】
図１８においても、同様に、パラメータ「１」が指し示す順序付き集合の配列の値「２」が、出力用配列中、ＰＶ２を経て得られた累計数配列中の累計数「２」に対応する位置に格納され、その後、累計数配列中の累計数が「２」から「３」にインクリメントされる。さらに、図１９においても同様に、パラメータ「２」が指し示す順序付き集合の配列の値「９」が、出力配列中、ＰＶ２を経て得られた累計数配列中の累計数「１」に対応する位置に格納され、その後、累計数配列中の累計数が「１」から「２」にインクリメントされる。
このように、本実施の形態によれば、ソートの処理においても、処理に際して利用される累計数配列を、第２の値リストと同じサイズにすることができ、これにより、処理時間の短縮を図ることができる。
【００５８】
次に、スコープを用いたジョイン処理につき説明を加える。ジョイン処理とは複数のテーブルから、所定の項目をキーとして、当該複数のテーブルを共通化して結合することをいう。たとえば、図２０（ａ）に示す野球愛好会会員の元のテーブル（元テーブル）２００１から、項目「地域」の値が「Ｔｏｋｙｏ」であるようなレコードを抽出したテーブル（野球愛好会会員テーブル）２０１１を作成し、かつ、図２０（ｂ）に示すように、野球の試合予定の元テーブル２０１１から、項目「野球場」の値が「Ｔｏｋｙｏ」であるようなレコードを抽出したテーブル（試合予定テーブル）２０１２を作成した場合を考える。ジョインの処理では、野球愛好会会員テーブル２０１１中の項目「地域」および試合予定テーブル２０１２の項目「野球場」をキーとして、図２１に示すような、キー項目が結合されたテーブルが生成される。ここに、ソート順が反映される（維持される）テーブル２１０１をマスタ側のテーブル、他方のテーブル２１１１をスレーブ側のテーブルと称する。
【００５９】
ジョイン処理に際して、マスタ側およびスレーブ側とも、キーとなる項目にて所定の値を有するレコードを抽出し、テーブルを生成する。したがって、レコードを抽出した際に、本来の値リストの要素数（サイズ）が順序付き集合の配列中の要素数（サイズ）より十分に小さい場合に、スコープを用いたジョイン処理が実行されることになる。
【００６０】
本実施の形態によれば、たとえば、試合予定元テーブルは、図２２に示すような構造を備えている。すなわち、「球団」、「試合日」および「野球場」というそれぞれの項目に関して、値リストへのポインタ配列（ＰＶ）および値リスト（ＶＬ）を含む情報ブロックが設けられている。また、上述したように項目「野球場」の値が「Ｔｏｋｙｏ」であるようなレコードは、レコード番号が「０」、「４」、「９」および「１０」を有している。したがって、上記レコード番号を昇順にて並べた配列が、順序付き集合の配列となる。
【００６１】
図２３は、項目「球団」の情報ブロックに関する事前処理（図５参照）の過程を説明する図である。図５のステップ５０１〜５０５の処理により、項目値番号配列が生成され、さらに、コンパイル処理（図５のステップ５０７および図７参照）により、第２の値リスト（ＶＬ２）および第２のポインタ配列（ＰＶ２）が生成される。
【００６２】
図２４は、第２の値リストおよび第２のポインタ配列を利用したジョイン処理、つまり、スコープを利用したジョイン処理を示すフローチャートである。ジョイン処理においては、まず、キーとなる項目の値リストが共通化される（ステップ２４０１）。図２５は、値リスト共通化の処理をより詳細に示すフローチャートである。値リスト共有化処理においては、まず、マスタ側の値リスト中の値とスレーブ側の値リスト中の値とが比較され、何れの値が小さいか（たとえば、アルファベットでは、何れが前方に位置するか）が判断される（ステップ２５０１）。
【００６３】
図２６は、マスタ側のテーブルを構成する項目「ファン」の情報ブロックおよびスレーブ側のテーブルを構成する項目「球団」の情報ブロックのコンパイル後の初期状態を示す図である。図２６に示すように、それぞれの情報ブロックについて、共有後の値リスト（ＮｅｗＶＬ）の値を指し示すための新たな第２の値リスト（新ＶＬ２）が設けられ、かつ、第２の値リスト中、処理対象となる要素の位置（つまり、値を配置すべき位置）を示すポインタ（ＰＵＴポインタ）が配置される。このポインタが指し示す位置を、「ＰＵＴ位置」と称する。同様に、共有後の値リスト中に値を配置すべき位置を示すポインタ（ＰＵＴポインタ）も用意される。
【００６４】
初期的には、マスタ側の第２の値リスト（ＶＬ２）の先頭の要素「２」が指し示すマスタ側値リスト（ＶＬ）の値「Ｇ−ｔｅａｍ」と、スレーブ側の第２の値リスト（ＶＬ２）の先頭の要素「２」が指し示すスレーブ側値リスト（ＶＬ）の値「Ｄ−ｔｅａｍ」とが比較され、アルファベット順で「Ｄ−ｔｅａｍ＜Ｇ−ｔｅａｍ」であると判断される（図２７参照）。
【００６５】
次いで、比較結果小さいと判断された値（図２７においては、「Ｄ−ｔｅａｍ」）が、共有後の値リスト（ｎｅｗＶＬ）中、「ＰＵＴポインタ」が指し示す位置（ＰＵＴ位置）に格納される（ステップ２５０２）。次いで、ステップ２５０２にて共有後の値リストに格納された値を有していた新たな第２の値リスト（図２７においては、スレーブ側の「新ＶＬ２」）の、「ＰＵＴポインタ」が指し示す位置（ＰＵＴ位置）に、共有後の値リスト（ｎｅｗＶＬ）の「ＰＵＴ位置」（図２７においては、「０」）が格納される（ステップ２５０３）。これにより、「ＰＵＴ位置」が格納された新たな第２の値リスト（新ＶＬ２）が、共有後の値リスト（ｎｅｗＶＬ）の対応する要素を指し示すことになる。
次いで、「ＰＵＴ位置」が格納された第２の値リスト（図２７では、スレーブ側ＶＬ２）および共有後の値リスト（ｎｅｗＶＬ）の「ＰＵＴ位置」がインクリメントされる（ステップ２５０４）。
【００６６】
このような処理を、マスタ側の第２の値リスト（ＶＬ２）およびスレーブ側の第２の値リスト（ＶＬ２）の末尾まで繰り返す（ステップ２５０５およびステップ２５０６参照）。図２７の例に引き続き、図２８に示すように、マスタ側の第２の値リスト（ＶＬ２）の先頭の要素「２」が指し示す値リスト「ＶＬ」の要素「Ｇ−ｔｅａｍ」が取り出され、その一方、スレーブ側の第２の値リスト（ＶＬ２）の２番目の要素「３」が指し示す値リスト「ＶＬ」の要素「Ｇ−ｔｅａｍ」が取り出される。両者を比較すると「Ｇ−ｔｅａｍ＝Ｇ−ｔｅａｍ」であるため、「Ｇ−ｔｅａｍ」を、共有後の値リスト（ｎｅｗＶＬ）の「ＰＵＴ位置」に格納するとともに、マスタ側、スレーブ側双方の新たな第２の値リスト（新ＶＬ２）の「ＰＵＴ位置」に、共有後の値リスト（ｎｅｗＶＬ）の「ＰＵＴ位置」を格納する。その後、それぞれの配列（新ＶＬ２、ｎｅｗＶＬ）の「ＰＵＴ位置」がインクリメントされる。
【００６７】
これに引き続いて、図２９に示すように、マスタ側の第２の値リスト（ＶＬ２）の２番目の要素「３」が指し示す値リスト「ＶＬ」の要素「Ｔ−ｔｅａｍ」が取り出され、その一方、スレーブ側の第２の値リスト（ＶＬ２）の３番目の要素「５」が指し示す値リスト「ＶＬ」の要素「Ｔ−ｔｅａｍ」が取り出され、両者が比較される。ここでは、「Ｔ−ｔｅａｍ＝Ｔ−ｔｅａｍ」であるため、「Ｔ−ｔｅａｍ」を、共有後の値リスト（ｎｅｗＶＬ）の「ＰＵＴ位置」に格納するとともに、マスタ側、スレーブ側双方の新たな第２の値リスト（新ＶＬ２）の「ＰＵＴ位置」に、共有後の値リスト（ｎｅｗＶＬ）の「ＰＵＴ位置」を格納する。その後、それぞれの配列（新ＶＬ２、ｎｅｗＶＬ）の「ＰＵＴ位置」がインクリメントされる。このようにして、マスタ側およびスレーブ側の新たな第２の値リスト（新ＶＬ２）および共有後の値リスト（ＮｅｗＶＬ）が完成する。
【００６８】
なお、実際には、新たな第２の値リスト（新ＶＬ２）の領域を別途作成せず、処理の過程において、第２の値リストＶＬ２を上書きしても良い。また、説明の便宜のため、共有後の値リスト（ｎｅｗＶＬ）の領域を確保して値を配置しているが、これは必須ではなく、上記共有後の値リストのサイズのみを把握し、メモリ等に記憶しておけば足りる。
【００６９】
値リストの共有化が終了すると、スレーブ側の存在数配列、マスタ側の累計数配列、および、スレーブ側の累計数配列が順次生成される（ステップ２４０３）。この処理について、図３１ないし図３４を利用して、より詳細に説明する。まず、スレーブ側の第２のポインタ配列（ＰＶ２）から取り出された要素が指し示す、第２の値リスト（新ＶＬ２）中の値が特定される。次いで、存在数配列中、当該第２の値リスト（新ＶＬ２）の値が指し示す位置の値がインクリメントされる。
【００７０】
図３１（ａ）においては、「ＰＶ２」の先頭の要素「２」が指し示す「新ＶＬ２」の値「２」が特定され、次いで、存在数配列中、格納位置番号が「２」の値が「０」から「１」にインクリメントされる。同様に、「ＰＶ２」の２番目の要素「１」に関して、存在数配列中、格納位置番号が「１」の値が「０」から「１」にインクリメントされ（図３１（ｂ）参照）、「ＰＶ２」の３番目の要素「０」に関して、存在数配列中、格納位置番号が「０」の値が「０」から「１」にインクリメントされ（図３２（ａ）参照）、かつ、「ＰＶ２」の４番目の要素「１」に関して、存在数配列中、格納位置番号が「１」の値が「１」から「２」にインクリメントされる（図３２（ｂ）参照）。このようにして、スレーブ側の存在数配列の最終形を得ることができる（符号３２１１参照）。
【００７１】
次いで、上記スレーブ側の存在数配列を利用して、マスタ側の存在数配列、および、当該存在数配列中の要素（存在数）を累計数化した累計数配列が生成される。このマスタ側の存在数配列の要素（存在数）は、マスタ側の第２のポインタ配列にて特定される、値リスト中の値が、スレーブ配列では幾つ存在したかを示す。
【００７２】
図３３に示すように、マスタ側の第２のポインタ配列（ＰＶ２）の先頭の要素「０」により特定される新たな第２の値リスト（新ＶＬ２）の値は「１」である。これを用いて、スレーブ側の存在数配列を参照すると、上記値「１」が指し示す位置の要素は「２」となる。したがって、存在数配列の先頭の要素として「２」が配置される。また、マスタ側の第２のポインタ配列（ＰＶ２）の２番目の要素「１」により特定される新たな第２の値リスト（新ＶＬ２）の値は「２」である。これを用いて、スレーブ側の存在数配列を参照すると、上記値「２」が指し示す市の要素は「１」となる。したがって、存在数配列の２番目の要素として「１」が配置される。同様に、マスタ側の第２のポインタ配列（ＰＶ２）の３番目の要素「０」により特定される新たな第２の値リスト（新ＶＬ２）の値は「１」である。これを用いて、スレーブ側の存在数配列を参照すると、上記値「１」が指し示す位置の要素は「２」となる。したがって、存在数配列の３番目の要素として「２」が配置される。
【００７３】
次いで、上記マスタ側の存在数配列に基づき、累計数配列が生成される。このマスタ側の累計数配列を、場合によって、「射影配列▲１▼」とも称する。４番目の位置に配された値「５」は、ジョインされたテーブルにおける全レコード数を示す。また、図３４に示すように、スレーブ側の存在数配列に基づき、累計数配列が生成される。スレーブ側の累計数配列を、場合によって「射影配列▲３▼」とも称する。さらに、マスタ側の順序付き集合を、場合によって、「射影配列▲２▼」とも称する。
【００７４】
このように、種々の存在数配列および累計数配列が生成された後、スレーブ側のレコード番号を配置した順序付き集合がソートされる（ステップ２４０３）。図３５および図３６を参照して、より具体的に順序付き集合のソートを説明する。スレーブ側の順序付き集合（つまり、スレーブ側のレコード番号の集合）から要素（つまりレコード番号）が取り出され、引き続いて、当該要素（図３５（ａ）においては「０」）が指し示す第２のポインタ配列（ＰＶ２）の要素（図３５（ａ）においては「２」）が特定される。さらに、ＰＶ２の要素が指し示す新たな第２の値リスト（新ＶＬ２）の値（図３５（ａ）においては「２」）が特定される。次いで、累計数配列中、当該新ＶＬ２の値が示す位置の値（累計数）（図３５（ａ）においては「３」）が取り出され、ソート後の順序付き集合配列中、前記累計数が示す位置に、順序付き集合の要素（レコード番号）が配置される。その後、前記累計数が（たとえば、図３５（ａ）においては、「３」から「４」に）インクリメントされる。
【００７５】
図３５（ｂ）に示すように、順序付き集合配列の２番目の要素「４」についても、同様に、第２のポインタ配列（ＰＶ２）、新たな第２の値リスト（新ＶＬ２）を経て、累計数配列において、２番目（格納位置番号「１」）の要素（累計数）「１」が特定される。したがって、ソート後の順序付き集合配列において、累計数「１」が示す位置に、もとの順序付き集合配列の要素「４」が配置される。その後、累計数が「１」から「２」にインクリメントされる。
【００７６】
同様に、図３６（ａ）に示すように、順序付き集合配列の３番目の要素「９」について、第２のポインタ配列（ＰＶ２）、新たな第２の値リスト（新ＶＬ２）を経て、累計数配列において、１番目（格納位置番号「０」）の要素（累計数）「０」が特定される。したがって、ソート後の順序付き集合配列において、累計数「０」が示す位置に、もとの順序付き集合配列の要素「９」が配置され、その後、累計数が、「０」から「１」にインクリメントされる。さらに、図３６（ｂ）に示すように、順序付き集合配列の４番目の要素「１０」について、第２のポインタ配列（ＰＶ２）、新たな第２の値リスト（新ＶＬ２）を経て、累計数配列において、２番目（格納位置番号「１」）の要素（累計数）「２」が特定される。したがって、ソート後の順序付き集合配列において、累計数「２」が示す位置に、もとの順序付き集合配列の要素「１０」が配置され、その後、累計数が、「２」から「３」にインクリメントされる。このようにして、スレーブ側のレコード番号のソートが完了する。
【００７７】
次いで、ジョインされたテーブルのレコード番号に対応する、マスタ側のテーブルおよびスレーブ側のテーブルのレコード番号が算出される。ジョインされたテーブルのレコード番号の総数（レコード数）は、マスタ側の累計数配列（射影配列▲１▼）の累計数の末尾に配された値に一致する。したがって、図３１ないし図３６等を参照して説明した例では、レコード数は「５」となる。
【００７８】
図３７および図３８は、ジョインされたテーブルのレコード番号から、対応するマスタ側およびスレーブ側のレコード番号をそれぞれ算出する処理（レコード番号算出処理）を示すフローチャートである。また、図３９は、図３３ないし図３６に示す例について、図３７および図３８に示す処理を施した得られたマスタ側のレコード番号配列およびスレーブ側のレコード番号配列を示す図である。
以下、図３３ないし図３６にて得られた射影配列を利用して、図３９に示すレコード番号の配列を取得する場合を例に、レコード番号算出処理を詳細に説明する。
【００７９】
まず、ジョインされたテーブルのレコード番号が取り出される（ステップ３７０１）。このレコード番号を、レコード番号算出処理において「値Ａ」と称する。初期的には、図４０に示すように、ジョインテーブルのレコード番号配列から、先頭の要素「０」が取り出される。
次いで、マスタ側累計数配列（射影配列▲１▼）中、ステップ３７０１で取り出された要素（レコード番号）以下の最大値およびその格納位置が特定される（ステップ３７０２）。この最大値を、レコード番号算出処理では、「値Ｂ」と称する。図４０の例では、射影配列▲１▼において、レコード番号「０」以下の最大値は「０」であるため、「値Ｂ」が「０」であり、また、その格納位置が「０」と特定される。
【００８０】
その後、マスタ側の順序付き集合配列（射影配列▲２▼）中、上記格納位置の要素（マスタ側のレコード番号）が特定され、この要素（レコード番号）が、マスタ側レコード番号配列中、ジョインテーブル中の格納位置に対応する位置に配置される（ステップ３７０３）。図４０の例では、射影配列▲２▼において、格納位置が「０」つまり先頭の値「０」が取り出され、これが、図３９に示すマスタ側レコード番号配列の先頭の要素として格納される（符号３９０１参照）。このようにして、ジョインテーブルのレコード番号に対応するマスタ側のレコード番号が算出される。
【００８１】
次いで、「値Ａ」と「値Ｂ」の差分がとられる（ステップ３７０４）。レコード番号算出処理において、この差分値を「値Ｃ」と称する。図４０の例においては、「値Ｃ＝０」となる（符合４０１０参照）。
【００８２】
また、マスタ側第２の値リスト（ＰＶ２）中、ステップ３７０２で特定された格納位置の要素が特定され（ステップ３７０５）、さらに、ＶＬ２の要素が指し示す位置の新たな第２の値リスト（新ＶＬ２）中の値が特定される（ステップ３７０６）。図４０の例においては、ＰＶ２中、格納位置「０」の要素「０」が特定され、次いで、新ＶＬ２中、格納位置が「０」の値「１」が取り出される。
さらに、スレーブ側累計数配列（射影配列▲３▼）中、新たな第２の値リスト（新ＶＬ２）の値が指し示す位置の要素が特定される（ステップ３８０１）。この要素を、レコード番号算出処理において「値Ｄ」と称する。図４０の例では、射影配列▲３▼において、新ＶＬ２の値「１」が示す位置の要素（累計数）「１」が、値Ｄとして特定される。
【００８３】
この後、「値Ｃ」と「値Ｄ」とが加算される（ステップ３８０２）。レコード場番号算出処理において、上記加算値を「値Ｅ」と称する。図４０の例では、「値Ｅ＝０＋１＝１」となる。
次いで、スレーブ側順序付き集合配列（射影配列▲４▼）中、「値Ｅ」が示す位置の要素（スレーブ側のレコード番号）が特定され、この要素（レコード番号）が、スレーブ側のレコード番号配列中、ジョインテーブル中の格納位置に対応する位置に配置される（ステップ３８０３）。図４０の例では、射影配列▲４▼の「１」に対応する位置の値「４」が取り出され、これが、図３９に示すスレーブ側レコード番号配列の先頭の要素として格納される（ステップ３９１１参照）。
【００８４】
ステップ３７０１〜ステップ３８０３の処理を、順次、ジョインテーブルのレコード番号のそれぞれについて施すことにより（ステップ３８０４、３８０５参照）、ジョインテーブルの各レコード番号に対応する、マスタ側およびスレーブ側のレコード番号が算出され、それぞれのレコード番号が、レコード番号配列の、対応する位置に配置される。
図４１ないし図４４は、それぞれ、ジョインテーブルのレコード番号配列中、２番目（格納位置番号「１」）ないし５番目（格納位置番号「４」）のレコード番号から、マスタ側およびスレーブ側のレコード番号を算出する過程を説明する図である。
【００８５】
図４１において、ジョインテーブルのレコード番号配列の要素（レコード番号）は「１」であり、射影配列▲１▼において、「１」以下の最大値「０」およびその格納位置「０」が特定される（ステップ３７０１、３７０２）。射影配列▲２▼中、上記格納位置「０」に示される位置の要素「０」が、マスタ側のレコード番号となり、マスタ側レコード番号配列中の対応する位置に格納される（ステップ３７０３および符号３９０２参照）。また、「値Ｃ＝１−０＝１」が算出される（ステップ３７０４）。
【００８６】
その一方、マスタ側ＰＶ２中、格納位置「０」の要素「０」、新ＶＬ２中、ＰＶ２の要素「０」が指し示す位置の値「１」が特定され、さらに、射影配列▲３▼中、新ＶＬ２の値「１」にて示される要素（累計数）「１」が特定される（ステップ３７０５、３７０６および３８０１）。次いで、「値Ｅ＝１＋１＝２」が算出され（ステップ３８０２）、射影配列▲２▼中、格納位置「２」にある要素（レコード番号）「１０」が取り出され、スレーブ側レコード番号配列中の対応する位置に格納される（ステップ３８０３および符号３９１２参照）。
【００８７】
図４２において、ジョインテーブルのレコード番号配列の要素（レコード番号）は「２」であり、射影配列▲１▼において、「２」以下の最大値「２」およびその格納位置「１」が特定される（ステップ３７０１、３７０２）。射影配列▲２▼中、上記格納位置「１」に示される位置の要素「２」が、マスタ側のレコード番号となり、マスタ側レコード番号配列中の対応する位置に格納される（ステップ３７０３および符号３９０３参照）。また、「値Ｃ＝２−２＝０」が算出される（ステップ３７０４）。
【００８８】
その一方、マスタ側ＰＶ２中、格納位置「１」の要素「１」、新ＶＬ２中、ＰＶ２の要素「１」が指し示す位置の値「２」が特定され、さらに、射影配列▲３▼中、新ＶＬ２の値「２」にて示される要素（累計数）「３」が特定される（ステップ３７０５、３７０６および３８０１）。次いで、「値Ｅ＝０＋３＝３」が算出され（ステップ３８０２）、射影配列▲２▼中、格納位置「３」にある要素（レコード番号）「０」が取り出され、スレーブ側レコード番号配列中の対応する位置に格納される（ステップ３８０３および符号３９１３参照）。
【００８９】
同様に、図４３において、ジョインテーブルのレコード番号配列の要素（レコード番号）は「３」であり、射影配列▲１▼において、「３」以下の最大値「３」およびその格納位置「２」が特定される（ステップ３７０１、３７０２）。射影配列▲２▼中、上記格納位置「２」に示される位置の要素「９」が、マスタ側のレコード番号となり、マスタ側レコード番号配列中の対応する位置に格納される（ステップ３７０３および符号３９０４参照）。また、「値Ｃ＝３−３＝０」が算出される（ステップ３７０４）。
【００９０】
その一方、マスタ側ＰＶ２中、格納位置「２」の要素「０」、新ＶＬ２中、ＰＶ２の要素「０」が指し示す位置の値「１」が特定され、さらに、射影配列▲３▼中、新ＶＬ２の値「１」にて示される要素（累計数）「１」が特定される（ステップ３７０５、３７０６および３８０１）。次いで、「値Ｅ＝０＋１＝１」が算出され（ステップ３８０２）、射影配列▲２▼中、格納位置「１」にある要素（レコード番号）「４」が取り出され、スレーブ側レコード番号配列中の対応する位置に格納される（ステップ３８０３および符号３９１４参照）。
【００９１】
さらに、図４４において、ジョインテーブルのレコード番号配列の要素（レコード番号）は「４」であり、射影配列▲１▼において、「４」以下の最大値「３」およびその格納位置「２」が特定される（ステップ３７０１、３７０２）。射影配列▲２▼中、上記格納位置「２」に示される位置の要素「９」が、マスタ側のレコード番号となり、マスタ側レコード番号配列中の対応する位置に格納される（ステップ３７０３および符号３９０５参照）。また、「値Ｃ＝４−３＝１」が算出される（ステップ３７０４）。
【００９２】
その一方、マスタ側ＰＶ２中、格納位置「２」の要素「０」、新ＶＬ２中、ＰＶ２の要素「０」が指し示す位置の値「１」が特定され、さらに、射影配列▲３▼中、新ＶＬ２の値「１」にて示される要素（累計数）「１」が特定される（ステップ３７０５、３７０６および３８０１）。次いで、「値Ｅ＝１＋１＝２」が算出され（ステップ３８０２）、射影配列▲２▼中、格納位置「２」にある要素（レコード番号）「１０」が取り出され、スレーブ側レコード番号配列中の対応する位置に格納される（ステップ３８０３および符号３９１５参照）。
【００９３】
図４５は、上述した処理の結果得られたマスタ側テーブルのレコード番号配列およびスレーブ側テーブルのレコード番号配列、並びに、ジョインされたビューなどを示す図である。マスタ側テーブルのレコード番号配列３９００（中のレコード番号）にしたがって、マスタ側の元のテーブル（野球愛好会会員元テーブル４５０１）からレコードを抽出することにより、元テーブルの順序が維持されたテーブル（野球愛好会会員テーブル４５２１）が得られる。その一方、スレーブ側テーブルのレコード番号配列３９１０（中のレコード番号）にしたがって、スレーブ側の元のテーブル（試合予定元テーブル４５１１９からレコードを抽出することにより、マスタ側のレコードと対応付けられたテーブル（試合予定テーブル４５３１９を得ることができる。
【００９４】
このように、本実施の形態によれば、ジョインの処理においても、それぞれの射影配列を、第２の値リストと同じにすることができる。また、共有化された値リスト（共有化された新たな値リスト）も、せいぜい、マスタ側の第２の値リストとスレーブ側の第２の値リストを加えたサイズに留まる。したがって、射影配列中の要素を特定し、或いは、第２の値リストの値を特定する際の処理時間を短縮することが可能となる。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【００９５】
たとえば、前記実施の形態において、集計処理として、存在数配列を作成し、存在数配列中の要素を取り出す場合について説明しているが、これに限定されるものではない。一般に、集計は、根源的に「０以上の複数の次元」と「０または１の測度」とに分解される。たとえば、「性別×体重別の体重の平均値」を考えると、次元は「２次元」（「性別」および「体重別」）、測度は「体重」となる。測度が「０」である場合には、要素の個数が、集計にて得られる値（集計値）となる。この場合には、存在数配列中の要素が集計値となる。そのほか、測度として、合計、最大、最小、平均などをとることができる。
【００９６】
次元としては、種々の分類が可能である。たとえば、年齢において、０〜９歳を１０歳未満として一つのカテゴリとすることができる。ここでは、値リストと同じ要素数を有する分類番号配列を備え、分類番号配列において、値リストの値（年齢）「０」〜「９」に対応する位置の要素として「０」を配置し、他の要素として「１」を配置すればよい。無論、根源的には、区別可能な一つの値ごとに、１つのカテゴリを割り振ることができる。すなわち、年齢において、分類番号配列において、たとえば昇順に、「０」、「１」、「２」、・・・という値を配置することが可能である。そして、集計においては、ある分類番号に関連するようなレコード番号の集合を取得し、当該レコード番号から特定される値に対して、所定の演算を施せばよい。これにより、合計、最大、最小など種々の集計値を得ることが可能となる。本実施の形態においても、第２の値リストと同じサイズの分類番号配列を備え、そこに、カテゴリに対応する値を割り振れば、種々の集計値を取得することが可能である。
【００９７】
また、前記実施の形態においては、第２のポインタ配列および第２の値リストを生成することで、検索、集計、ソート、ジョインなどに利用する配列のサイズを圧縮し、これにより、必要とするメモリ領域を小さくし、処理時間の短縮を図っている。しかしながら、これに限定するものではなく、第２のポインタ配列よおび第２の値リストを生成する中間段階に生成した項目値番号配列を利用しても良い。この場合には、第２のポインタ配列（ＰＶ２）の代わりに、項目値番号配列を利用し、第２の値リスト（ＶＬ２）の代わりに、もとの値リスト（ＶＬ）を利用すれば良い。つまり、上記実施の形態において、たとえば、値リスト中の項目値を特定するために、
【００９８】
順序付き集合配列中の要素、第２のポインタ配列中の要素、第２の値リスト中の要素、値リスト中の要素（項目値）の順で、要素が特定されたのに対して、上記変形例では、順序付き集合配列中の要素、項目値番号配列中の要素、値リスト中の要素（項目値）の順で、要素が特定されれば良い。
また、検索、集計、ソート、ジョインなどの処理においても、値を参照する配列として、第２のポインタ配列の代わりに項目値番号配列を利用し、かつ、第２の値リストの代わりにもとの値リストを利用すれば良い。
【００９９】
さらに、前記実施の形態においては、一般のコンピュータシステム１０内に、所定のプログラムを読み込み、当該プログラムを実行することにより、複数の表形式データのジョインおよびジョインされた表形式データに関する処理を実現しているが、本発明はこれに限定されるものではなく、パーソナルコンピュータ等のような一般のコンピュータシステムに、データベース処理専用のボードコンピュータを接続し、当該ボードコンピュータが上記処理を実行できるように構成しても良いことは言うまでもない。したがって、本明細書において、手段とは必ずしも物理的手段を意味するものではなく、各手段の機能が、ソフトウェアおよび／またはハードウェアによって実現される場合を包含する。さらに、一つの手段の機能が、二つ以上の物理的手段により実現されても、若しくは、二つ以上の手段の機能が、一つの物理的手段により実現されてもよい。
【０１００】
【発明の効果】
本発明によれば、上記配列を部分集合の大きさ、これに伴って限定される値リストの部分集合の大きさに合致させて、部分集合の大きさに相当する処理時間の短縮を実現する手法を提供することが可能となる。
【図面の簡単な説明】
【図１】図１は、表形式データの例、および、その部分集合の例を示す図である。
【図２】図２は、図１の表形式データに基づく情報ブロックの例を示す図である。
【図３】図３は、本発明の実施の形態にかかる処理を実現するためのプログラムを実行するコンピュータシステムのハードウェア構成を示す図である。
【図４】図４は、本実施の形態において、コンピュータシステムにて実行される処理の概略を示すフローチャートである。
【図５】図５は、本実施の形態にかかる事前処理をより詳細に示すフローチャートである。
【図６】図６は、本実施の形態にかかる項目値番号配列の生成を説明するための図である。
【図７】図７は、本実施の形態にかかるコンパイル処理の例を示すフローチャートである。
【図８】図８は、本実施の形態にかかるコンパイル処理を説明するための図である。
【図９】図９は、本実施の形態にかかる検索処理を示すフローチャートである。
【図１０】図１０は、本実施の形態にかかる検索処理を説明するための図である。
【図１１】図１１は、本実施の形態にかかる検索処理を説明するための図である。
【図１２】図１２は、本実施の形態にかかる検索処理を説明するための図である。
【図１３】図１３は、本実施の形態にかかるソート処理を示すフローチャートである。
【図１４】図１４は、本実施の形態にかかるソート処理を示すフローチャートである。
【図１５】図１５は、本実施の形態にかかるソート処理を説明するための図である。
【図１６】図１６は、本実施の形態にかかるソート処理を説明するための図である。
【図１７】図１７は、本実施の形態にかかるソート処理を説明するための図である。
【図１８】図１８は、本実施の形態にかかるソート処理を説明するための図である。
【図１９】図１９は、本実施の形態にかかるソート処理を説明するための図である。
【図２０】図２０は、本実施の形態にかかるジョインの概略を説明するための図である。
【図２１】図２１は、本実施の形態においてジョインされた表（ビュー）の例を示す図である。
【図２２】図２２は、本実施の形態において、ジョインされる表形式データに基づく情報ブロックを示す図である。
【図２３】図２３は、本実施の形態にかかるジョイン処理を説明するための図である。
【図２４】図２４は、本実施の形態にかかるジョイン処理の概略を説明するフローチャートである。
【図２５】図２５は、本実施の形態にかかる値リスト共有化処理を示すフローチャートである。
【図２６】図２６は、本実施の形態にかかるジョイン処理を説明するための図である。
【図２７】図２７は、本実施の形態にかかるジョイン処理を説明するための図である。
【図２８】図２８は、本実施の形態にかかるジョイン処理を説明するための図である。
【図２９】図２９は、本実施の形態にかかるジョイン処理を説明するための図である。
【図３０】図３０は、本実施の形態にかかるジョイン処理を説明するための図である。
【図３１】図３１は、本実施の形態にかかるジョイン処理を説明するための図である。
【図３２】図３２は、本実施の形態にかかるジョイン処理を説明するための図である。
【図３３】図３３は、本実施の形態にかかるジョイン処理を説明するための図である。
【図３４】図３４は、本実施の形態にかかるジョイン処理を説明するための図である。
【図３５】図３５は、本実施の形態にかかるジョイン処理を説明するための図である。
【図３６】図３６は、本実施の形態にかかるジョイン処理を説明するための図である。
【図３７】図３７は、本実施の形態にかかるジョイン処理のうち、レコード番号算出処理を示すフローチャートである。
【図３８】図３８は、本実施の形態にかかるレコード算出処理を説明するための図である。
【図３９】図３９は、本実施の形態にかかるレコード算出処理を説明するための図である。
【図４０】図４０は、本実施の形態にかかるレコード算出処理を説明するための図である。
【図４１】図４１は、本実施の形態にかかるレコード算出処理を説明するための図である。
【図４２】図４２は、本実施の形態にかかるレコード算出処理を説明するための図である。
【図４３】図４３は、本実施の形態にかかるレコード算出処理を説明するための図である。
【図４４】図４４は、本実施の形態にかかるレコード算出処理を説明するための図である。
【図４５】図４５は、本実施の形態にかかるジョイン処理により最終的に得られる表（ビュー）を示す図である。
【符号の説明】
１０　　　　コンピュータシステム
１２　　　　ＣＰＵ
１４　　　　ＲＡＭ
１６　　　　ＲＯＭ
１８　　　　固定記憶装置
２０　　　　ＣＤ−ＲＯＭドライバ
２２　　　　Ｉ／Ｆ
２４　　　　入力装置
２６　　　　表示装置
【図１】
2004145692.tif 000003
【図２】
2004145692.tif 000004
【図３】
2004145692.tif 000005
【図４】
2004145692.tif 000006
【図５】
2004145692.tif 000007
【図６】
2004145692.tif 000008
【図７】
2004145692.tif 000009
【図８】
2004145692.tif 000010
【図９】
2004145692.tif 000011
【図１０】
2004145692.tif 000012
【図１１】
2004145692.tif 000013
【図１２】
2004145692.tif 000014
【図１３】
2004145692.tif 000015
【図１４】
2004145692.tif 000016
【図１５】
2004145692.tif 000017
【図１６】
2004145692.tif 000018
【図１７】
2004145692.tif 000019
【図１８】
2004145692.tif 000020
【図１９】
2004145692.tif 000021
【図２０】
2004145692.tif 000022
【図２１】
2004145692.tif 000023
【図２２】
2004145692.tif 000024
【図２３】
2004145692.tif 000025
【図２４】
2004145692.tif 000026
【図２５】
2004145692.tif 000027
【図２６】
2004145692.tif 000028
【図２７】
2004145692.tif 000029
【図２８】
2004145692.tif 000030
【図２９】
2004145692.tif 000031
【図３０】
2004145692.tif 000032
【図３１】
2004145692.tif 000033
【図３２】
2004145692.tif 000034
【図３３】
2004145692.tif 000035
【図３４】
2004145692.tif 000036
【図３５】
2004145692.tif 000037
【図３６】
2004145692.tif 000038
【図３７】
2004145692.tif 000039
【図３８】
2004145692.tif 000040
【図３９】
2004145692.tif 000041
【図４０】
2004145692.tif 000042
【図４１】
2004145692.tif 000043
【図４２】
2004145692.tif 000044
【図４３】
2004145692.tif 000045
【図４４】
2004145692.tif 000046
【図４５】
2004145692.tif 000047