(57)【要約】【課題】ＳＱＬ構文のＩＮ検索のような複数の検索値を持つ検索を短時間で実行することができるデータ検索方法を提供すること。【解決手段】フラグ配列確保機能２１ａは、検索対象項目について、項目値テーブルの各項目値に対応した同数のフラグ配列を確保する。検索値ソート機能２１ｂは、検索キーとして与えられた複数の検索値を昇順にソートする。比較機能２１ｃは、ソートされた検索値を先頭から順に取り出し、項目値テーブルの先頭の項目値から順に比較する。そして、項目値が検索値に一致する場合には当該項目値に対応するフラグを立てて次の検索値と次の項目値とを比較し、一致しない場合には当該検索値と次の項目値とを比較する。検索結果出力機能２１ｄは、インデックス値テーブルを順にスキャンし、各インデックス値毎に対応する項目値のフラグを確認してフラグが立っている場合に当該インデックス値が格納されたレコードの情報を検索結果集合に追加し、全件スキャン後に検索結果集合をサブセットとして出力する。【選択図】図１
2008250546.tif 000002
【特許請求の範囲】
【請求項１】
複数の項目について各項目に対応する項目値を有するレコードの配列を、項目毎に、ユニークな項目値をソートした配列である項目値テーブルと、レコードの配列順に当該レコードの項目値が格納されている前記項目値テーブル内の位置を記録した配列であるインデックス値テーブルとに分解して管理するデータ構造におけるデータ検索方法において、
コンピュータが、
検索対象項目について、前記項目値テーブルの各項目値に対応したフラグ配列を確保するフラグ配列確保手順、
検索値をソートする検索値ソート手順、
ソートされた検索値を先頭から順に取り出し、項目値テーブルの先頭の項目値から順に比較し、項目値が検索値に一致する場合には当該項目値に対応するフラグを立てて次の検索値と次の項目値とを比較し、一致しない場合には当該検索値と次の項目値とを比較する比較手順、
前記インデックス値テーブルを順にスキャンし、各インデックス値毎に対応する項目値のフラグを確認してフラグが立っている場合に当該インデックス値が格納されたレコードの情報を検索結果集合に追加し、全件スキャン後に検索結果集合を出力する検索結果出力手順、
を実行することを特徴とするデータ検索方法。
【請求項２】
前記フラグ配列確保手順から検索結果出力手順までの各手順は、複数の検索値をパラメータとして、いずれかの検索値に該当するレコードを結果集合として出力するＳＱＬ構文のＩＮ検索に対する処理として実行されることを特徴とする請求項１に記載のデータ検索方法。
【請求項３】
複数の項目について各項目に対応する項目値を有するレコードの配列を、項目毎に、ユニークな項目値をソートした配列である項目値テーブルと、レコードの配列順に当該レコードの項目値が格納されている前記項目値テーブル内の位置を記録した配列であるインデックス値テーブルとに分解して管理するデータ構造におけるデータ検索プログラムにおいて、
コンピュータを、
検索対象項目について、前記項目値テーブルの各項目値に対応したフラグ配列を確保するフラグ配列確保手段、
検索値をソートする検索値ソート手段、
ソートされた検索値を先頭から順に取り出し、項目値テーブルの先頭の項目値から順に比較し、項目値が検索値に一致する場合には当該項目値に対応するフラグを立てて次の検索値と次の項目値とを比較し、一致しない場合には当該検索値と次の項目値とを比較する比較手段、
前記インデックス値テーブルを順にスキャンし、各インデックス値毎に対応する項目値のフラグを確認してフラグが立っている場合に当該インデックス値が格納されたレコードの情報を検索結果集合に追加し、全件スキャン後に検索結果集合を出力する検索結果出力手段、
として機能させることを特徴とするデータ検索プログラム。
【請求項４】
複数の項目について各項目に対応する項目値を有するレコードの配列を、項目毎に、ユニークな項目値をソートした配列である項目値テーブルと、レコードの配列順に当該レコードの項目値が格納されている前記項目値テーブル内の位置を記録した配列であるインデックス値テーブルとに分解して管理するデータ構造におけるデータ検索装置において、
検索対象項目について、前記項目値テーブルの各項目値に対応したフラグ配列を確保するフラグ配列確保手段と、
検索値をソートする検索値ソート手段と、
ソートされた検索値を先頭から順に取り出し、項目値テーブルの先頭の項目値から順に比較し、項目値が検索値に一致する場合には当該項目値に対応するフラグを立てて次の検索値と次の項目値とを比較し、一致しない場合には当該検索値と次の項目値とを比較する比較手段と、
前記インデックス値テーブルを順にスキャンし、各インデックス値毎に対応する項目値のフラグを確認してフラグが立っている場合に当該インデックス値が格納されたレコードの情報を検索結果集合に追加し、全件スキャン後に検索結果集合を出力する検索結果出力手段と、
を備えることを特徴とするデータ検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータを用いた大規模なデータベースにおけるデータ検索方法、プログラム及び装置に関し、特に、複数の検索値を用いた検索の高速化に関する。
【背景技術】
【０００２】
大規模なデータベースには、多数のデータを表形式で管理し、複数の表を関連付けて運用するリレーショナルデータベース(ＲＤＢ)が従来から用いられている。ＲＤＢはトランザクション処理に向いているため、各種の基幹システムに用いられているが、全件のソートや更新、検索といった処理には時間がかかる。
【０００３】
このようなＲＤＢの弱点を克服するため、特許文献１には、成分分解法によるＦＡＳＴ(Filter Array Structure)構造が開示されている。ＦＡＳＴ構造では、表形式のレコードの配列であるデータを順序、位置、値の成分に分解して管理することにより、全件を対象とした処理の高速化を可能としている。
【０００４】
【特許文献１】特許第３５８１８３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記のＦＡＳＴ構造を採用したデータベースにおいても、ＳＱＬ構文のＩＮ検索の実行には時間がかかるという問題がある。ＩＮ検索は、複数の検索値をパラメータとして、いずれかの検索値に該当するレコードを結果集合として出力する処理である。例えば検索値がValu1, Value2, Value3の３つであると仮定すると、従来の処理では、以下のような手順で処理が実行される。
1) 全件を対象に検索対象項目の値が検索値Value1に一致するレコードを抽出して第１の検索結果サブセットを生成する。
2) 全件を対象に検索対象項目の値が検索値Value2に一致するレコードを抽出して第２の検索結果サブセットを生成する。
3) 第１、第２の検索結果サブセットをＯＲ演算して第１のＯＲサブセットを生成する。
4) 全件を対象に検索対象項目の値が検索値Value3に一致するレコードを抽出して第３の検索結果サブセットを生成する。
5) 第１のＯＲサブセットと第３の検索結果サブセットとをＯＲ演算して第２のＯＲサブセットを生成する。
【０００６】
上記の方法では、全件検索が検索値の数と同回数、ＯＲ演算がそれより１回少ない回数必要になり、演算量が莫大となるため時間がかかり、かつ、検索毎、ＯＲ演算毎にサブセットが作成されるため、オンメモリ処理の場合にはメモリの消費量が多く、ディスク上で処理される場合にはディスク容量を消費しアクセスのための時間がかかるという問題がある。
【０００７】
本発明は、上述した従来技術の問題点に鑑みてなされたものであり、例えばＳＱＬ構文のＩＮ検索のような複数の検索値を持つ検索を短時間で実行することができるデータ検索方法、プログラム及び装置を提供することを目的(課題)とする。
【課題を解決するための手段】
【０００８】
本発明にかかるデータ検索方法は、複数の項目について各項目に対応する項目値を有するレコードの配列を、項目毎に、ユニークな項目値をソートした配列である項目値テーブルと、レコードの配列順に当該レコードの項目値が格納されている項目値テーブル内の位置を記録した配列であるインデックス値テーブルとに分解して管理するデータ構造を前提として、コンピュータが、検索対象項目について、項目値テーブルの各項目値に対応したフラグ配列を確保するフラグ配列確保手順、検索値をソートする検索値ソート手順、ソートされた検索値を先頭から取り出し、項目値テーブルの先頭の項目値から順に比較し、項目値が検索値に一致する場合には当該項目値に対応するフラグを立てて次の検索値と次の項目値とを比較し、一致しない場合には当該検索値と次の項目値とを比較する比較手順、インデックス値テーブルを順にスキャンし、各インデックス値毎に対応する項目値のフラグを確認してフラグが立っている場合に当該インデックス値が格納されたレコードの情報を検索結果集合に追加し、全件スキャン後に検索結果集合を出力する検索結果出力手順を実行することを特徴とする。
【０００９】
フラグ配列確保手順から検索結果出力手順までの各手順は、具体的には、複数の検索値をパラメータとして、いずれかの検索値に該当するレコードを結果集合として出力するＳＱＬ構文のＩＮ検索に対する処理として実行される。
【００１０】
なお、本発明のデータ検索プログラムは、上記の方法の各手順に相当する手段としてコンピュータを機能させることを特徴とし、本発明のデータ検索装置は、そのように機能するコンピュータと等価である。
【発明の効果】
【００１１】
本発明によれば、検索値と項目値とを共に事前にソートすることにより、検索値と項目値との比較は項目値テーブルに対して１回実行すればよく、かつ、比較の結果をフラグとして記録することにより、全件に対するスキャンも１回で終了するため、複数の検索値を用いた検索を短時間で実行することができる。また、検索結果集合のサブセットも１組のみで足りるため、メモリやディスクの消費量を小さく抑えることができる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明にかかるデータ検索方法の実施形態を説明する。最初に、図１に基づいて本実施形態のデータ検索方法が適用されるシステムの概要を説明する。このシステム１は、単独のコンピュータ１０と、周辺機器とから構成されている。コンピュータ１０は、ＣＰＵ１１、並びにこのＣＰＵ１１に接続されたハードディスク(ＨＤ)２０、メモリ(ＲＡＭ)１２及びインターフェイス１３を備えている。
【００１３】
なお、コンピュータ１０のＣＰＵ１１には、周辺機器としてディスプレイ３０、プリンタ３１、キーボード３２がインターフェイス１３を介して接続されている。
【００１４】
ＨＤ２０には、図示せぬオペレーティングシステムの他、データ検索プログラム２１がインストールされると共に、検索対象データベース(ＤＢ)２２が構築されている。ＣＰＵ１１は、起動するとＨＤ２０からオペレーティングシステムをＲＡＭ１３上に読み出して実行し、このオペレーティングシステム上でデータ検索プログラム２１を実行する。
【００１５】
検索対象ＤＢ２２は、複数の項目について各項目に対応する項目値を有するレコードの配列を、項目毎に、ユニークな項目値をソートした配列である項目値テーブル２２ａと、レコードの配列順に当該レコードの項目値が格納されている項目値テーブル２２ａ内の位置を記録した配列であるインデックス値テーブル２２ｂとに分解して管理するデータ構造、すなわち、前記の特許文献１に記載されたＦＡＳＴ構造を備える。データ検索プログラム２１は、検索対象ＤＢ２２のデータをＲＡＭ１３上に展開し、オンメモリ処理によりデータ検索を実行するが、以下の説明では、メモリ上に展開されたデータについても、ＨＤ上と同一の符号で説明する。
【００１６】
なお、図１には、システムが単独のコンピュータにより構成される例を示したが、このコンピュータをサーバとしてネットワークを介して複数の端末を接続し、各端末から入力、閲覧ができるようにしてもよい。また、検索対象ＤＢには、一組の項目値テーブルとインデックス値テーブルとのみを示しているが、実際には複数の項目値について、それぞれ項目値テーブルとインデックス値テーブルとが設けられている。
【００１７】
ＨＤ２０にインストールされたデータ検索プログラム２１は、複数の検索値をパラメータとして、いずれかの検索値に該当するレコードを結果集合として出力するＳＱＬ構文のＩＮ検索が指示された際に機能するフラグ配列確保機能２１ａ、検索値ソート機能２１ｂ、比較機能２１ｃ、検索結果出力機能２１ｄを備えている。以下、各機能について説明する。
【００１８】
フラグ配列確保機能２１ａは、検索対象項目について、項目値テーブルの各項目値に対応した同数のフラグ配列を確保する。検索値ソート機能２１ｂは、検索キーとして与えられた複数の検索値を昇順にソートする。比較機能２１ｃは、ソートされた検索値を先頭から順に取り出し、項目値テーブルの先頭の項目値から順に比較する。そして、項目値が検索値に一致する場合には当該項目値に対応するフラグを立てて次の検索値と次の項目値とを比較し、一致しない場合には当該検索値と次の項目値とを比較する。検索結果出力機能２１ｄは、インデックス値テーブルを順にスキャンし、各インデックス値毎に対応する項目値のフラグを確認してフラグが立っている場合に当該インデックス値が格納されたレコードの情報を検索結果集合に追加し、全件スキャン後に検索結果集合をサブセットとして出力する。
【００１９】
次に、上記のデータ検索システム１において実行されるデータ検索処理の内容を、図２及び図３に示すフローチャートに基づいて説明する。所定のデータ構造に対して複数の検索値が検索キーとして与えられることにより、検索処理が開始する。ここでは、データ構造として、商品在庫管理データベースを例にする。このデータベースは、項目として商品を識別するための記号である「商品ＩＤ」、「商品名」、商品を販売する店舗名を示す「店舗」、その店舗における当該商品の在庫量を示す「数量」を有する。
【００２０】
ＳＱＬ構文として、以下のような命令が与えられた場合を例にして説明する。
「SELECT 商品ID, 商品名, 店舗, 数量 FROM TBL-A WHERE 商品ID IN (Z99, A01, A05, B03, … A02);」
この命令は、商品IDが、Z99、A01、A05、B03、・・・A02のいずれかのものの、商品ID,商品名、店舗、数量を抽出することを要求している。
【００２１】
図２に示すように、検索処理が開始すると、ＣＰＵ１１は、ステップS001において検索対象項目値テーブル内の検索対象項目値ＶＬの数ｍと同数のフラグ配列領域をＲＡＭ１３上に確保する。図４は、商品管理データベース中の商品ID項目に関するデータ構造を示す。ユニークな項目値(この例では２６００種類の商品ID)をソートした配列である項目値テーブル(VL)と、１億個の商品を個々に規定するレコードの配列順に当該レコードの商品IDが格納されている項目値テーブル(VL)内の位置を記録した配列であるインデックス値テーブル(VN)とを備え、そこに、項目値テーブルの各項目値に一対一で対応するようにフラグ配列が定義される。フラグ配列内の各フラグは、全て０に初期化されている。
【００２２】
次に、ＣＰＵ１１は、ステップS002において、検索キーに含まれる検索値を昇順にソートする。例えば、図５(A)に示すような配列として検索キーが与えられた場合、これをソートして図５(B)に示すような順序の配列に変更する。
【００２３】
続いて、ＣＰＵ１１は、ステップS003において:検索キーと検索対象項目の比較のサブルーチンを呼び出して実行する。ここでの処理は図３に示されるとおりである。すなわち、図３の最初のステップS101では、ＣＰＵ１１は検索キー及び検索対象項目値の配列序数ｍ，ｎをそれぞれ−１，０に初期化する。
【００２４】
そして、ＣＰＵ１１は、ステップS102において検索キーのｎ番目の検索値を取り出し、この検索値と項目値との比較を行う。ステップS103で序数ｍを１カウント加算し、ステップS104でｍが最後＋１(この例では２６０１)に達したか否かを判断し、ステップS105で検索値と検索対象項目値とを比較する。ステップS10６で検索値が検索対象項目値(VN)に一致すると判断されれば、ステップS107で該当する項目値に対応する位置のフラグを立て(フラグ配列に１をセットし)、一致しないと判断されればステップS103に戻って次の項目値を対象に比較が行われる。一致と判定されないうちに項目値が最後に達した場合には、ステップS104から図２のステップS004に戻る。
【００２５】
検索値と項目値とが一致してフラグが立てられると、ＣＰＵ１１はステップS108で検索値が検索キーの最後であるか否かを判断し、最後でなければ序数ｎを１カウント加算し、ステップS102に戻って検索キーの次の検索値について上記と同様の比較がなされる。
【００２６】
比較の際には、「検索キー」も「検索対象項目値(VL)」も昇順にソートされているため、比較によるフラグの設定時には、検索キーの１つ１つの検索値に対して、項目値全体を検索する必要は無く、１つの検索値で項目値を昇順に取り出して比較し、一致した場合には、次の検索値については、一致した項目値の次の項目値から検索すればよい。上記のように、検索値が「Ａ０１，Ａ０２，Ａ０５，Ｂ０３」で、項目値が「Ａ００，Ａ０１，Ａ０２，Ａ０３，Ａ０４，Ａ０５、…」である場合、まず、「Ａ０１」がみつかるまで項目値を昇順に検索し、「Ａ０１」がみつかるとフラグを立て、次の検索値「Ａ０２」により、検索値「Ａ０１」による検索が終了した項目値の次の項目値「Ａ０２」から検索を続行する。同様に、次の検索値「Ａ０５」については、項目値「Ａ０３」から検索を続行する。
【００２７】
なお、検索対象の項目値が検索値を超えた場合には、その検索値による検索は終了し、フラグを立てずに次の検索値による検索を続行する。項目値が検索値を超えず、かつ、一致することなく検索項目値の最後まで比較が終了した場合には、検索自体を終了する。
【００２８】
比較処理によるフラグの設定の様子を図６に示す。図６(A)はソート後の検索キー、(B)は検索対象の項目値テーブル(VL)とこれに対応するフラグ配列とを示す。検索値に一致する項目値「Ａ０１，Ａ０２，Ｚ９９」に対応するフラグが「１」にセットされ、他のフラグは「０」のままである。
【００２９】
比較処理が終了すると、ＣＰＵ１１は図２のステップS004に戻って処理を続行する。ステップS004〜S009では、ＣＰＵ１１はインデックス値テーブル(VN)を一回だけレコード順に全件スキャンして項目値に対応するフラグが１にセットされているレコードを抽出する。すなわち、ステップS004ではインデックス値テーブルの値の順番を示すための序数pを０に初期化し、ステップS005では、当該インデックス値により指し示される項目値にフラグが立てられているか否かを判断し、フラグが１である場合には(S006, YES)、ステップS007で当該レコードを検索結果集合(サブセット)に追加た後にステップS008に進み、フラグが１でない場合には(S006, NO)、ステップS007の処理をスキップしてステップS008に進む。
【００３０】
ＣＰＵ１１は、ステップS008では序数ｐの値を１カウント加算し、ステップS009で最後のインデックス値でないか否かを確認し、最後でなければステップS005に処理を戻す。このようにして、１レコードずつインデックス値テーブルをスキャンしながらフラグをチェックし、最後のインデックス値が検出されると(S009, YES)、ステップS010で検索結果集合(サブセット)を出力してデータ検索処理を終了する。
【００３１】
図７は、上記のステップS005〜S010に相当する処理を示す。すなわち、インデックス値テーブル(VN)の１億件を順にスキャンし、示されるインデックス値「１，２，…，２６００」により示される項目値テーブル(VL)内の項目値「Ａ０１，Ａ０２，…，Ｚ９９」に対応するフラグ配列内のフラグをチェックし、それが「１」であるインデックス値を持つレコード(レコード番号１，２，７，１０…)を結果集合のサブセットとして抽出する。
【００３２】
上記のフローチャートは結果集合の出力までを規定しているが、前記のＳＱＬ文の命令を完了するため、ＣＰＵ１１は、検索結果集合のインデックス値で示される商品IDと、抽出されたインデックス値テーブルのレコード番号に基づいて他の項目値テーブルから読み出した商品名、店舗、数量の各データとを組み合わせて図７の下段に示すような検索結果を出力する。
【００３３】
レコード件数１億件、対象項目のデータ種類１０８種類、ＩＮ構文で指定する検索値数１０８個としてベンチマークテストを行った結果、従来の検査口毎に全件検索する場合にはＩＮ構文の処理にかかる所要時間が２９２秒であったのに対し、本発明の方式では所要時間は約２秒であり、１５０倍近く性能を向上させることができた。
【００３４】
なお、入力パラメータの渡し方を工夫すれば、ＩＮ構文のみでなく、様々なパターンの検索に対して高速化を図ることができる。パラメータとしては、一致検索のみでなく、「以上」、「以下」、「大きい」、「小さい」等を用いた範囲を指定してもよい。
【図面の簡単な説明】
【００３５】
【図１】本発明の実施形態に係るデータ検索装置を含むコンピュータシステムを示すブロック図である。
【図２】図１のデータ検索装置による検索処理の内容を示すフローチャートである。
【図３】図２から呼び出されて実行される比較処理の内容を示すフローチャートである。
【図４】図１のデータ検索装置の検索対象データの一例を示す説明図である。
【図５】図１のデータ検索装置で用いられる検索キーのソート前後の配列を示す説明図である。
【図６】図１のデータ検索装置による検索手順におけるフラグの設定処理を示す説明図である。
【図７】図１のデータ検索装置による検索手順における結果集合の生成処理を示す説明図である。
【符号の説明】
【００３６】
１  システム
１０  コンピュータ
１１  ＣＰＵ
１２  ＲＡＭ
２０  ＨＤ
２１  データ検索プログラム
２１ａ  フラグ配列確保機能
２１ｂ  検索値ソート機能
２１ｄ  検索結果出力機能
２２  検索対象ＤＢ
２２ａ  項目値テーブル
２２ｂ  インデックス値テーブル
【図１】
2008250546.tif 000003
【図２】
2008250546.tif 000004
【図３】
2008250546.tif 000005
【図４】
2008250546.tif 000006
【図５】
2008250546.tif 000007
【図６】
2008250546.tif 000008
【図７】
2008250546.tif 000009