(57)【特許請求の範囲】
【請求項１】
複数の項目において、各項目に関連する項目値を含むレコードの配列として表される表形式データから、特定の項目及び特定のレコードに対応した項目値を得る方法であって、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納されている値管理テーブルと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値番号指定情報配列とを記憶装置に保持し、
上記項目値番号指定情報配列から上記特定のレコードに対応した項目値番号を取得し、
上記値管理テーブルに格納された項目値の中から、上記取得された項目値番号に対応した項目値を得ることを特徴とする方法。
【請求項２】
上記項目値番号に対応した項目値を分類するために、分類番号が上記項目値番号に対応して上記値管理テーブルに格納され、
上記項目値番号に対応した項目値を得る際に上記分類番号が参照されることを特徴とする請求の範囲第１項に記載の方法。
【請求項３】
複数の項目において、各項目に関連する項目値を含むレコードの配列として表される表形式データから特定の検索条件に適合する項目値を含むレコードを検索する方法であって、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目に共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納されている値管理テーブルと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値番号指定情報配列とを記憶装置に保持し、
特定の項目および当該項目において検索すべき項目値を含む検索条件を設定し、
前記検索条件と関連する項目に関して、前記レコードの順番に、対応する項目値番号指定情報配列中の項目値番号を調べ、
前記項目値番号にて指定される前記値管理テーブル中の項目値が、前記設定された検索条件に適合するかを判断し、
前記検索条件に適合するレコードを、結果集合として蓄積することを特徴とする方法。
【請求項４】
上記検索条件に適合するレコードの結果集合を記憶装置に保持し、
他の検索条件に関連した項目に関して、
上記他の項目に関する項目値番号指定情報配列から、上記結果集合で指定された上記検索条件に適合したレコードに対応した項目値番号を取り出し、
上記他の項目に関して、上記取り出された項目値番号により特定される項目値が上記他の検索条件と適合するか否かを判定し、
上記他の項目に関して、上記項目値番号により特定される項目値が上記他の検索条件と適合する場合に、上記項目値番号に対応した上記レコードを、上記別の検索条件に適合するレコードとして取り出し、
必要な場合に、さらに他の検索条件に関連するさらに他の項目に関して、上記項目値番号の取り出し、適合判定およびレコードの取り出しを繰り返すことを特徴とする請求の範囲第３項に記載の方法。
【請求項５】
上記検索条件に適合するレコードの結果集合を記憶装置に保持し、
他の検索条件と関連した項目に関して、
他の管理地テーブルに格納された項目値の中で、上記検索条件に適合する項目値と関連した項目値に対応するレコード識別情報指定情報を用いて、レコード識別情報配列から、上記他の検索条件に適合するレコードを取り出し、検索条件に適合するレコードを指定する他の結果集合を記憶し、
必要な場合に、さらに他の検索条件に関して、さらに他のレコード識別情報指定情報を用いた、さらに他の検索条件に適合するレコードの取り出し、および、さらに他の結果集合の記憶を繰り返して、
得られた結果集合から重複したレコードを除去した最終的な結果集合を得ることを特徴とする請求の範囲第３項に記載の方法。
【請求項６】
上記値管理テーブルが、上記項目値番号ごとに、上記固有の領域の始点を示す開始位置と、相等しい項目値番号を備えたレコード数を示す存在数とを含み、
上記開始位置および存在数を参照して、所定のレコード識別情報配列を特定することを特徴とする請求の範囲第３項ないし第５項の何れか一項に記載の方法。
【請求項７】
上記値管理テーブルに、上記項目値番号に対応した項目値を分類するための分類番号が、上記項目値番号に対応して格納され、
上記分類番号を用いて、検索条件に適合する項目値を特定することを特徴とする請求の範囲第３項ないし第６項の何れか一項に記載の方法。
【請求項８】
複数の項目において、各項目に関連する項目値を含むレコードの配列として表される表形式データを集計する方法であって、
ｎが１以上の整数を表す場合に、集計に利用されるｎ個の項目の各々において、前記項目値を一意的に特定する項目値番号であって、各項目に共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納されている値管理テーブルと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値番号指定情報配列とからなる個別項目情報を記憶装置に保持し、
ｉが１≦ｉ≦ｎなる整数を表すとき、ｉ番目の個別情報項目について、上記項目値番号の総数がＮｉで表され、ｋｉが０≦ｋｉ≦Ｎｉ−１なる整数を表し、Ｍが１以上の整数を表し、ｍが１≦ｍ≦Ｍなる整数であるとき、Ｎ１×Ｎ２×．．．×Ｎｉ×．．．×Ｎｎのサイズを持つｎ次元のＭ個のデータ空間の各要素Ｐｍ（ｋ１，ｋ２，．．．，ｋｉ，．．．，ｋｎ）を初期化し、
上記ｎ個の個別情報項目について、ｊが０≦ｊ≦（レコードの総数−１）なる整数を表すとき、各項目値番号指定情報配列のｊ番目に格納された夫々の項目値番号を取り出し、ｉ番目の個別情報項目から取り出された項目値番号がｑｉで表されるとき、上記データ空間の要素Ｐｍ（ｑ１，ｑ２，．．．，ｑｉ，．．．，ｑｎ）を特定し、
上記特定された要素Ｐｍ（ｑ１，ｑ２，．．．，ｑｉ，．．．，ｑｎ）の値を処理するステップを含むことを特徴とする方法。
【請求項９】
複数の項目において、各項目に関連する項目値を含むレコードの配列として表される表形式データを集計する方法であって、
ｎが１以上の整数を表し、集計に利用されるｎ個の項目の各々において、前記項目値を一意的に特定する項目値番号であって、各項目に共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値及び上記項目値の分類番号が格納されている値管理テーブルと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値番号指定情報配列とからなる個別項目情報を記憶装置に保持し、
ｉが１≦ｉ≦ｎなる整数を表すとき、ｉ番目の個別情報項目について、上記項目値番号又は上記分類番号の何れか一方の番号の総数がＮｉで表され、ｋｉが０≦ｋｉ≦Ｎｉ−１なる整数を表し、Ｍが１以上の整数を表し、ｍが１≦ｍ≦Ｍなる整数であるとき、Ｎ１×Ｎ２×．．．×Ｎｉ×．．．×Ｎｎのサイズを持つｎ次元のＭ個のデータ空間の各要素Ｐｍ（ｋ１，ｋ２，．．．，ｋｉ，．．．，ｋｎ）を初期化し、
上記ｎ個の個別情報項目について、ｊが０≦ｊ≦（レコード総数−１）なる整数を表すとき、各項目値番号指定情報配列のｊ番目に格納された夫々の項目値番号を取り出し、ｉ番目の個別情報項目から取り出された項目値番号又は上記ｉ番目の個別情報項目の値管理テーブルに該項目値番号と対応して格納された分類番号がｑｉで表されるとき、上記データ空間の要素Ｐｍ（ｑ１，ｑ２，．．．，ｑｉ，．．．，ｑｎ）を特定し、
上記特定された要素Ｐｍ（ｑ１，ｑ２，．．．，ｑｉ，．．．，ｑｎ）の値を処理するステップを含むことを特徴とする方法。
【請求項１０】
Ｍ＝１であり、かつ、上記特定された要素Ｐｍの値を処理するステップが、上記要素Ｐｍの現在の値に１を加えることを特徴とする請求の範囲第８項または第９項に記載の方法。
【請求項１１】
上記特定された要素Ｐｍの値を処理するステップが、
Ｍ個の要素Ｐｍの中の少なくとも１個の要素Ｐｍに対して、
記憶装置に保持された別の個別項目情報について項目値番号指定情報配列のｊ番目に格納された項目値番号を取得し、
上記別の個別項目情報の値管理テーブルに格納された項目値の中から、上記取得された項目値番号に対応した項目値を取得し、
上記要素Ｐｍの現在の値と上記取得された項目値を組み合わせて上記要素Ｐｍの値を更新することを特徴とする請求の範囲第８項または第９項に記載の方法。
【請求項１２】
上記項目値番号を指定する情報が、項目値番号自体であることを特徴とする請求の範囲第１項ないし第１１項の何れか一項に記載の方法。
【請求項１３】
上記項目値番号を指定する情報が、各項目値番号毎に１ビット以上が割り当てられ、指定の有無が設定される２進値であることを特徴とする請求の範囲第１項ないし第１１項の何れか一項に記載の方法。
【請求項１４】
複数の項目において、各項目に関連する項目値を含むレコードの配列として表される表形式データを検索・集計する装置であって、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目に共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納されている値管理テーブルと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値番号指定情報配列とを保持する記憶装置と、
上記記憶装置に保持された上記項目値番号指定情報配列から上記特定のレコードに対応した項目値番号を取得する項目値番号取得手段と、
上記記憶装置に保持された上記値管理テーブルに格納された項目値の中から、上記取得された項目値番号に対応した項目値を得る項目値取得手段とを有することを特徴とする装置。
【請求項１５】
上記記憶装置が、上記値管理テーブルと、上記項目値番号指定情報配列と、相等しい項目値番号に関連する一以上のレコード識別情報を、上記項目値番号ごとに固有の領域に格納したレコード識別情報配列とを有する個別項目情報を保持し、かつ、上記値管理テーブルが、上記項目値番号ごとに、上記レコード識別情報配列において相等しい項目値番号に関連する上記一以上のレコード識別情報を格納した領域を示すレコード識別情報指定情報を含み、
さらに、上記値管理テーブルに格納された項目値の中で、所定の検索条件に適合する項目値と関連した項目値番号に対応する上記レコード識別情報指定情報を用いて、上記レコード識別情報配列から上記検索条件に適合するレコード識別情報を取得する検索手段を有することを特徴とする請求の範囲第１４項に記載の装置。
【請求項１６】
複数の項目において、各項目に関連する項目値を含むレコードの配列として表される表形式データを検索・集計するプログラムを記録したコンピュータにより読み出し可能な記憶媒体であって、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納されている値管理テーブルと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値番号指定情報配列とを記憶装置に保持するステップと、
上記記憶装置に保持された上記項目値番号指定情報配列から上記特定のレコードに対応した項目値番号を取得するステップと、
上記記憶装置に保持された上記値管理テーブルに格納された項目値の中から、上記取得された項目値番号に対応した項目値を得るステップとを有することを特徴とするプログラムを記録した記憶媒体。
【請求項１７】
複数の項目において、各項目に関連する項目値を含むレコードの配列として表される表形式データから検索条件に適合する項目値を含むレコードを検索するプログラムを記憶したコンピュータにより読み出し可能な記憶媒体であって、上記プログラムが、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納されている値管理テーブルと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値番号指定情報配列と、相等しい項目値番号に関連する一以上のレコード識別情報を、上記項目値番号毎に固有の領域に格納したレコード識別情報配列とを含む個別項目情報であって、値管理テーブルが、上記項目値番号ごとに、上記レコード識別情報配列において相等しい項目値番号に関連する上記一以上のレコード識別情報を格納した領域を示すレコード識別情報指定情報を含むような、個別項目情報を記憶装置に保持するステップと、
上記値管理テーブルに格納された項目値の中で、上記検索条件に適合する項目値と関連した項目値番号に対応する上記レコード識別情報指定情報を用いて、上記レコード識別情報配列から上記検索条件に適合するレコード識別情報を取り出すステップとを有することを特徴とする記憶媒体。
【請求項１８】
複数の項目において、各項目に関連する項目値を含むレコードを指定するレコード識別情報の配列を、特定の項目に関して並べ換えるレコードのソート方法であって、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納されている値管理テーブルと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値番号指定情報配列とを記憶装置に保持し、
値管理テーブルが、さらに、上記項目値番号に対応して、上記レコード識別情報配列において相等しい項目値番号に関連する上記一以上のレコード識別情報を格納した領域を示すレコード識別情報指定情報を含み、
上記レコード毎に、上記レコード識別情報と上記項目の項目値に対応した項目値番号とを関連付け、
上記項目値番号毎に、上記レコード識別情報の並び換え後の格納場所を定義し、
上記配列から上記レコード識別情報を順番に取り出し、
上記取り出されたレコード識別情報に対応した上記項目値番号を判定し、
上記取り出されたレコード識別情報を、上記判定された項目値番号に対応するレコード識別情報指定情報にしたがって、上記格納場所に格納し、
上記レコード識別情報が格納される上記格納場所を、次のレコード識別情報の格納のために更新することを特徴とする方法。
【請求項１９】
上記レコード識別情報指定情報が、上記格納場所の領域の始点を示す開始位置と、初期的には開始位置と等価であり、上記更新によりその値がインクリメントされる終了位置とを含むことを特徴とする請求の範囲第１８項に記載の方法。
【請求項２０】
複数の項目において、各項目に関連する項目値を含むレコードを指定するレコード識別情報の配列を、特定の項目に関して並べ換えるレコードのソート装置であって
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目で共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納されている値管理テーブルと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値番号指定情報配列とを保持する記憶装置を備え、
値管理テーブルが、さらに、上記項目値番号に対応して、上記レコード識別情報配列において相等しい項目値番号に関連する上記一以上のレコード識別情報を格納した領域を示すレコード識別情報指定情報を含み、
上記レコード毎に、上記レコード識別情報と上記項目の項目値に対応した項目値番号とを関連付ける手段と、
上記項目値番号毎に、上記レコード識別情報の並び換え後の格納場所を定義する定義手段と、
上記配列から上記レコード識別情報を順番に取り出して、取り出されたレコード識別情報に対応した上記項目値番号を判定する項目値番号判定手段と、
上記取り出されたレコード識別情報を、上記判定された項目値番号に対応するレコード識別情報指定情報にしたがって、上記格納場所に格納するレコード識別情報格納手段と、
上記レコード識別情報が格納される上記格納場所を、次のレコード識別情報の格納のために更新する更新手段とを備えたことを特徴とする装置。
【請求項２１】
複数の項目において、各項目に関連する項目値を含むレコードを指定するレコード識別情報の配列を、特定の項目に関して並べ換えるレコードのソートプログラムを記憶したコンピュータにより読み出し可能な記憶媒体であって、上記ソートプログラムが、
各々の項目において、前記項目値を一意的に特定する項目値番号であって、各項目に共通して、初期値から所定の順序をもつ項目値番号に対応して、当該項目における項目値が格納されている値管理テーブルと、上記レコードの順番に上記項目値番号を指定する情報が格納された項目値番号指定情報配列とを記憶装置に保持するステップを有し、値管理テーブルが、さらに、上記項目値番号に対応して、上記レコード識別情報配列において相等しい項目値番号に関連する上記一以上のレコード識別情報を格納した領域を示すレコード識別情報指定情報を含み、
さらに、上記レコード毎に、上記レコード識別情報と上記項目の項目値に対応した項目値番号とを関連付けるステップと、
上記項目値番号毎に、上記レコード識別情報の並び換え後の格納場所を定義するステップと、
上記配列から上記レコード識別情報を順番に取り出すステップと、
上記取り出されたレコード識別情報に対応した上記項目値番号を判定するステップと、
上記取り出されたレコード識別情報を、上記判定された項目値番号に対応するレコード識別情報指定情報にしたがって、上記格納場所に格納するステップと、
上記レコード識別情報が格納された上記格納場所を、次のレコード識別情報の格納のために更新するステップとを備えたことを特徴とする記憶媒体。
【発明の詳細な説明】
発明の属する技術分野
本発明は、コンピュータのような情報処理装置を用いて大量のデータを処理するデータ処理方法及びデータ処理装置に係わり、特に、表形式のデータを検索・集計・ソートする方法及び装置に関する。
従来の技術
従来、大量の情報を蓄積し、蓄積された情報を検索、集計するデータ処理が行われている。これらのデータ処理は、例えば、ＣＰＵと、メモリと、周辺機器インタフェースと、ハードディスクのような補助記憶装置と、ディスプレイ及びプリンタのような表示装置と、キーボード及びマウスのような入力装置と、電源ユニットとがバスを介して接続された周知のコンピュータシステムで使用され、特に、市場で容易に入手可能なコンピュータシステムで動作可能はソフトウェアとして提供される。上記の検索・集計等のデータ処理を行うため、特に、大量のデータを蓄積する各種データベースが知られている。大量のデータの中でも、特に、表形式で表現され得るデータを処理したいという要求は強い。図１は、処理されるべきデータを表形式で表現した例を示す図である。図１には、たとえば、１００万人の多数の人に関して各人の性別、年齢及び職業のデータを蓄積したデータが示されている。図１において、表の横方向の行、即ち、所謂レコードは、レコード番号と、レコード番号に対応した性別、年齢及び職業の項目とからなる。表の縦方向の列は、レコード番号と、性別の項目と、年齢の項目と、職業の項目とからなる。レコード番号「０」の人は、性別が女性、年齢が１８歳、職業がプログラマであることを表す。以下の説明では、「女性」、「１８歳」、「プログラマ」等のように各項目に設定されたデータを項目値と称する。また、以下の説明では、特に断らない限り、大量のデータの具体的な例として、図１に示された１００万レコードからなる表形式データを使用する。
大量のデータを効率よく検索、集計できるか否かは、大量のデータを格納する形式に依存する。従来、一般的な格納技術として図２（Ａ）及び（Ｂ）に夫々示された所謂「行単位」格納技術及び「項目単位」格納技術が知られている。
図２（Ａ）および図２（Ｂ）は、記憶装置、たとえは、ハードディスク上のデータ格納イメージを示している。図２（Ａ）の行単位格納技術の場合、各レコード番号毎に構成された性別、年齢及び職業の項目値の組がレコード番号順に、論理的アドレスが増加する順番でディスク上に格納されている。一方、図２（Ｂ）の項目単位格納技術の場合、各項目毎にレコード番号順に、項目値が、論理的アドレスが増加する方向にディスク上に格納されている。即ち、図２（Ｂ）の例では、性別に関してレコード番号「０」から「９９９９９９」までの項目値が順番に並べられ、次に、年齢に関してレコード番号順に項目値が並べられ、それに引き続き、職業に関してレコード番号順に項目値が並べられている。
上記の従来技術の場合、全てのレコード番号の全ての項目に対する項目値が、そのまま、（レコード番号の１次元と、それ以外の項目値の１次元とからなる）２次元のデータ構造に格納されている。以下、このようなデータ構造を特に「データ表」と称する。従来技術の場合、蓄積されたデータを検索、集計する際には、このデータ表をアクセスすることにより行われている。
また、項目の値をそのまま項目値として格納する方法の他に、値をコード変換して、項目値としてコードを格納する方法も知られている。たとえば、性別に関して値「男性」を「０」に、値「女性」を「１」にコード変換し、「男性」又は「女性」の代わりに「０」又は「１」の値が項目値として格納される。この場合でも、コード変換されたコードが項目値としてデータ表に格納されている点に変わりはない。
上記従来技術のデータ表タイプのデータ構造を用いて格納された大量のデータを検索、集計する場合、このようなデータ表をアクセスするためのアクセス時間に起因して検索、集計の処理時間が長くなるという問題点がある。
また、データ表には少なくとも以下に述べる本質的な欠点がある。
（１）データ表はサイズが巨大化しやすく、しかも例えば項目毎等に（物理的に）分割することが困難である。例えば、性別が「男性」のレコードを抽出するとき、年齢や職業の情報は必要とされないので、性別という項目だけからなる表に分割してアクセスできれば効率的である。図２（Ｂ）に示された項目単位格納技術の場合、項目毎への分割はしやすいが、大量のデータを扱う際にはデータ表のサイズが巨大化することは同じで、実際上、集計・検索のためにデータ表をメモリなどの高速な記憶装置上に展開することは困難である。
（２）データ表は、各項目値を同時にソートした形で保持できない。例えば、図２（Ａ）及び図２（Ｂ）に示した従来技術の場合、項目値は、性別に関して「女性、男性、女性、．．．、女性」のようにレコード番号順に並べられている。しかし、検索・集計処理を行う場合、一般に、「女性、女性、女性、男性、．．．、男性」のように並べられている方が便宜である。ところが、データ表では、項目値は所定の配列順序、即ち、レコード番号順に並べられているので、特定の項目に関して項目値をソートすることは許容されない。そのため、従来技術の場合、検索・集計に都合の良い項目値の並べ方を選択することができない。
（３）データ表には、同一値が何度も出現する。例えば、図２（Ａ）及び図２（Ｂ）に記載された従来のデータ表の場合、性別が『「男性」か「男」』であるレコード、即ち、レコード番号を抽出する操作の際に、「男性」という項目値が何度も出現することに起因して、「男性」という項目値と比較条件である『「男性」か「男」』との照合を何度も行わねばならないことになる。本来的には、同一値に対して、それが該当するか否かは、１回判定すれば良いはずである。
本発明の目的は、大量のデータの検索・集計のスピードを大幅に向上させるため、従来のデータ表の機能を有すると共に、データ表に基づくデータ構造の上記問題点が解決されたデータ管理機構を設けることにより、表形式データを検索・集計・ソートする方法及びその方法を実施する装置を提供することである。
発明の開示
上記目的を達成するため、本発明の表形式データを検索・集計する方法及び装置は、通常のコンピュータシステムで使用可能な新規のデータ管理機構を提案する。本発明によるデータ管理機構は原則として値管理テーブルと、値管理テーブルへのポインタ配列とを有する。
図３は、本発明の原理を説明する図であり、値管理テーブル１０と値管理テーブルへのポインタ配列２０とが示されている。値管理テーブル１０とは、表形式データの各項目に対し、その項目に属する項目値が順序付け（整数化）された項目値番号の順番に、上記項目値番号に対応した項目値（符号１１参照）と、上記項目値に関連した分類番号（符号１２参照）とが格納されたテーブルである。値管理テーブルへのポインタ配列２０とは、表形式データのある列（即ち、項目）の項目値番号、即ち値管理テーブル１０へのポインタが表形式データのレコード番号順に格納された配列である。
値管理テーブルへのポインタ配列２０と値管理テーブル１０とを組み合わせることにより、あるレコード番号が与えられたとき、所定の項目に関する値管理テーブルへのポインタ配列２０からそのレコード番号に対応して格納された項目値番号を取り出し、次に、値管理テーブル１０内でその項目値番号に対応して格納された項目値を取り出すことにより、レコード番号から項目値を得ることができる。したがって、従来のデータ表と同様に、レコード番号（行）と項目（列）という座標を用いて全てのデータ（項目値）を参照することができる。
このように表形式データの項目中のある項目に対して生成された値管理テーブルと、値管理テーブルへのポインタ配列とを含む本発明によるデータ管理機構は、以下の説明では、特に情報ブロックと呼ぶ場合がある。
従来のデータ表は、レコードに対応した行と、項目に対応した列とからなる座標を用いて全てのデータを一体的に管理しているのに対して、本発明による情報ブロックは、表形式の列、即ち、項目毎にデータを完全に分離している点に特徴がある。このように、本発明によれば、大量のデータが項目毎に分離されているので、検索・集計に必要な項目に関するデータのみをメモリ等の高速な記憶装置上に取り込むことが可能であり、その結果としてデータへのアクセス時間が短縮されるので、検索・集計の処理が高速化され、項目数が非常に多いデータの場合でも、パフォーマンスを低下させることなく取り扱えるようになる。
また、本発明による情報ブロックの場合、項目値は値管理テーブルに格納され、値が存在する位置を示すレコード番号は値管理テーブルへのポインタ配列に関連付けられているので、項目値がレコード番号順に並べられている必要がない。したがって、検索・集計に適するようにデータを項目値に関してソートすることができるようになる。これにより、目的の値と一致する項目値がデータ中に存在するか否かの判定が高速に行えるようになる。その上、項目値は項目値番号と対応しているので、項目値が長いデータや文字列等であっても整数として取り扱うことができる。
さらに、本発明によれば、値管理テーブル１０の全ての項目値番号は異なる項目値と対応しているので、特定の値を有する項目値を含むレコードを抽出する場合に必要とされる特定の値と項目値との比較の回数は、最大で項目値の種類の数、即ち、項目値番号の個数であり、比較演算の回数が著しく低減され、検索・集計の高速化が図られる。その際には、ある項目値が該当するかどうかを調べた結果を格納する場所が必要であるが、例えば分類番号１２をその格納場所として使用することができる。
図４には、項目値を格納した項目値配列１１と、分類番号を格納した分類番号配列１２と、存在数を格納した存在数配列１４とからなる値管理テーブル１０を含む本発明による情報ブロックが示されている。存在数配列１４には、ある項目に関する各項目値が全データ中に何個ずつ存在するかを示す数、換言すれば、所定の項目値を有するレコードの個数が格納される。このような存在数配列１４を値管理テーブル１０に準備しておくことにより、検索・集計の際に必要とされる「どのようなデータが（いくつ）存在するか」という情報を直ちに得ることができるようになり、検索・集計の高速化が図れる。
図５には、値管理テーブル１０と、値管理テーブルへのポインタ配列２０と、レコードへのポインタ配列３０とからなる情報ブロックが示されている。レコードへのポインタ配列３０とは、項目値番号、即ち、項目値毎に、その項目値を有するレコードへのポインタ（レコード番号に対応する）が格納された配列である。各項目値毎にレコードへのポインタ配列３０に格納されるポインタの個数は、値管理テーブル１０の存在数配列１４に格納された数と一致する。また、レコードへのポインタ配列３０内で、各項目値毎のポインタの群の先頭のアドレスを指定する開始位置を格納した開始位置配列１３を値管理テーブル１０に設けてもよい。このようなレコードへのポインタ配列３０を情報ブロックに設けることにより、所定の項目に関して、特定の項目値を有するレコードの集合を高速に抽出できるようになる。値管理テーブル１０にレコードへのポインタ配列３０に格納されるポインタの存在数（符号１４参照）及びその開始位置（符号１３参照）が設定されているので、集計時に利用可能な値、個数が情報ブロックにそのまま存在している点が有利である。
次に、本発明による表形式データの検索・集計方法について説明する。なお、以下の説明では、個別項目情報は上記の「情報ブロック」を表し、項目値番号指定情報配列は上記の「値管理テーブルへのポインタ配列」を表し、レコード識別情報配列は上記の「レコードへのポインタ配列」を表す。
本発明による情報の項目に対応した項目値を含むレコードの配列として表される表形式データから、特定の項目及び特定のレコードに対応した項目値を得る方法は、
特定の項目に属する項目値に対応した項目値番号の順番に、項目値が格納されている値管理テーブルと、レコードの順番に項目値番号を指定する情報が格納された項目値番号指定情報配列とを記憶装置に保持し、
項目値番号指定情報配列から特定のレコードに対応した項目値番号を取得し、
値管理テーブルに格納された項目値の中から、取得された項目値番号に対応した項目値を得るステップを含む。
また、本発明による項目値を得る方法によれば、項目値番号に対応した項目値を分類するための分類番号が、項目値番号に対応して値管理テーブルに格納され、項目値番号に対応した項目値を得る際に分類番号が参照される。
本発明による情報の項目に対応した項目値を含むレコードの配列として表される表形式データから検索条件に適合する項目値を含むレコードを検索する単項目検索方法は、
検索条件と関連した項目に属する項目値に対応した項目値番号の順番に、項目値が格納されている値管理テーブルと、レコードの順番に項目値番号を指定する情報が格納された項目値番号指定情報配列と、同じ項目値番号に対応した上記レコードの識別情報が項目値番号毎に別個に格納されたレコード識別情報配列とを含み、値管理テーブルはレコード識別情報配列の中で同じ項目値番号に対応したレコードの識別情報が格納されている場所を示すレコード識別情報指定情報が項目値番号毎に格納されている、個別項目情報を記憶装置に保持し、
値管理テーブルに格納された項目値の中で、検索条件に適合する項目値と関連した項目値番号に対応して格納されたレコード識別情報指定情報を用いて、レコード識別情報配列から検索条件に適合するレコードの識別情報を取り出すステップを含む。
また、本発明による複数項目検索方法は、
本発明の単項目検索方法に従って得られた上記検索条件に適合するレコードの識別情報に基づいて上記検索条件に適合するレコードを指定する結果集合を記憶装置に保持し、
別の検索条件と関連した項目に関する別の個別項目情報を選択し、
別の個別項目情報の項目値番号指定情報配列から、上記結果集合で指定された上記検索条件に適合したレコードの識別情報に対応した項目値番号を取り出し、
別の個別項目情報について取り出された項目値番号と関連した項目値が、別の検索条件と適合するか否かを判定し、
別の個別項目情報について項目値番号と関連した項目値が、別の検索条件と適合する場合に、項目値番号に対応した上記レコードの識別情報を、別の検索条件に適合するレコードの識別情報として取り出すステップを含む。
或いは、複数項目検索方法を変形することにより、いわゆるＯＲ検索を実現することもできる。より詳細には、検索条件に適合するレコードの識別情報に基づいて検索条件に適合するレコードを指定する結果集合を記憶装置に保持し、
他の検索条件と関連した項目に関する他の個別項目情報を記憶装置に保持し、
他の個別項目情報の値管理テーブルに格納された項目値の中で、検索条件に適合する項目値と関連した項目値に対応するレコード識別情報指定情報を用いて、レコード識別情報配列から、他の検索条件に適合するレコード識別情報を取り出し、検索条件に適合するレコードを指定する他の結果集合を記憶し、
必要な場合に、さらに他の検索条件に関して、さらに他の個別項目情報について、個別項目情報の記憶、レコード識別情報の取り出し、および、さらに他の結果集合の記憶を繰り返して、得られた結果集合から重複したレコードを除去した最終的な結果集合を得る。
本発明による情報の項目に対応した項目値を含むレコードの配列として表される表形式データを項目値毎に集計する方法は、
ｎが１以上の整数を表す場合に、集計に利用されるｎ個の項目について、当該項目に属する項目値に対応した項目値番号の順番に上記項目値が格納されている値管理テーブルと、レコードの順番に項目値番号を指定する情報が格納された項目値番号指定情報配列とにより表されたｎ個の個別項目情報を記憶装置に保持し、
ｉが１≦ｉ≦ｎなる整数を表すとき、ｉ番目の個別情報項目について、項目値番号の総数がＮiで表され、ｋiが０≦ｋi≦Ｎi−１なる整数を表し、Ｍが１以上の整数を表し、ｍが１≦ｍ≦Ｍなる整数であるとき、Ｎ1×Ｎ2×．．．×Ｎi×．．．×Ｎnのサイズを持つ、ｎ次元の、Ｍ個のデータ空間の各要素Ｐm（ｋ1，ｋ2，．．．，ｋi，．．．，ｋn）を初期化し、
ｎ個の個別情報項目について、ｊが０≦ｊ≦（レコードの総数−１）なる整数を表すとき、各項目値番号指定情報配列のｊ番目に格納された夫々の項目値番号を取り出し、ｉ番目の個別情報項目から取り出された項目値番号がｑiで表されるとき、データ空間の要素Ｐm（ｑ1，ｑ2，．．．，ｑi，．．．，ｑn）を特定し、
特定された要素Ｐm（ｑ1，ｑ2，．．．，ｑi，．．．，ｑn）の値を処理するステップを含む。
また、本発明による情報の項目に対応した項目値を含むレコードの配列として表される表形式データを項目値の分類毎に集計する方法は、
ｎが１以上の整数を表し、集計に利用されるｎ個の項目について、項目に属する項目値に対応した項目値番号の順番に、項目値及び項目値の分類番号が格納されている値管理テーブルと、レコードの順番に、項目値番号を指定する情報が格納された項目値番号指定情報配列とにより表されたｎ個の個別項目情報を記憶装置に保持し、
ｉが１≦ｉ≦ｎになる整数を表すとき、ｉ番目の個別情報項目について、項目値番号又は分類番号の何れか一方の番号の総数がＮiで表され、ｋiが０≦ｋi≦Ｎi−１なる整数を表し、Ｍが１以上の整数を表し、ｍが１≦ｍ≦Ｍなる整数であるとき、Ｎ1×Ｎ2×．．．×Ｎi×．．．×Ｎnのサイズを持つ、ｎ次元の、Ｍ個のデータ空間の各要素Ｐm（ｋ1，ｋ2，．．．，ｋi，．．．，ｋn）を初期化し、
ｎ個の個別情報項目について、ｊが０≦ｊ≦（レコード総数−１）なる整数を表すとき、各項目値番号指定情報配列のｊ番目に格納された夫々の項目値番号を取り出し、ｉ番目の個別情報項目から取り出された項目値番号又は上記ｉ番目の個別情報項目の値管理テーブルに該項目値番号と対応して格納された分類番号がｑiで表されるとき、上記データ空間の要素Ｐm（ｑ1，ｑ2，．．．，ｑi，．．．，ｑnを特定し、
特定された要素Ｐm（ｑ1，ｑ2，．．．，ｑi，．．．，ｑn）の値を処理するステップを含む。
特に、本発明による個数を集計する方法によれば、Ｍ＝１であり、特定された要素Ｐmの値を処理するステップでは、要素Ｐmの現在の値に１を加える。
また、本発明による統計的な量を集計する方法によれば、特定された要素Ｐmの値を処理するステップは、Ｍ個の要素Ｐmの中の少なくとも１個の要素Ｐmに対して、
記憶装置に保持された別の個別項目情報について項目値番号指定情報配列のｊ番目に格納された項目値番号を取得し、
別の個別項目情報の値管理テーブルに格納された項目値の中から、取得された項目値番号に対応した項目値を取得し、
要素Ｐmの現在の値と上記取得された項目値を組み合わせて、要素Ｐmの値を更新する。
本発明によれば、項目値番号を指定する情報は項目値番号自体でもよい。
或いは、あるレコードの一つの項目に対し複数の項目値が割り当てられようないわゆるマルチアンサ項目を実現するため、本発明によれば、上記項目値番号を指定する情報は、各項目値番号毎に１ビット以上が割り当てられ、指定の有無が設定される２進値でも構わない。
また、本発明による情報の項目に対応した項目値を含むレコードの配列として表される表形式データを検索・集計する装置は、
項目に属する項目値に対応した項目値番号の順番に、項目値が格納されている値管理テーブルと、レコードの順番に、項目値番号を指定する情報が格納された項目値番号指定情報配列とを保持する記憶装置と、
記憶装置に保持された項目値番号指定情報配列から、特定のレコードに対応した項目値番号を取得する手段と、
記憶装置に保持された値管理テーブルに格納された項目値の中から、取得された項目値番号に対応した項目値を得る手段とを有することを特徴とする。
また、本発明による情報の項目に対応した項目値を含むレコードの配列として表される表形式データを検索・集計するプログラムを記録した記憶媒体は、
項目に属する項目値に対応した項目値番号の順番に、項目値が格納されている値管理テーブルと、レコードの順番に、項目値番号を指定する情報が格納された項目値番号指定情報配列とを記憶装置に保持させるステップと、
記憶装置に保持された項目値番号指定情報配列から、特定のレコードに対応した項目値番号を取得させるステップと、
記憶装置に保持された上記値管理テーブルに格納された項目値の中から、上記取得された項目値番号に対応した項目値を得させるステップとを有することを特徴とするプログラムを記録した記憶媒体である。
本発明は、更に、情報の項目に対応した項目値を含むレコードを指定するレコード識別情報、例えば、レコード番号の配列を、項目に関して並べ換えるレコードのソート方法を提案する。本発明のソート方法によれば、レコード毎に、レコード識別情報とある項目の項目値に対応した項目値番号とが関連付けられた値管理テーブルへのポインタ配列が形成される。次に、項目値番号毎に、レコード識別情報の並び換え後の格納場所が値管理テーブル中に定義される。配列から上記レコード識別情報が順番に取り出され、取り出されたレコード識別情報に対応した上記項目値番号が判定され、取り出されたレコード識別情報は判定された項目値番号に対応して定義された格納場所に格納され、レコード識別情報が格納される格納場所が、次のレコード識別情報が格納され得るように更新される。
本発明にかかるソート方法の好ましい実施態様においては、検索条件と関連した項目に属する項目値に対応した項目値番号の順番に、項目値が格納されている値管理テーブルと、レコードの順番に項目値番号を指定する情報が格納された項目値番号指定情報配列とを含む個別項目情報を記憶装置に保持し、値管理テーブルが、さらに、項目値番号ごとに、レコード識別情報配列において相等しい項目値番号に関連する一以上のレコード識別情報を格納した領域を示すレコード識別情報指定情報を含み、格納するステップが、レコード識別情報指定情報にしたがって、レコード識別情報を、格納場所に格納するように構成されている。
さらに、本発明の目的は、上記方法を実現するための装置、方法にかかるプログラムを格納したコンピュータにより読み出し可能な記憶媒体、或いは、当該方法にかかる、コンピュータによりロード可能なプログラムプロダクトにより達成される。
【図面の簡単な説明】
本発明の目的および他の目的は、添付図面とともに実施例を参照することによりより明らかになるであろう。ここに、
図１は、一般的な表形式データの説明図である。
図２（Ａ）及び図２（Ｂ）は、従来技術による表形式データの格納技術の説明図である。
図３は、本発明の原理説明図である。
図４は、本発明による情報ブロックの説明図である。
図５は、本発明による情報ブロックの説明図である。
図６は、本発明の実施例で使用される「性別」に関する情報ブロックの説明図である。
図７は、本発明の実施例で使用される「年齢」に関する情報ブロックの説明図である。
図８は、本発明の実施例で使用される「性別」に関する情報ブロックの説明図である。
図９は、本発明の第１実施例による単一項目内の検索方法の動作フローチャートである。
図１０は、本発明の第１実施例による情報ブロックの説明図である。
図１１は、本発明の第１実施例による情報ブロックの説明図である。
図１２は、本発明の第２実施例による複数項目のＡＮＤ検索方法の動作フローチャートである。
図１３は、本発明の第２実施例による情報ブロックの説明図である。
図１４は、本発明の第２実施例による情報ブロックの説明図である。
図１５は、本発明の第３実施例によるビットフラグを用いた複数項目論理演算検索方法の説明図である。
図１６は、本発明の第３実施例によるビットフラグを用いた複数項目論理演算検索方法の説明図である。
図１７は、本発明の第５実施例による集計方法の動作フローチャートである。
図１８は、本発明の第６実施例の概念的な説明図である。
図１９は、本発明の第６実施例の動作フローチャートである。
図２０は、本発明の第７実施例によるクロス集計の動作フローチャートである。
図２１は、本発明の第８実施例による情報ブロックの説明図である。
図２２は、本発明の第９実施例によるクロス集計の動作フローチャートである。
図２３（Ａ）及び図２３（Ｂ）は、クロス集計表の概念説明図である。
図２４は、  マルチアンサ形式の項目の説明図である。
図２５は、本発明の第１０実施例によるマルチアンサ項目対応型の情報ブロックの説明図である。
図２６は、本発明の第１１実施例による特殊値の取扱方法の説明図である。
図２７は、本発明の第１２実施例による複数項目検索方法の動作フローチャートである。
図２８は、本発明の一実施例による表形式データの検索・集計システムの構成図である。
図２９は、情報ブロックの構築方法の説明図である。
図３０は、データ投入の準備と初期化の説明図である。
図３１は、データ投入の第１のパスの説明図である。
図３２は、データ投入の第２のパスの説明図である。
図３３は、データ投入の第３のパスの説明図である。
図３４は、データ投入の第３のパスの説明図である。
図３５は、データ投入の第３のパスの説明図である。
図３６は、情報ブロックに対するデータ追加の説明図である。
図３７は、本発明の他の実施例による情報ブロックの構造を示す図である。
図３８は、本発明の第１３実施例によるソートの初期状態の説明図である。
図３９は、本発明の第１３実施例によるソートの第１ステップの説明図である。
図４０は、本発明の第１３実施例によるソートの第２ステップの説明図である。
図４１は、本発明の第１３実施例によるソートの最終状態の説明図である。
図４２は、部分集合に対するソートの説明図である。
図４３は、部分集合に対するソートの後処理の説明図である。
図４４は、検索・集計テストに使用した１００万件のデータの説明図である。
図４５は、１００万件のデータの検索・集計テストの測定結果を示す図である。
図４６（Ａ）および図４６（Ｂ）は、本発明の第２実施例の変形にかかる、複数項目のＯＲ検索処理を示すフローチャートである。
図４７は、本発明の第３実施例にかかる検索処理を示すフローチャートである。
図４８は、本発明の第４実施例にかかる集計処理を示すフローチャートである。
図４９は、本発明の第７実施例にかかる集計処理を示すフローチャートである。
図５０は、本発明の第１３実施例にかかるソート処理を示すフローチャートである。
発明の好ましい実施形態の説明
以下、本発明がより良く理解できるように図１に示した表形式データをデータの例として使用して、本発明にかかる検索方法、集計方法およびソート方法の種々の実施例を詳細に説明する。図１の例に示されるデータは、「性別」、「年齢」及び「職業」の項目を含むので、情報ブロックとして、図６ないし図８に夫々示されているように、「性別」に関する情報ブロック、「年齢」に関する情報ブロック及び「職業」に関する情報ブロックが得られる。以下の実施例の説明では、これらの情報ブロックが得られた状況を想定している。なお、情報ブロックを構築する手法の一例は後述するが、本発明は情報ブロックを構築する方法によって制限されないことに注意する必要がある。
後述するように、本発明の実施例にかかる表形式データの検索・集計装置は、図２８に示す構成を備えている。図２８に示すように、表形式データの検索・集計装置は、通常のパーソナルコンピュータのようなコンピュータシステムにより実現される。このコンピュータシステムは、プログラムを実行することにより、システム全体および個々の構成部分を制御するＣＰＵ１００、プログラム等を記憶するＲＯＮ(Read ONly Memory)１１０、ワークデータなどを記憶するＲＡＭ(Random Access Memory)１２０、ハードディスク記憶装置１３０、表示装置１４０およびキーボードやマウスからなる入力装置１５０を備えている。これらＣＰＵ１００、ＲＯＭ１１０、ＲＡＭ１２０等は、バス１６０を介して相互に接続されている。また、バスには、ＣＤ−ＲＯＭをアクセスするためのＣＤ−ＲＯＭドライバ（図示せず）、外部ネットワーク（図示せず）と接続された外部端子との間に設けられたインタフェース（図示せず）などが接続されていてもよい。
本実施の形態にかかる、表形式データを検索・集計（場合によってはこれに加えてソート）するプログラムは、ＣＤ−ＲＯＭ（図示せず）に収容され、ＣＤ−ＲＯＭドライバ（図示せず）に読み取られても良いし、ＲＯＭ１１０に予め記憶されていても良い。また、いったんＣＤ−ＲＯＭから読み出したものを、ハードディスク記憶装置１３０の所定の領域に記憶しておいても良い。或いは、上記プログラムは、ネットワーク、外部端子およびＩ／Ｆ（何れも図示せず）を経て外部から供給されるものであっても良い。
また、上記検索・集計装置において、表形式データの検索・集計（場合によってはこれに加えてソート）処理を実行するために、後述するように、表形式データに基づき、所定のデータ形式の情報ブロックを生成する必要がある。この情報ブロック生成プログラムも同様に、ＣＤ−ＲＯＭに収容され、ＲＯＭ１１０に記憶され、或いは、ハードディスク記憶装置１３０に記憶されても良い。或いは、これらプログラムは、ネットワーク（図示せず）を介して、外部から供給されても良いことはいうまでもない。また、本実施の形態において、上記情報ブロックを生成する情報ブロック生成プログラムにて生成されたデータ（情報ブロック）は、ＲＡＭ１２０、或いは、ハードディスク記憶装置１３０の所定の領域に記憶される。以下に、「年齢」の項目値が「１６歳」又は「１９歳」であるレコードを検索する場合に関して、本発明の第１実施例による単一項目内の検索方法を説明する。図９は、単一項目内の検索方法の動作フローチャートである。これは、ＣＰＵ１００が、上述した手順にて取得し、所定の位置に記憶した検索プログラムを実行することにより実現される。
最初に、表形式データに関する情報ブロックの中から、図７に示された「年齢」に関する情報ブロックを特定情報ブロックとして選択する（ステップ１００）。
次に、特定情報ブロックの値管理テーブルの中で項目値が上記の検索条件である「１６」又は「１９」に合致する行の分類番号を「１」にセットし、それ以外の行の分類番号を「０」にセットする（ステップ１０２）。図１０に示されるように本例の場合、項目値番号「０」及び項目値番号「３」に対応する行の分類番号が「１」にセットされる。
続いて、分類番号が「１」にセットされている行（即ち、項目値番号「０」及び「３」が付与されている行）に対応した開始位置及び存在数を、ポインタ取り出し情報として取得する（ステップ１０４）。本例の場合、項目値番号「０」に対応する開始位置は「０」であり、その存在数は「４５８９８」である。その一方、項目値番号「３」に対応する開始位置は「２３８１３７」であり、その存在数は「１８９６５３」である。
レコードへのポインタ配列の中で、上記の開始位置から存在数で指定された個数分のポインタを取り出すことにより、上記検索条件に合致したレコードへのポインタを表すレコード番号が取り出される（ステップ１０６）。本例の場合、図１０に示されているように、項目値番号「０」に対応したレコードへのポインタは、レコードへのポインタ配列の開始位置「０」、即ち、先頭から、４５８９８個目までの場所に格納され、項目値番号「３」に対応したレコードへのポインタは、レコードへのポインタ配列の２３８３１３７番目から１８９６５３個分の場所に格納されていることが分かる。例えば、図１の表形式データを参照するに、最後のレコード番号「９９９９９９」のレコードに対応する「年齢」は「１６歳」であるので、図１１に示される如く、レコードポインタへの配列内で項目値番号「０」、即ち、「１６歳」の「年齢」に対応して格納されたポインタの中で最後のポインタは、「９９９９９９」である。
最後に、後の処理で利用するため、取り出されたレコード番号の配列を結果集合として作成、保持する（ステップ１０８）。
本発明においては、上述したような単一項目による検索のみでなく、複数項目のＡＮＤ検索を実現することもできる。以下、本発明の第２実施例にかかる複数項目のＡＮＤ検索方法を説明する。本例では、「年齢」が「１６歳」又は「１９歳」であるという第１の検索条件と、「職業」が「学生」であるという第２の検索条件を満たすレコードの集合を得る場合を考える。図１２は、複数項目のＡＮＤ検索方法の動作フローチャートである。
既に説明したように、第１の項目である「年齢」に関する情報ブロックである第１の特定情報ブロックについて、「年齢」が「１６歳」又は「１９歳」であるレコードの結果集合は第１実施例にかかる処理に従って得られる（ステップ１２０）。したがって、このステップ１２０の処理は、図９に示すものと略対応する。
次に、図８に示されている第２の項目である「職業」に関する情報ブロックである第２の特定情報ブロックとして選択する（ステップ１２２）。
次に、第２の特定情報ブロックの値管理テーブルの中で、項目値が上記の検索条件である「学生」に合致する行の分類番号を「１」にセットし、それ以外の行の分類番号を「０」にセットする（ステップ１２４）。図１３に示されるように本例の場合、項目値番号「０」に対応する行の分類番号が「１」にセットされ、それ以外の行は「０」にセットされる。
次に、第１の検索条件に関する結果集合から、レコードへのポインタを表すレコード番号を順次取り出す（ステップ１２６）。たとえば、図１４に示されるように、レコード番号「９９９９９９」が取り出される。
次に、第２の特定情報ブロックに関して、値管理テーブルへのポインタ配列から上記第１の検索条件について得られたレコード番号に対応した項目値番号を取り出す（ステップ１２８）。たとえば、図１４に示されるように、レコード番号「９９９９９９」に対応した項目値番号「０」が取り出される。
次に、第２の特定情報ブロックに関して取り出された項目値番号に対応する分類番号が「１」にセットされているか否かを判定する（ステップ１３０）。たとえば、図１４に示されているように、項目値番号「０」に対応する分類番号は「１」にセットされていることがわかる。
分類番号が「１」にセットされている場合、値管理テーブルへのポインタ配列内で、分類番号が「１」にセットされている当該項目値番号を指すポインタが格納されている場所に対応したレコードへのポインタ、例えば、レコード番号を最終的な結果集合に追加する（ステップ１３２）。たとえば、図１４に示されているように、レコード番号「９９９９９９」が最終的な結果集合に追加される。
分類番号が「０」である場合には、最終的な結果集合は更新されない。
なお、当業者であれば容易に分かるように、上記本発明の第２実施例による複数項目ＡＮＤ検索方法は、ＡＮＤ以外の検索、例えば、複数項目ＯＲ検索方法に変形することが可能である。図４６（Ａ）は、複数項目のＯＲ検索方法の処理の一例を示すフローチャートである。この処理もＣＰＵ１００が所定領域に格納されたプログラムを実行することにより実現される。図４６に示すように、まず、第１の検索条件について結果集合を取得した（ステップ４６０１）後に、第２の検索条件にかかる情報ブロックを選択する（ステップ４６０２）。次いで、この情報ブロックに関して第２の検索条件について分類番号をセットする（ステップ４６０３）。そして、第１の検索条件の結果集合に格納されたレコード番号をスキップしながら、第２の特定情報ブロックについての値管理テーブルへのポインタ配列を順次走査する（ステップ４６０４）。より詳細には、第２の検索条件に関して分類番号が「１」となっているレコード番号を参照し、このレコード番号が、第１の検索条件による結果集合中に見出されるか否かが判断される（ステップ４６１１〜４６１５参照）。第１の検索条件による結果集合中にその番号が見出されなかった場合には、結果集合にその番号が追加される（ステップ４６１４）。このような処理が終了した後に、第１の検索条件の結果集合に格納されたレコード番号と、第２の情報ブロックについて分類番号がセットされた項目値番号に属するレコード番号とを併せて第２の結果集合として生成し（ステップ４６１５）、これを出力することができる。
或いは、図４６（Ｂ）に示す処理を実行してもよい。この例では、第１の特定情報に関する検索条件により第１の結果集合が得られた後に、これとは独立して、第２の特定情報に関する第２の検索条件により第２の結果集合を得て（ステップ４６２１〜ステップ４６２４）、第１の結果集合と、第１の結果集合（ステップ４６２５参照）との間で、ビットマップを用いたＯＲ処理を施して（ステップ４６２６）、これにより新たな結果集合が作成される（ステップ４６２７）。なお、図４６（Ｂ）の処理において、ステップ４６０２、４６０３は、図４６（Ａ）のステップ４６２１、４６２２に対応し、ステップ４６２５は、図４６（Ａ）のステップ４６０１に対応する。
図１５及び図１６は本発明の第３実施例によるビットフラグを用いた複数項目論理演算検索方法の説明図であり、上記本発明の第２実施例による検索と同一の検索条件で検索を行う場合を示している。ビットフラグを用いた複数項目論理演算検索とは、検索条件が項目毎の検索条件の間の論理演算によって表されるような検索を意味する。この場合、単一項目の検索により得られる結果集合を、第１実施例の如く、レコード番号の配列により構成するのはなく、結果集合をビットフラグの形式で構成する方が有利である。即ち、図４７に示す処理にしたがって、全レコードに対し１ビットずつを割り当て、各レコードが検索条件に適合しているか否かをビットの値「１」又は「０」によって表わすような結果集合を生成する。より詳細には、まず、他の実施例と同様に、検索条件にかかる項目値を含む情報ブロックが選択され（ステップ４７０１）、検索条件に合致する行の分類番号を「１」にセットする（ステップ４７０２）。次いで、各レコードについて、対応する分類番号を参照して、結果集合に格納すべきビット値を決定する（ステップ４７０３〜ステップ４７０７）。結果集合をこのように構成することにより、各項目毎の結果集合のサイズが表形式データのレコード数と対応するので、各項目毎の結果集合のサイズが一致し、その結果として、結果集合中の要素間の論理演算、例えば、ＡＮＤ，ＯＲ，ＸＯＲを簡単に行うことができる。
本例では、図１５に示された結果集合Ａと図１６に示された結果集合ＢをＡＮＤ条件で結合することにより所望の検索結果集合がビットフラグ形式で得られる。また、得られたビットフラグ形式の検索結果集合は、レコードへのポインタ配列形式の結果集合に変換することにより、上記本発明の第２実施例による複数項目検索方法と組み合わせて用いることができる。
次に、本発明にかかる種々の表形式データの集計方法につき説明を加える。本発明の第４実施例による集計方法は、特定の項目に関して特定の項目値を有するレコード数をカウントする。本発明の第４実施例では、特に、図１の表形式データに関して、項目「性別」について「男性」という項目値及び「女性」という項目値を有するレコードの数を夫々カウントする場合を考える。既に、図６に示しているように、本発明の好ましい実施例によれば、「性別」関する情報ブロックには、項目値「男性」を含むレコードの存在数（その値は「６３２５６４」である）、および、項目値「女性」を含むレコードの存在数（その値は「３６７４３６」である）が格納されているので、単純なレコード数の集計は情報ブロック中の存在数配列を参照することによって直ちに得ることができる。
また、単一項目の検索方法に関連して説明した分類番号を、上記本発明の第４実施例による集計方法と組み合わせることにより、更に複雑な条件の場合にもレコード数のカウントを簡単に行うことができる。例えば、本発明の第１実施例で説明した「年齢」の項目値が「１６歳」又は「１９歳」であるレコードを検索する単一項目検索方法において、分類番号が「１」にセットされた項目値番号に対応した存在数を合計することにより、検索条件に適合したレコード数を集計することが可能である。このように、分類番号を使用することにより、値管理テーブルのサイズが大きい場合、或いは、複雑な条件が与えられた場合であっても、存在数を効率的に求めることができるようになる。より一般には、図４８に示すように、分類番号が「１」にセットされた項目値番号を見出し（ステップ４８０２参照）、対応する存在数を加算していけばよい（ステップ４８０３参照）。
次に、本発明の第５実施例につき説明を加える。この実施例では、「男性」の平均年齢が算出されている。平均年齢は、（男性の「年齢」の総和）／（男性の存在数）により求めることができ、また、男性の存在数は、上記の本発明の第４実施例で説明した集計方法により得ることができる。従って、本実施例は、男性の「年齢」の総和を求める問題に帰着される。図１７は本発明の第５実施例の動作を示すフローチャートである。この処理も、他の実施例と同様に、ＣＰＵ１００が所定の領域に記憶されたプログラムを読み出し、これを実行することにより実現される。
最初に、図６に示された「性別」に関する情報ブロックを第１の情報ブロックとして選択し（ステップ１４０）、第１の特定情報ブロックの値管理テーブルの中で、項目値「男性」に対応した項目値番号「０」を検出する（ステップ１４２）。次に、項目値番号「０」に対応した存在数が「６３２５６４」であることから男性の総数が６３２５６４人であることを判定し（ステップ１４４）、また、項目値番号「０」に対応した開始位置が「０」であることから、性別が男性であるレコードへのポインタは、レコードへのポインタ配列の先頭から６３２５６４個目までの場所に格納されていることを判定し、このレコードへのポインタの一覧、即ち、レコード番号の配列を結果集合として保持する（ステップ１４６）。
次に、図７に示された「年齢」に関する情報ブロックを第２の特定情報ブロックとして選択し（ステップ１４８）、第２の特定情報ブロックの値管理テーブルへのポインタ配列から、第１の特定情報ブロックに関する結果集合で指定されたレコードに対応した項目値番号を取り出し（ステップ１５０）、取り出された項目値番号と関連した項目値、即ち、「年齢」を取り出す（ステップ１５２）。最後に、取り出された「年齢」を順次加算して年齢の総和を求め（ステップ１５４）、上記結果集合で指定されたレコードを全て処理するまでステップ１５０，１５２，１５４を繰り返す（ステップ１５６）。得られた年齢の総和を存在数で除算することにより年齢の平均が求められる（ステップ１５８）。
次に、本発明の第６実施例につき説明を加える。この例では、学生の男性の平均年齢、及び、学生の女性の平均年齢を求めている。図１８は本発明の第６実施例を概念的に説明する図であり、図１９は本発明の第６実施例にかかる動作を示すフローチャートである。
本実施例の集計は、最初に、第１の情報ブロックとして「職業」に関する情報ブロックに関する情報ブロックを選択し（ステップ１７０）、「職業が学生である」という検索条件を用いて、全てのレコードの中から「職業が学生である」レコードを含む結果集合を作成する（ステップ１７２）。
次に、「性別」に関する情報ブロックを第２の情報ブロックとして選択するとともに、「年齢」に関する情報ブロックを第３の情報ブロックとして選択し（ステップ１７４）、結果集合の先頭から順次レコードへのポインタを取り出す（ステップ１７６）。
取り出されたレコードへのポインタを用いて、第２の情報ブロックの値管理テーブルへのポインタ配列を参照して取り出されたレコードへのポインタに対応した性別を獲得し、また、第３の情報ブロックの値管理テーブルへのポインタ配列を参照して取り出されたレコードへのポインタに対応した年齢を取り出す（ステップ１７８）。取り出された性別の男女別の総数を１ずつ増加し、取り出された年齢の合計を男女別に計算する（ステップ１８０）。
結果集合の全てのレコードへのポインタが処理されたか否かを検査し（ステップ１８２）、全てのレコードへのポインタが処理された場合に、男女別に年齢の合計を総数で除算することにより学生の男女別の平均年齢を計算する（ステップ１８４）。
次に、図２０に示された動作フローチャートを参照して、本発明の第７実施例につき説明を加える。この実施例では、いわゆるクロス集計を実現している。なお、図２０に示す処理プログラムも、他の実施例と同様に、ＣＰＵ１００により読み出され、実行される。本実施例では、図１の表形式データに関してレコード全体を対象として、性別／職業別の存在数を求める場合を考える。
集計に利用される「性別」及び「職業」の２個の項目について、夫々の値管理テーブルと、項目値番号指定情報配列、即ち、値管理テーブルへのポインタ配列とにより表された２個の個別項目情報、即ち、第１及び第２の情報ブロックを記憶装置に保持する（ステップ１９０）。記憶装置は、例えば、メモリ、仮想記憶、メモリマップドファイル等の形で実現される。
性別に関する第１の情報ブロックについて、図６に示される如く性別の項目値番号の総数は「２」であり、また、職業に関する第２の情報ブロックについて、図８に示される如く、職業の項目値番号の総数は「４」であることが分かる。そこで、集計データを格納する空間として、初期的な２×４（２行４列）の２次元配列を生成する（ステップ１９２）。
第１及び第２の情報ブロックについて、夫々の値管理テーブルへのポインタ配列の先頭から順に夫々の項目値番号ｑ１及びｑ２を取り出し、これにより、２次元配列の１個の要素Ｐ（ｑ１，ｑ２）を特定し（ステップ１９４）、特定された要素Ｐ（ｑ1 ，ｑ2 ）の値を１だけ増加させる（ステップ１９６）。
値管理テーブルへのポインタ配列から全ての項目値番号（即ち、レコード総数個の項目値番号）が取り出されたか否かを検査し（ステップ１９８）、未だ項目値番号が残されているときにはステップ１９４に戻り、さもなければ、集計処理を終了する。このとき、２次元のクロス表が完成している。
上記本発明の第７実施例では、図１の表形式データのレコード全体を対象として集計を行っているが、レコードの部分集合を対象として同様の集計、例えば、年齢１６歳の人の性別／職業別の存在数を集計することが可能である。そのため、最初に、年齢１６歳を検索条件として単一項目検索を行い、年齢１６歳に該当するレコードの識別情報を結果集合として取得、保持する。次に、既に、複数項目ＡＮＤ検索に関して説明しているように、この結果集合に含まれるレコード、即ち、レコードの部分集合を対象として、結果集合に含まれるレコードの識別情報を先頭から順次取り出し、レコードの識別情報に対応した項目値番号を値管理テーブルへのポインタ配列から取り出し、得られた項目値番号を２次元配列の行と列の座標とする要素の値のカウントを「１」ずつ加算すればよい。すなわち、この処理では、図４９に示すように、まず、図９に示すものと略同等の処理を実行して、レコードへのポインタが格納されたような結果集合が生成される（ステップ４９０１）。次いで、この結果集合を用いて、図２０と略同等の処理が実行される。ここでは、まず、図２０の処理と同様に、集計に利用される項目に関する第１及び第２の情報ブロックが保持され（ステップ４９０２）、次いで、初期的な２次元配列が生成される（ステップ４９０３）。
その後に、結果集合においてポインタの格納位置を示す番号（以下、場合によっては「格納位置番号」と称する）が初期化される（ステップ４９０４）。ＣＰＵ１００は、プログラムにしたがって、各格納位置番号に関して、第１及び第２の情報ブロックにおける値管理テーブルへの対応するポインタ配列を取り出され、２次元配列中の要素Ｐ（ｑ１、ｑ２）を特定し（ステップ４９０５）、次いで、その要素Ｐ（ｑ１、ｑ２）をインクリメントする（ステップ４９０６）。このような処理が、全ての格納位置番号に関して実行されることにより（つまり、結果集合中の前項目値番号に関して処理が施されることにより）、検索等により得られる部分集合に関するクロス集計をなすことができる。
次に、本発明の第８実施例につき説明を加える。この実施例においては、項目の項目値が幾つかのカテゴリに分類されている状況において、項目値の分類毎に存在数をカウントすることにより、クロス集計を実現している。例えば、図８に示された「職業」に関する情報ブロックを参照するに、「職業」には、「学生」、「プログラマ」、「教員」及び「その他」の４種類の項目値が登録されていることが分かる。この項目値に基づく分類を、新たな基準、例えば、収入の有無に従って、「所得者」、「無所得者」及び「不明」の３タイプに再分類した場合を想定する。本例では、この状況において、「収入の有無」という新しいカテゴリを作成し、性別／収入の有無による存在数のクロス集計を作成する。
図２１に示された「職業」に関する情報ブロックは、特に、「収入の有無」に基づいて各項目値番号毎に分類番号が付与された値管理テーブルを含む。本例では、学生には分類番号「１」（無所得）が割り与えられ、プログラマ及び教員には、分類番号「０」（有所得）、その他には、分類番号「２」（不明）が割り当てられている。
本発明の第８実施例にかかるクロス集計は、原則として第７実施例にかかるクロス集計と略同様の処理手順を有するが、集計データを格納する２次元配列の要素を指定する座標として、性別に関する第１の情報ブロックの項目値番号と、職業に関する第２の情報ブロックの分類番号とを使用する点が相違する。
２次元配列の要素の座標として項目値番号又は分類番号の何れでも使用できるようにするため、本発明の第８実施例では、第１及び第２の情報ブロックについて、各値管理テーブルへのポインタ配列に格納された夫々の項目値番号を順次取り出し、値管理テーブルへのポインタ配列から取り出された項目値番号自体又はその項目値番号に対応して値管理テーブルに格納された分類番号の何れかにより、２次元配列の要素Ｐの座標を特定する。
上述した例では、第１の情報ブロックとして「性別」の情報ブロックが用いられ、第２の情報ブロックとして「職業」の情報ブロックが用いられる（図２０のステップ１９０参照）。次の処理ステップ（ステップ１９１）では、「性別」の情報ブロックには、２つの項目値番号が含まれ、その一方、「職業」の情報ブロックでは、３つの分類番号が含まれるため、２×３（２行３列）の初期的な２次元配列が生成される。
これに引き続く処理ステップでも、第１のブロックの項目値番号ｑ１と、第２のブロックの分類番号ｑ２とが取り出され、これにより２次元配列中の１つの要素Ｐ（ｑ１，ｑ２）が特定され、要素Ｐの値が増加されるようになっている（ステップ１９４、１９６参照）。
上記第７実施例及び第８実施例によるクロス集計は、特に、存在数を求める形の集計であるが、本発明は、複数項目別（たとえば、性別／職業別）に平均年齢を求めるようなクロス集計にも拡張され得ることに注意すべきである。第９実施例は、上述したタイプのクロス集計をなしたものである。
上記本発明の第７実施例の如く、２次元配列の要素を１ずつインクリメントすることにより実現される存在数を求めるタイプの集計方法は、平均年齢を求めるような存在数の総和以外の演算を要するタイプのクロス集計に拡張するために、図２２の動作フローチャートに示されるように変形される。
即ち、本発明の第９実施例によれば、集計のために２個の２次元配列が用いられ、第１の２次元配列に関しては、上記第７実施例と同様に性別／職業別の存在数をカウントし、第２の２次元配列に関しては、性別／職業別の年齢の総和を計算する。詳細に説明すると、
まず、性別、職業及び年齢の３個の項目について、第１、第２および第３の情報ブロックを記憶装置に保持する（ステップ２００）。
性別及び職業の項目値番号のそれぞれの総数「２」及び「４」に対応して、集計データを格納する２個の２×４（２行４列）の初期的な２次元配列を作成する（ステップ２０２）。
第１及び第２の情報ブロックの値管理テーブルへのポインタ配列の先頭から順に項目値番号ｑ1、ｑ2及びｑ3を取り出し、２次元配列の要素の座標（ｑ1，ｑ2）を特定し（ステップ２０４）、特定された第１の２次元配列の要素Ｐ1（ｑ1，ｑ2）の値を１ずつ増加する（ステップ２０６）。
さらに、「年齢」に関する情報ブロックについて、項目値番号ｑ3に対応した項目値（即ち、年齢）を取得し（ステップ２０８）、特定された第２の２次元配列の要素Ｐ2（ｑ1，ｑ2）の値に取得された年齢を加算する（ステップ２１０）。
このような処理の後に、対象となる全てのレコードが処理されたか否かを検査し（ステップ２１２）、処理されていない場合にステップ２０４に戻り、処理されている場合に、２次元配列Ｐ1と２次元配列Ｐ2の各要素の間で演算、即ち、Ｐ2（ｑ1，ｑ2）／Ｐ1（ｑ1，ｑ2）を算出する（ステップ２０６）。これにより、性別／職業別の平均年齢が得られ、平均のクロス集計表が作成される。
図２３（Ａ）は、上記本発明の第７実施例で得られるクロス集計表の概念図である。このように、上記第７実施例では、全ての性別／職業の組合せに関する存在数が集計される。しかし、図２３（Ｂ）に示される如く、性別／職業別の中で、例えば、特に、性別が女性で、職業が学生である人の存在数のみを知りたい場合がある。本発明によれば、この場合の存在数は、「女性」ＡＮＤ「学生」という複数項目ＡＮＤ検索の結果集合のサイズを求めることにより獲得される。
同様に、上記本発明の第９実施例では、全ての性別／職業の組合せに関して、平均年齢のクロス集計表を求めているが、特に、性別が女性で、職業が学生である人の平均年齢だけを求めることが可能である。その場合、「女性」ＡＮＤ「学生」という複数項目ＡＮＤ検索の結果集合のサイズから存在数を求めると共に、その結果集合に含まれるレコードの識別情報によって指定されるレコードに属する年齢を加算して年齢の総和を求め、（年齢の総和）／（存在数）を計算することにより平均年齢のクロス集計表における特定のセルに関する所望の値（たとえば、平均年齢）を求めることができる。
次に、本発明の第１０実施例につき説明を加える。図２４はマルチアンサ形式の項目を表す図であり、図２５は本発明の第１０実施例によるマルチアンサ項目対応型の情報ブロックの説明図である。マルチアンサとは、例えば、「今、机の上にある文房具は何ですか？」という質問に対する回答を得た場合に「鉛筆、消しゴム」又は「紙、鉛筆」のように同じ人から複数の回答が得られる状況を意味する。即ち、マルチアンサの場合、一つのレコードが一つの項目に関して複数の項目値を指定することが生じ得る。図２４は上記の質問に対し、１００万人から得た回答をそのまま一覧表にしたものである。
このようなデータを処理するため、本発明の第１０実施例によれば、図２５に示される如く、情報ブロックの値管理テーブルへのポインタ配列は、前述の項目値番号自体の配列と異なり、配列中のポインタに、項目値番号毎に１ビットが割り当てられている。したがって、レコードがその項目値番号を指定しているか否かをビットのオン／オフ（すなわち２進値）によって示すことができる。これにより、一つのレコードについて、一つの項目に含まれる複数の項目値を指定することが可能になる。たとえば、図２５において、ポインタ配列中のポインタ（ビットポインタ）は、４ビットであり、最上位ビットがオン（すなわち「１」）であるときに、「紙」という回答が含まれたことを意味し、２番目のビットがオンであるときには、「定規」という回答が含まれ、３番目のビットがオンであるときには、「消しゴム」という回答が含まれることを意味している。さらに、最下位ビットがオンであるときには、「鉛筆」という回答が含まれることを意味している。
レコード番号「０」に対応するポインタは「３」である。これは「２1＋２0」と考えることができる。したがって、このレコード番号に対応して、「鉛筆」および「消しゴム」という回答が含まれていたことが理解できる。また、レコード番号「１」およびレコード番号「２」に対応するポインタは、それぞれ、「４」、「１０」であり、これらは、それぞれ、「２2」および「２3＋２1」と考えることができる。したがって、これらレコード番号に対応して「定規」という回答、並びに、「消しゴム」および「紙」という回答が、それぞれ含まれることを知ることができる。
この実施例によれば、ポインタ値の各ビットに意味を持たせて、複数の項目値番号を示すことができるようになっている。したがって、レコードが複数の項目値を持つ場合であっても、ポインタ値によりこれを表現することが可能となる。
なお、本発明によれば、情報ブロックの一部分の構成を変形するだけでマルチアンサに容易に対応することができる点が有利である。実際上、このような変形を加えた情報ブロックに、上記本発明の種々の実施例で採用された情報ブロックを置き換えることができる。
次に、本発明の第１１実施例につき説明を加える。図２６は、本発明の第１１実施例に従って、集計処理の際に生じるブランク、エラー値等の特殊値の取扱方法を説明する図である。同図に示すように、第１１実施例においては、ブランクをカテゴリーの１つとみなしてクロス集計を実行している。実際のデータを取り扱う場合には、ブランクや、Log(-1) のような数学的なエラーが出現することがある。本発明によれば、このような特殊値（ブランク、エラー等）であっても、値管理テーブルに項目値として登録し、登録された特殊値をそのまま検索や集計のカテゴリーとして使用できる点が有利である。
次に、本発明の第１２実施例につき説明を加える。図２７に示された本発明の第１２実施例による複数項目検索方法の動作フローチャートを参照して遅延評価について説明する。本実施例では、本発明の第２実施例と同様に、図１に示した表形式データに関して「年齢」が「１６歳」又は「１９歳」であるという第１の検索条件と、「職業」が「学生」であるという第２の検索条件とを満たすレコードの集合を得る場合を考える。
上記本発明の第２実施例では、第２の検索条件に関して、全てのレコードの分類番号を予め設定しているが（図１２のステップ１２４）、第１２実施例の場合に、分類番号の設定は、第１の検索条件による検索の結果集合に基づいて実際にアクセスされた項目値番号に対応した分類番号だけに対して行われる。
既に説明したように、第１の項目である「年齢」に関する情報ブロックである第１の特定情報ブロックについて、「年齢」が「１６歳」又は「１９歳」であるレコードの結果集合は本発明の第１実施例に従って得られる（ステップ２２０）。
次に、図８に示されている第２の項目である「職業」に関する情報ブロックである第２の特定情報ブロックとして選択し（ステップ２２２）、第２の特定情報ブロックの値管理テーブルにおける全ての分類番号の値を例えば、「−１」に初期化する（ステップ２２４）。
次に、第１の検索条件に関する結果集合から、レコードへのポインタを表すレコード番号を順次取り出す（ステップ２２６）。本例の場合、図１４に示されるように、例えば、レコード番号「９９９９９９」が取り出される。
次に、第２の特定情報ブロックに関して、値管理テーブルへのポインタ配列から上記第１の検索条件について得られたレコード番号に対応した項目値番号を取り出す（ステップ２２８）。本例の場合、図１４に示されるように、例えば、レコード番号「９９９９９９」に対応した項目値番号「０」が取り出される。
次に、第２の特定情報ブロックについて取り出された項目値番号に対応する分類番号の値が「−１」であるか否かを検査する（ステップ２３０）。
分類番号が「−１」の場合には、当該項目値番号に対して未だ分類番号が設定されていないので、この項目値番号に対応した項目値が上記第２の検索条件に合致するかどうかを判定し（ステップ２３２）、合致する場合には、分類番号として「１」を設定し（ステップ２３４）、合致しない場合には、分類番号として「０」を設定する（ステップ２３６）。
分類番号の値が「−１」ではない場合、上記取り出された項目値番号に対応する分類番号の値が「１」に設定されているかどうかを判定する（ステップ２３８）。分類番号の値が「１」に設定されている場合、値管理テーブルへのポインタ配列内で、分類番号が「１」にセットされている当該項目値番号を指すポインタが格納されている場所に対応したレコードへのポインタ、例えば、レコード番号を最終的な結果集合に追加する（ステップ２４０）。本例では、図１４に示されているように、例えば、レコード番号「９９９９９９」が最終的な結果集合に追加される。分類番号が「０」である場合には、最終的な結果集合は更新されない。
上記第１２実施例のような遅延評価は、以下のような場合に有効である。たとえば、１００万人の顧客名簿が存在し、実態調査のためのヒヤリングを実現したいが、都合により、１００人のサンプルを抽出する場合を考える。たとえば、所定の条件（性別、年齢、職業など）を満たす人を絞り込んだところ、１万人にすることができ、さらに、無作為性を確保するために電話番号の末尾をある数（たとえば、「１２」）として検索を行われるとする。
この場合に、第１２実施例においては、まず、「分類番号配列」の要素を「−１」で埋めて、上記１万人の集合のみを評価する。つまり、１万人というサイズの結果集合について、その分類番号配列の要素を参照し、それが「−１」であれば、そのとき初めて電話番号を参照するように構成し、参照結果が「分類番号配列」の要素として与えられる。これにより、チェックの回数を１万回に抑えることが可能となる。このようにして、第１２実施例によれば、通常のＡＮＤ検索と比較して、処理ステップ数を大幅に減少させることが可能となる。
また、本発明にかかる情報ブロックを用いれば、電話番号のように「国番号＋市外局番＋局番＋番号」のような構造を持つデータを複数の情報ブロックに分割して登録することにより、国番号、市外局番等の一部のデータに関する検索・集計が容易に行える利点が得られる。
また、既に説明した本発明の実施例による分類番号を利用することにより、例えば、年齢に関して、「１０〜１９歳」を「１０代」とし、「２０〜２９歳」を「２０代」とし、以下同様に取りまとめて新たなカテゴリー区分を生成することができ、かつ、生成された新しいカテ。ゴリーに関して、前述と同様の検索・集計方法を適用できる。
前述したように、本発明の実施例にかかる検索・集計方法を実現する装置は、図２８に示す一般的なコンピュータシステム、例えば、ＣＰＵ１００と、ＲＯＭ１１０と、ＲＡＭ１２０と、ハードディスク１３０と、ディスプレイ１４０のような出力装置と、ＫＢ／マウス１５０等の入力装置とがバス１６０を介して接続されているパーソナルコンピュータ上に実装することが可能である。したがって、前述したように、上記実施例を実現するための情報ブロックの構築するためのプログラム（情報ブロック生成プログラム）も、ＣＤ−ＲＯＭやＲＯＭ１１０、ハードディスク記憶装置１３０に記憶されてもよいし、或いは、ネットワーク（図示せず）を介して外部から供給されてもよい。
図２９に示されたフローチャートを参照して、一例として図２（Ｂ）に示された表形式データに対し、図５に示された形式の情報ブロックを構築する方法を以下に説明する。
ステップ３００：データの準備
まず、図２（Ｂ）に示す形態のデータを用意する。次に、これを項目毎に分解する。図２（Ｂ）では、「性別」、「年齢」及び「職業」の項目に分解することができる。
ステップ３１１：「性別」項目用の情報ブロックの生成
１つの情報ブロックを生成し、これを、例えば、「性別」項目の情報ブロックとする。
ステップ３１２：値管理テーブルの作成
次に、値管理テーブルを初期化し、「性別」項目データを先頭から末尾まで走査することで、どのような項目が何件あるかを数えて格納する。本例の場合、ここまでのステップで、上記値管理テーブルの項目値配列１１には、項目値として「女性」及び「男性」がセットされ、上記値管理テーブルの存在数配列１４には、上記項目値に対応して、それぞれ、「３６７４３６」および「６３２５６４」がセットされることになる。
次に、項目値配列１１中の項目値（「女性」及び「男性」）を所望の基準に従ってソートする。もちろん、そのソートの際には、存在数配列１４も、項目値配列１１のソートに伴って、並び替えられなければならない。
さらに、値管理テーブルの開始位置配列１３中の開始位置をセットする。この開始位置は、値管理テーブル内の存在数配列１４における最初の存在数から、該開始位置に対応する存在数の累計として求められる。もちろん、先頭の開始位置の値は、「０」である。
次に、開始位置配列１３の内容を、分類番号配列１２にコピーする。分類番号配列１２は、後程、レコードへのポインタ配列を作成する際の作業領域として使用する。
ステップ３１３：値管理テーブルへのポインタ配列の作成
次に、値管理テーブルへのポインタ配列２０のための領域を確保する。（領域のサイズは、上記存在数配列１４における存在数の総和である。）
さらに、「性別」項目データを先頭から末尾まで、項目値を１つずつ取り出し、各項目値が、値管理テーブルの何番目の項目値と一致するかを調べ、「ｎ」番目の項目値であった場合、「ｎ−１」を値管理テーブルへのポインタとして上記値管理テーブルへのポインタ配列に格納する。
ステップ３１４：レコードへのポインタ配列の作成
次に、レコードへのポインタ配列３０のための領域を確保する。本例では、領域のサイズは、上記存在数配列１４における存在数の総和である。値管理テーブルへのポインタ配列２０において、先頭の行から末尾の行まで、１つずつ値管理テーブルへのポインタを取り出す。値管理テーブルへのポインタ配列２０の「Ｊ」番目の値を取り出し、その値が「Ｋ」であり、値管理テーブルの「Ｋ＋１］番目のレコードに対応する分類番号を取り出し、その値が「Ｌ」であったとすると、レコードへのポインタ配列３０の「Ｌ＋１」番目の要素に「Ｊ−１」を格納し、値管理テーブルの「Ｋ＋１」番目のレコードに対応する分類番号を１だけ増加させる。
以上の操作で、「性別」項目の情報ブロックの作成が完了した（ステップ３１０）。「年齢」項目、「職業」項目も同様に情報ブロックを作成することができ（ステップ３２０及びステップ３３０）、これにより、表形式データの全体に対する情報ブロックが得られる。
図３０ないし図３５は、図１に示された表形式データの「職業」に関する情報ブロックを作成する手順の説明図である。
図３０には、属性値の種類が予め分かっているカテゴリー定義済みの場合の新規データ投入を示す図である。ここでは、既知のカテゴリー定義に従って、値管理テーブルが作成される。開始位置、存在数は不明であるため、「０」に初期化される。また、値管理テーブルへのポインタ配列、レコードへのポインタ配列の為の領域を確保し、これらも同様に初期化しておく。
図３１には、値管理テーブルへのポインタ配列と、値管理テーブルの存在数を完成させるパスが示されている。投入したいデータを先頭からひとつずつ取りだし、それが値管理テーブルの何番目の値であるか（即ち、項目値番号）を調べ、値管理テーブルへのポインタ配列に格納し、値管理テーブル中の対応する存在数を「＋１」ずつ更新する。図３１の例は、投入データの上から２番目までの処理が終わった状態を示している。
図３２には、値管理テーブルを完成させる第２のパスが示されている。存在数の累計は開始位置に対応することを利用して、開始位置が求められる。さらに、分類番号には開始位置の値がコピーされる。同図では分類番号の設定が終了している。
図３３ないし図３５には、データ投入の第３のパスが示されている。このパスは、値管理テーブルへのポインタ配列の先頭から１つずつ値(ポインタ)を取りだし、その値が参照する値管理テーブル内の分類番号により特定されるレコードへのポインタ配列中の位置に、値管理テーブルへのポインタ配列のオフセット、即ち、レコード番号を格納する。図３３、３４及び３５には、夫々、「職業」に関する情報ブロックの値管理テーブルへのポインタ配列の先頭、２番目及び最後のデータについての処理が示されている。
なお、上記説明では、分類番号のフィールドが作業領域として使用されているが値管理テーブルの行数、即ち、項目値番号の総数と同数以上の要素を持つ整数配列であればいかなる配列でも作業領域として使用することができる。
一方、予めカテゴリー定義がなされていない場合の新規投入は、投入データを走査して値管理テーブルに登録すべき値の一覧を獲得した後、上記のカテゴリー定義がある場合の新規投入の処理を行うことにより実現される。
次に、図３５に示されるような新規投入が完了した後の「職業」に関する情報ブロックに対し、「学生」という別のデータを追加する場合を考える。図３６はかかるデータ追加を説明する図である。
この場合、最初に、値管理テーブルへのポインタ配列の末尾に「学生」を表す項目値番号０を追加し、値管理テーブルの中の学生の存在数を「１」だけ増やす。次に、値管理テーブルへのポインタ値（＝１００００００）、即ち、レコード番号を格納するための領域をレコードへのポインタ配列内に確保する必要がある。そのため、レコードへのポインタ配列の中の「学生」に対応した領域の末尾の値（本例では、９９９９９９）を取り出し、そこに、拡張先のアドレスである「１００００００」を格納する。但し、拡張先のアドレスであることが識別できるように、例えば、符号を反転させて、「−１００００００」として格納する。続いて、拡張先に先に取り出された末尾の値である「９９９９９９」を格納し、最後に、新たに追加されたデータに対応したポインタ値「１００００００」を格納する。
このような追加方法を採用すると、データを追加する際に大量のデータを移動させる必要が回避される。また、多数のデータ追加が行われた場合に、ポインタの数が増加することに起因したアクセスの効率低下を抑えるために、適当なタイミングで新規投入の第３のパスと同じ処理を繰り返しても良い。
図３７には、本発明の他の実施例による情報ブロックの構造が示されている。同図に示された構造を採用した場合、ポインタの数の増加は回避され容易にデータ変更を行うことが可能である。図３７において、開始位置配列には、レコードへのポインタ配列が配置されている領域の先頭を示すアドレスが格納されている。たとえば、「学生」という項目値に関しては、開始位置として「０」が格納されている。その一方、「プログラマ」という項目値に関しては、開始位置として「ｎ（ただし、ｎ＞４５５２１４）」という値が割り当てられている。
次に、本発明の第１３実施例につき説明を加える。この実施例では、上記情報ブロックを用いたレコードのソートを実現している。図３８には「職業」という項目に関するレコードのソートの初期状態が示されている。同図に示された原データはソートされるべきレコード番号の配列を表す。例えば、「職業」以外の項目について得られたレコードへのポインタ配列、或いは、検索の結果集合が原データとして利用され得る。本例の場合、説明の便宜上、原データのレコード番号は、“０，１，２，．．．，９”の順番に配列されているが、一般にソート前のレコード番号の並びは乱雑であることに注意する必要がある。各レコード番号に対応した「職業」の項目値が“教員，プログラマ，学生，．．．，その他”のように順番に配列されている。
同図の右側には、「職業」に関する情報ブロックに含まれる種々の配列の初期状態が示されている。「職業」に関する情報ブロックは、例えば、図２９ないし図３５を参照して説明した情報ブロックの構築方法に従って作成されている。「職業」に関するレコードのソートを行うとき、予め作成された「職業」に関する情報ブロックの値管理テーブル、及び、値管理テーブルへのポインタ配列が利用される。開始位置として、情報ブロックの構築の際に設定された開始位置がそのまま使用される。終了位置には対応する開始位置の値がコピーされている。終了位置を格納する領域は、例えば、存在数のために確保された領域（存在数配列）を用いても構わない。値管理テーブルへのポインタ配列は、例えば、レコード番号順に予め作成されている。本例の場合、原データのレコード番号の配列がレコード番号の昇順であるため、原データのレコード番号と、値管理テーブルへのポインタ配列とのつながりは単純な関係で示されている。また、レコードへのポインタ配列は、ソートされた結果集合を格納するための配列であり、ソートされるデータと同じサイズが確保される。上記終了位置は、レコードへのポインタ配列にソートされた結果を格納するためのアドレスとして使用される。
図３９は、本発明の第１３実施例によるソートの第１ステップの状態を説明する図である。第１ステップでは原データの先頭のレコード（本例では、レコード番号＝０）が処理される。レコード番号「０」のレコードの項目「職業」に関する項目値は「教員」である。このとき、レコード番号「０」に対応した値管理テーブルへのポインタ配列には、項目値「教員」を指定する項目値番号「２」が格納されている。そこで、項目値番号「２」に対応した終了位置の値「５」を取り出し、この値「５」をアドレスとして、ソートされた結果集合が格納されるレコードへのポインタ配列の５番目に、当該レコード番号「０」を設定する。次に、当該項目値番号「２」に対応した終了位置の値は「＋１」され、「５」から「６」に増加する。
図４０は、本発明の第１３実施例によるソートの第２ステップの状態を説明する図である。第２ステップでは原データの２番目のレコード（本例では、レコード番号＝１）が処理される。レコード番号「１」のレコードの項目「職業」に関する項目値は「プログラマ」である。このとき、レコード番号「１」に対応した値管理テーブルへのポインタ配列には、項目値「プログラマ」を指定する項目値番号「１」が格納されている。そこで、項目値番号「１」に対応した終了位置の値「３」を取り出し、この値「３」をアドレスとして、ソートされた結果集合が格納されるレコードへのポインタ配列の３番目に、当該レコード番号「１」を設定する。次に、当該項目値番号「１」に対応した終了位置の値は「＋１」され、「３」から「４」に増加する。
以下、原データの残りのレコード番号“２，３，４，５，６，７，８，９”に対し、上記第１又は第２ステップと同じ動作を繰り返し適用する。かくして得られたソートの最終状態が図４１に示されている。同図のソートされた結果集合かから判るように、本発明の第１３実施例によるソートの結果として、レコードは、「職業」に関する項目値番号の順にソートされ、レコード番号“２，４，６，１，７，０，３，５，８，９”の順に並べ換えられている。
上記第１３実施例の説明では、原データが元の表形式データの全てのレコードを含む場合、即ち、全体集合を想定している。しかし、本発明によるソートは、一部のレコード、即ち、部分集合に対しても有効である。以下、図４２及び図４３を参照して部分集合に対するソートを説明する。
図４２には、部分集合の全要素に対し、上記のソート処理が完了した状態を示す図である。本例の場合、原データは、「職業」についての項目値が「教員」であるレコード番号「０」のレコードと、項目値が「プログラマ」であるレコード番号「１」のレコードが原データとして与えられている。これら両方のレコードに対しソート処理を適用すると、同図のソートされた結果集合に示されるようなソート結果が得られる。この時点では、結果集合はレコードへのポインタ配列に格納されている。したがって、部分集合のソート結果を格納するため全体集合と同じサイズの領域が確保されている。
そこで、部分集合に対するソートの場合、結果集合を部分集合と同じサイズに圧縮することが好ましい。図４３には、かかる部分集合に対するソートの後処理が示されている。この後処理、即ち、結果集合の圧縮は、値管理テーブルの各項目値に関する開始位置と終了位置の差から、当該項目値に対応したソート結果の存在数及び格納位置を取得し、取得された存在数及び格納位置に基づいてソート結果を取り出して並べる。
上記全体集合或いは部分集合に関するソート処理につき、再度、図５０のフローチャートを利用して一般的な説明を加える。ここでは、全体集合および部分集合の何れの場合にも、原データには、先頭から順番に、格納位置番号が付与されていると考える。たとえば、図３８および図４１では、格納位置番号はレコード番号と一致する。しかしながら、原データの並び順が、レコード番号にしたがっていない場合には、格納位置番号とレコード番号とは相違する。なお、上記実施例に関して具体的に説明したソート処理等が、ＣＰＵ１００が所定の領域に格納されたプログラムを実行することにより実現できることは言うまでもない。
ソート処理においては、まず、格納位置番号が初期化される（ステップ５００１）。次いで、ある格納位置番号に関して、値管理テーブルへのポインタ配列中の対応するポインタが参照され（ステップ５００２）、当該ポインタの指定する項目値番号に位置する終了位置の値が特定される（ステップ５００３）。
その後に、上記終了位置にて特定される、レコードへのポインタ配列中の位置に、対応するレコード番号が格納される（ステップ５００４）。その後、ステップ５００３において特定された終了位置の値がインクリメントされる(ステップ５００５)。上記ステップ５００２ないしステップ５００５の処理は、全ての原データに関して施され（ステップ５００６、５００７参照）、これにより、所定のレコード番号が配置されたレコードへのポインタ配列を得ることができる。図３９の例は、図５０の処理のうち、格納位置番号が「０」である場合のステップ５００２〜ステップ５００５に対応することが理解でき、かつ、図４０は、格納位置番号が「１」である場合のステップ５００２〜ステップ５００５に対応することが理解できるであろう。
また、部分集合に対するソート処理の場合には、ステップ５００１〜ステップ５００７が実行された後に、ソートの後処理（ステップ５００８参照）により、結果集合を圧縮すればよい。
上記本発明の第１３実施例によるソートは、所謂「昇順」のソートであり、即ち、ソート結果は、ソートされる項目値の項目値番号が増加する順に並べられている。しかし、ソート結果は、「降順」、即ち、ソートされる項目値の項目値番号が減少する順に並べることもできる。「降順」ソートは、「昇順」ソートの場合に使用された開始位置を修正することにより実現される。本例の場合、「昇順」ソートの開始位置は、
学生        ０
プログラマ  ３
教員        ５
その他      ６
である。これに対し、「降順」ソートの開始位置は、
その他        ０
教員        １０−６＝４
プログラマ  １０−５＝５
学生        １０−３＝７
のようになる。
このような本発明の第１３実施例にしたがったソートによれば、以下の利点が得られる。
第１に、高速ソートが実現される。例えば、Pentium Pro（登録商標）200MHz/Windows95（登録商標）という動作環境において、本発明による新規のソートは、１００万件当たりのソート時間が１４５ｍｓｅｃであった。その一方、従来のクイックソートの場合、１００万個の整数をソートするため要する時間は１５３０ｍｓｅｃであった。
第２に、値として格納される項目値の種類にかかわらず一定の性能が得られる。本ソートによれば、例えば、項目値のデータ型が文字列型若しくは浮動小数点型であっても、整数型の場合と変わらない性能を得ることができる。これに対し、従来のクイックソートなどの方式の場合、取り扱うデータが整数型である場合に最も高速であり、可変長の文字列型である場合に最も遅くなる。
第３に、データサイズが増加してもソート速度が低下しない。本ソートでは、ソートの速度は、データサイズをｎとして、Ｏ（ｎ）で表される。一方、従来の、例えば、クイックソートのような高速ソート法では、ソートの速度は、Ｏ（ｎ・ｌｏｇ（ｎ））である。
第４に、複数項目のソートを項目毎のソートに分割することができる。例えば、図３８ないし図４１を参照して説明した本発明の第１３実施例において、原データ中、同じ項目値「学生」に対応したレコードは、レコード番号「２」、レコード番号「４」及びレコード番号「６」の順に並べられている。そして、最終的なソートされた結果集合において、このレコード番号の並び順（即ち、レコード番号「２」、レコード番号「４」及びレコード番号「６」）が保存されている。これは、ソートされた結果のレコードの並び順は、ソート前のレコードの並び順をソートの目的を満たす範囲内で反映していることを意味する。このような本ソートの特徴を利用することにより、項目毎のソートを順番に行うことにより、複数の項目のソートが実現される。これに対し、従来のクイックソートでは、ソート結果の並び順にソート前の状態は反映されないことが知られている。
具体例
上記本発明の各種実施例において、値管理テーブルには、項目値に関する値リストが与えられている。例えば、図７に示された例では、項目値の列には、「１６歳」、「１７歳」、「１８歳」，．．．という値を有するリストが存在する。また、値管理テーブルには、項目値番号毎に分類番号が設けられている。以下、このような項目値に関する値リストと分類番号との組合せが、ある項目に関する多数の値に対して、少数回の比較判断によって検索条件の可否を直ちに決定できることを示す具体例を、以下に説明する。
例えば、値リストとして、値の大きさに関してソートされた以下のリスト：
０．１，０．２，  ・・・，
１００．０，１００．１，１００．２，  ．．．，
１０００．０
が与えられ、検索条件として、例えば、「値が１００より大」が与えられた場合を想定する。
最初に、条件を満たさない最小の値（本例では、１００）を値リストから探す。そして、最小の値、即ち、「１００」よりも前にある値リスト中の値に対応した分類番号をすべて「０」にセットする。また、「１００」よりも後にある値リスト中の値に対応した分類番号をすべて１にセットする。これにより、最小の値を探し出すことができれば、それ以降、いっさいの比較演算を行うことなく分類番号がセットされ、検索条件を満たす値を有する項目値若しくは項目値番号が得られる。
最小の値は、従来技術において公知である２分法等の方法を用いることにより少数回の比較演算で見つけることができる。例えば、値リスト中に存在する値のバリエーションがＮ個であるとすると、２分法によって上記の最小の値を見つけるために要する比較演算の回数は、ｌｏｇ２（Ｎ）回程度である。
一方、値リストが値の大きさに関してソートされていない場合、同様に値リスト中に存在する値のバリエーションがＮ個あるとき、検索条件を満たす値を見つけるためにはＮ回の比較演算が必要とされる。
このように、値管理テーブルにおいて、値リストがソートされ、かつ、分類番号が設けられることにより、所定の検索条件の可否の決定が高速化される。
また、当業者には当然に理解されるように、上記の値リストの内容、並びに、検索条件は本例を説明するための具体的な一例に過ぎず、本発明によれば、種々の値リスト、並びに、種々の検索条件の組合せについても同様に検索条件の可否の決定が高速化される。
次に、１００万件のデータの検索・集計のテストについて説明する。テストに使用したプラットフォームは、Pentium Pro（登録商標）200MHzと、128MBメモリを搭載した一般的なパーソナルコンピュータである。図４４はテストに使用したデータの一覧を示す図表である。「００００００」〜「９９９９９９」までの１００万個の数字を、１００００の単位，１００の単位，１の単位の３項目に分解した表形式データである。各項目に「００」〜「９９」までの項目値が１万回ずつ出現する。
図４５は、１００万件の検索／集計に要する時間を使用した結果集合のタイプ毎に測定した測定結果の一覧である。結果集合のタイプは、上記のビットフラグ形式とポインタ配列形式の２種類である。測定結果の時間はミリ秒（１／１０００秒）単位である。
上記テストで行った検索は、「×１万」、「×１００」、「×１」の３項目をＡＮＤ条件で接続した複数項目ＡＮＤ検索である。検索は、「×１万」、「×１００」、「×１」の項目順にカスケードした。検索の中間及び最終の結果集合は、上記の通りビットフラグ又はポインタ配列のいずれかの形式である。測定時間は５回の測定の平均である。
また、上記テストの集計は、検索のテストにより得られた結果集合に対して、「×１００」、「×１」の各値（００〜９９）が出現した回数の計数である。このクロス集計の表のサイズは、（１００×１００＝）１万セルである。時間は全てミリ秒単位であり、５回の測定の平均を測定時間とした。
また、表形式データの検索・集計システムの構成は、上記の実施例で説明された例に限定されることなく、検索・集計システムの各々の構成要件をソフトウェア（プログラム）で構築し、ディスク装置等に格納しておき、必要に応じて検索・集計システムのコンピュータにインストールして表形式データの検索・集計を行うことも可能である。さらに、構築されたプログラムをフロッピーディスクやＣＤ−ＲＯＭ等の可搬記憶媒体に格納し、このようなシステムを用いる場面で汎用的に使用することも可能である。
本発明は、以上の実施の形態に限定されることなく、特許請求の範囲に記載された発明の範囲内で、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
たとえば、上記第２実施例に示すＡＮＤ検索およびＯＲ検索においては、２種の項目に関する検索を実行しているが、これに限定されるものではなく、３以上の複数種の項目に関する検索も実現できることは明らかである。
また、上記第７実施例および第８実施例においては、２種の項目に関する集計のために、２次元配列を生成しているが、これに限定されるものではなく、３種以上の項目に関する集計のために、３次元以上の多次元配列を生成し、これを利用して上記集計が可能であることはいうまでもない。３種の項目に関する集計を考えると、３つの情報ブロックの各々における項目値番号ｑ１、ｑ２、ｑ３を取り出し、これにより、３次元配列の一個の要素Ｐ（ｑ１、ｑ２、ｑ３）が特定される。
さらに、上記第９実施例に関しても、第７実施例および第８実施例と同様に、３種以上の項目に関する集計をなすことができることは言うまでもない。
また、上記実施の形態においては、一般のコンピュータシステム内に、所定のプログラムを読み込み、当該プログラムを実行することにより、検索処理、集計処理および／またはソート処理を実現しているが、本発明はこれに限定されるものではなく、パーソナルコンピュータ等のような一般のコンピュータシステムに、データ処理専用のボードコンピュータを接続し、当該ボードコンピュータが上記処理を実行できるように構成しても良いことは言うまでもない。したがって、本明細書において、手段とは必ずしも物理的手段を意味するものではなく、各手段の機能が、ソフトウェアによって実現される場合或いはその一部または全部がハードウェアにより実現される場合を包含する。さらに、一つの手段の機能が、二つ以上の物理的手段により実現されても、若しくは、二つ以上の手段の機能が、一つの物理的手段により実現されてもよい。上記の説明の通り、本発明によれば、表形式で表現される大量のデータを、アクセスに時間がかかる従来のデータ表を用いることなく処理することができるので、集計・検索のスピードを大幅に向上させることができる。
産業上の利用分野
本発明は、特に、大量のデータを管理するシステム、たとえば、データベース、データウェアハウスに利用することができる。より具体的には、大規模な科学技術計算、プラントや電力供給などの制御システム、配送や資源分配等の計画法、受発注管理や証券取引などの事務管理に利用可能である。
【図１】
0003581831.tif 000002
【図２】
0003581831.tif 000003
【図２８】
0003581831.tif 000004
【図３】
0003581831.tif 000005
【図４】
0003581831.tif 000006
【図５】
0003581831.tif 000007
【図６】
0003581831.tif 000008
【図７】
0003581831.tif 000009
【図８】
0003581831.tif 000010
【図９】
0003581831.tif 000011
【図１０】
0003581831.tif 000012
【図１１】
0003581831.tif 000013
【図１２】
0003581831.tif 000014
【図１３】
0003581831.tif 000015
【図１４】
0003581831.tif 000016
【図１５】
0003581831.tif 000017
【図１６】
0003581831.tif 000018
【図１７】
0003581831.tif 000019
【図１８】
0003581831.tif 000020
【図１９】
0003581831.tif 000021
【図２０】
0003581831.tif 000022
【図２１】
0003581831.tif 000023
【図２２】
0003581831.tif 000024
【図２３】
0003581831.tif 000025
【図２４】
0003581831.tif 000026
【図２６】
0003581831.tif 000027
【図２５】
0003581831.tif 000028
【図２７】
0003581831.tif 000029
【図２９】
0003581831.tif 000030
【図３０】
0003581831.tif 000031
【図３１】
0003581831.tif 000032
【図３２】
0003581831.tif 000033
【図３３】
0003581831.tif 000034
【図３４】
0003581831.tif 000035
【図３５】
0003581831.tif 000036
【図３６】
0003581831.tif 000037
【図３７】
0003581831.tif 000038
【図３８】
0003581831.tif 000039
【図３９】
0003581831.tif 000040
【図４０】
0003581831.tif 000041
【図４１】
0003581831.tif 000042
【図４２】
0003581831.tif 000043
【図４３】
0003581831.tif 000044
【図４４】
0003581831.tif 000045
【図４５】
0003581831.tif 000046
【図４７】
0003581831.tif 000047
【図４６】
0003581831.tif 000048
【図４８】
0003581831.tif 000049
【図４９】
0003581831.tif 000050
【図５０】
0003581831.tif 000051