(57)【特許請求の範囲】
【請求項１】
データをカラム単位かつソート状態で格納するデータベースに接続され、クライアントからのクエリを受け付けて前記データベースに対するクエリ実行結果を前記クライアントに返却するデータベース管理装置であって、
前記クエリの検索条件に含まれる計算式に基づいて、カラムの全データを前記計算式に従って計算した値に変更した場合に前記カラムのデータのソート状態が崩れるか否かを決定するクエリ解析部と、
前記カラムの全データを前記計算式に従って計算した値に変更した変更後カラムを生成し、前記変更後カラムのデータをソートする前に、当該ソートの必要性を前記決定の結果に基づいて決定するクエリ処理部と、
を有するデータベース管理装置。
【請求項２】
前記クエリ解析部は、前記計算式に含まれる演算子、関数、および引数の種類に基づいて前記決定を行う、
請求項１に記載のデータベース管理装置。
【請求項３】
前記クエリ解析部は、前記計算式に含まれる演算子、関数、引数の種類、および引数の値の特徴に基づいて前記決定を行う、
請求項１または２に記載のデータベース管理装置。
【請求項４】
前記クエリ解析部は、前記ソート状態が崩れないと決定した場合に、前記ソート状態が昇順および降順のどちらのソート順序になるかを決定し、
前記クエリ処理部は、前記ソート順序に基づいて、前記変更後カラムに対する処理を行う、
請求項１乃至３の何れかに記載のデータベース管理装置。
【請求項５】
前記ソート状態が昇順および降順のどちらのソート順序であるかを前記カラムに対応して記憶するソート情報部を有する、
請求項４に記載のデータベース管理装置。
【請求項６】
前記クエリ解析部は、前記ソート状態が崩れない計算を行う演算子、関数、引数の種類を定義した計算処理定義情報を記憶する計算処理定義情報部を有し、前記計算式に含まれる演算子、関数、引数の情報にマッチする計算処理定義情報が前記計算処理定義情報部に存在するか否かを調べることにより、前記決定を行う、
請求項１乃至５の何れかに記載のデータベース管理装置。
【請求項７】
前記データベースは、各カラムに関連する項目値を含むレコードの配列として表される表形式データに対応するデータ構造であって、前記カラムごとに、前記項目値を一意に特定する項目値番号に対応して当該カラムにおける項目値がソート状態で格納されている値リストと、前記レコードの順番に前記項目値番号を指定する情報が格納されている値番号配列とを含むデータ構造を有する、
請求項１乃至６の何れかに記載のデータベース管理装置。
【請求項８】
データをカラム単位かつソート状態で格納するデータベースに接続され、クライアントからのクエリを受け付けて前記データベースに対するクエリ実行結果を前記クライアントに返却するデータベース管理装置が実行するデータベース管理方法であって、
前記クエリの検索条件に含まれる計算式に基づいて、カラムの全データを前記計算式に従って計算した値に変更した場合に前記カラムのデータのソート状態が崩れるか否かを決定し、
前記カラムの全データを前記計算式に従って計算した値に変更した変更後カラムを生成し、前記変更後カラムのデータをソートする前に、当該ソートの必要性を前記決定の結果に基づいて決定する、
データベース管理方法。
【請求項９】
データをカラム単位かつソート状態で格納するデータベースに接続され、クライアントからのクエリを受け付けて前記データベースに対するクエリ実行結果を前記クライアントに返却するコンピュータを、
前記クエリの検索条件に含まれる計算式に基づいて、カラムの全データを前記計算式に従って計算した値に変更した場合に前記カラムのデータのソート状態が崩れるか否かを決定するクエリ解析部と、
前記カラムの全データを前記計算式に従って計算した値に変更した変更後カラムを生成し、前記変更後カラムのデータをソートする前に、当該ソートの必要性を前記決定の結果に基づいて決定するクエリ処理部と、
して機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース管理装置、データベース管理方法、およびプログラムに関する。
【背景技術】
【０００２】
データベース管理システム（ＤＢＭＳ）の内部構造として、複数のデータを表形式で表し、その複数の表に互いに関連付けを持たせて運用するリレーショナルデータベース（ＲＤＢ）が広く用いられている。一般のＲＤＢは、トランザクションなどの更新処理は得意であるが、１つ１つの行（レコード）をデータの参照や操作の単位としているため、列単位の集計や検索といった分析処理が遅いという欠点がある。この欠点を克服するために、表形式のデータを、列ごとにそのデータの並びを加工し、重複排除して保持することによって、高速な集計や検索を行うことを可能としたＦＡＳＴ構造というデータ構造が考案されている（例えば特許文献１、特許文献２参照）。
【０００３】
図１は、１つの表形式データをＦＡＳＴ構造データに変換したものを表している。ＦＡＳＴ構造は表形式のデータを、行番号を表す順序集合、ユニークでソートされたデータ群である値リスト（以後、ＶＬと呼ぶ）、列にどのデータが入っているかを示す値番号（以後、ＶＮｏと呼ぶ）の３つの成分に分解して表現する。このＦＡＳＴ構造のように、データをレコード単位ではなく、列単位で考え、列の処理を効率的に行えるよう設計された内部構造を持つＤＢＭＳをカラムストア型データベースと呼ぶ。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４４２５３７７号
【特許文献２】特許第５４９９８２５号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＦＡＳＴ構造を用いたカラムストア型データベースでは、各列のデータを列ごとに重複排除及びソートし、ＶＬとして保持することにより、列単位の処理を高速に行うことができる、という特長がある。しかし、問い合わせに対する処理をする過程で、ＶＬのデータ値が変わり、ＶＬのソート性が崩れる場合、以後の処理を効率良く行うためには、ＶＮｏとＶＬを作り変える必要がある。以後、この作り変え処理をコンパイルと呼ぶ。
【０００６】
図２に、コンパイルが必要になるクエリ処理の例を示す。テーブルＴａｂｌｅ１中の列の一つに列ＣｏｌｕｍｎＡがあるとする。このとき、列ＣｏｌｕｍｎＡの値を２乗し、その結果の値が５以上のレコードの情報を参照するクエリを処理するとする。
【０００７】
まずＶＬの値をすべて計算（２乗）する。クエリ処理中に使用する一時的な記憶領域を列ＣｏｌｕｍｎＡ’とし、その中のＶＬに計算結果を格納する。計算後のＶＬはソート性が崩れるため、ＶＬコンパイルを行い、ＶＬのデータ値を重複排除してソートする。ＶＬのコンパイル後は、列ＣｏｌｕｍｎＡ’のＶＬの添え字値とＶＮｏの値との整合性が取れなくなっているため、ＶＮｏのコンパイルが必要になる。ＶＬ、ＶＮｏのコンパイル後は、列ＣｏｌｕｍｎＡ’のＶＬ内で５以上の値の範囲を検索する。ＶＬがソートされているため、ここでは一般的に二分探索などを用いることができる。その結果、ＶＬ内のどのデータが検索条件を満たすかを表すＶＬ真偽値配列を作成する。Ｔ（：Ｔｒｕｅ）は条件を満たすデータ、Ｆ（：Ｆａｌｓｅ）は条件を満たさないデータを表す。最後に、ＶＬ真偽値を使用し、各レコードが条件を満たすか否かを示すＶＮｏ真偽値配列を作成し、Ｔとなっているレコードの情報のみをクエリ結果として返す。
【０００８】
この一連の処理において、ＶＮｏ、ＶＬのコンパイル処理は、データ数が多いほど処理時間が大きくなる。問い合わせに対する処理をする過程で、ＶＬのデータ値が変わっても、ＶＬのソート性が崩れなければ、ＶＬを作り変える必要はなく、ＶＬおよびＶＮｏのコンパイルは不要である。しかしながら、ＶＬのソート性が崩れるか否かは、計算してみなければ決定することは困難であると考えられていた上に、ＶＬの計算後にソート性が崩れているか否かを決定するための処理時間を考慮すると、ソート性が崩れているか否かに関係なく、ＶＬの計算後に一律にＶＬのソートを行った方が効率がよいと考えられていた。その結果、クエリの検索条件に計算式が含まれる場合にクエリの処理時間が長大化していた。
【０００９】
本発明の目的は、上述した課題、すなわち、クエリの検索条件に計算式が含まれる場合にクエリの処理時間が長大化する、という課題を解決するデータベース管理装置を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の一実施形態に係るデータベース管理装置は、
データをカラム単位かつソート状態で格納するデータベースに接続され、クライアントからのクエリを受け付けて前記データベースに対するクエリ実行結果を前記クライアントに返却するデータベース管理装置であって、
前記クエリの検索条件に含まれる計算式に基づいて、カラムの全データを前記計算式に従って計算した値に変更した場合に前記カラムのデータのソート状態が崩れるか否かを決定するクエリ解析部と、
前記カラムの全データを前記計算式に従って計算した値に変更した変更後カラムを生成し、前記変更後カラムのデータをソートする前に、当該ソートの必要性を前記決定の結果に基づいて決定するクエリ処理部と、
を有する。
【００１１】
また、本発明の他の実施形態に係るデータベース管理方法は、
データをカラム単位かつソート状態で格納するデータベースに接続され、クライアントからのクエリを受け付けて前記データベースに対するクエリ実行結果を前記クライアントに返却するデータベース管理装置が実行するデータベース管理方法であって、
前記クエリの検索条件に含まれる計算式に基づいて、カラムの全データを前記計算式に従って計算した値に変更した場合に前記カラムのデータのソート状態が崩れるか否かを決定し、
前記カラムの全データを前記計算式に従って計算した値に変更した変更後カラムを生成し、前記変更後カラムのデータをソートする前に、当該ソートの必要性を前記決定の結果に基づいて決定する。
【００１２】
また、本発明の他の実施形態に係るプログラムは、
データをカラム単位かつソート状態で格納するデータベースに接続され、クライアントからのクエリを受け付けて前記データベースに対するクエリ実行結果を前記クライアントに返却するコンピュータを、
前記クエリの検索条件に含まれる計算式に基づいて、カラムの全データを前記計算式に従って計算した値に変更した場合に前記カラムのデータのソート状態が崩れるか否かを決定するクエリ解析部と、
前記カラムの全データを前記計算式に従って計算した値に変更した変更後カラムを生成し、前記変更後カラムのデータをソートする前に、当該ソートの必要性を前記決定の結果に基づいて決定するクエリ処理部と、
して機能させる。
【発明の効果】
【００１３】
本発明は、上述した構成を有するため、クエリの検索条件に計算式が含まれる場合であっても、クエリの処理時間が長大化するのを防止することができる。
【図面の簡単な説明】
【００１４】
【図１】表形式データとＦＡＳＴ構造データの例を示す図である。
【図２】コンパイルが必要になるクエリ処理の例を示す図である。
【図３】本発明の第１の実施形態に係るデータベース管理システムのブロック図である。
【図４】本発明の第１の実施形態の動作を説明するためのデータベースとクエリの例を示す図である。
【図５】本発明の第１の実施形態における計算処理定義情報部に記憶される計算処理定義情報の例を示す図である。
【図６】本発明の第１の実施形態の動作の一例を示すフローチャートである。
【図７】本発明の第１の実施形態におけるクエリ処理部が実行するＹＥＡＲ関数の計算処理の説明図である。
【図８】本発明の第２の実施形態における計算処理定義情報部に記憶される計算処理定義情報の例を示す図である。
【図９】本発明の第３の実施形態に係るデータベース管理システムのブロック図である。
【図１０】本発明の第３の実施形態の動作を説明するためのデータベースとクエリの例を示す図である。
【図１１】本発明の第３の実施形態における計算処理定義情報部に記憶される計算処理定義情報の例を示す図である。
【図１２】本発明の第３の実施形態におけるソート情報部の初期状態を示す図である。
【図１３】本発明の第３の実施形態の動作の一例を示すフローチャートである。
【図１４】本発明の第３の実施形態におけるソート情報部の更新状態を示す図である。
【図１５】本発明の第３の実施形態におけるクエリ処理部が実行する＊演算処理の説明図である。
【図１６】本発明の第３の実施形態におけるクエリ処理部がクエリ解析部で決定されたソート順序に基づいて変更後カラムに対して処理を行う例を示す図である。
【図１７】本発明の第４の実施形態に係るデータベース管理装置のブロック図である。
【発明を実施するための形態】
【００１５】
次に本発明の実施の形態について図面を参照して詳細に説明する。
[第１の実施形態]
図３を参照すると、本発明の第１の実施形態に係るデータベース管理システム１００は、データベース管理装置１１０と記憶装置１２０とクライアント装置１３０とから構成される。
【００１６】
記憶装置１２０は、ＬＡＮ等のネットワークによりデータベース管理装置１１０と接続される。記憶装置１２０は、データベース１２１を格納する。データベース１２１は、カラム単位でデータ管理を行うカラムストア型データベースである。
【００１７】
クライアント装置１３０は、パーソナルコンピュータや携帯端末等で構成され、ＬＡＮ等のネットワークによりデータベース管理装置１１０と接続される。クライアント装置１３０は、データベース１２１に対するクエリをデータベース管理装置１１０へ発行し、クエリ結果をデータベース管理装置１１０から受け取る。
【００１８】
データベース管理装置１１０は、１台または複数台のサーバ計算機などで構成され、クライアント装置１３０からクエリを受け付け、それを解析して処理し、データベース１２１に対するクエリ実行結果をクライアント装置１３０に返却する。データベース管理装置１１０は、クエリの解析を行うクエリ解析部１４０と、クエリ処理を行うクエリ処理部１５０と、計算処理定義情報部１６０とを有する。クエリ解析部１４０、クエリ処理部１５０、および計算処理定義情報部１６０といった機能手段は、例えば、コンピュータとプログラムとで実現することができる。プログラムは、コンピュータ読み取り可能な記録媒体に記録されて提供され、コンピュータの立ち上げ時にコンピュータに読み取られ、そのコンピュータの動作を制御することにより、そのコンピュータ上にクエリ解析部１４０、クエリ処理部１５０、および計算処理定義情報部１６０といった機能手段を実現する。後述する他の実施形態における機能手段についても同様にコンピュータとプログラムとで実現することができる。
【００１９】
計算処理定義情報部１６０は、コンパイルをスキップ可能な演算子、関数、および引数値が定義された計算処理定義情報を記憶する。すなわち、計算処理定義情報部１６０には、あらかじめ、ＶＬの計算を行ってもＶＬのソート性を崩さない演算子・関数・引数値が、計算処理定義情報として保存されている。
【００２０】
図５は、計算処理定義情報部１６０に記憶される計算処理定義情報の例を示す。この例の計算処理定義情報は、表形式で、演算子または関数名と引数の個数と引数に入力可能なデータの種類（列または値または制限なし）との組み合わせからなる情報を１行ずつ格納している。この格納形式はあくまで一例であり、同様の情報が格納できるのであれば表形式である必要は無く、別のデータ構造でも構わない。例えば、図５の２行目の計算処理定義情報は、＋演算子は、引数を２つ取り、列と値（図には記載していないが逆も可）の加算であれば、ＶＬ計算後のソート性は崩れない、ことを表している。但し、＋演算子であっても、列と列の加算であれば、列データの値如何では、ＶＬ計算後のソート性は崩れるため、図５には載せられていない。また、例えば、図５の６行目の計算処理定義情報は、ＹＥＡＲ関数は、引数を１つ取り、その引数の種類が何であっても、ＶＬ計算後のソート性は崩れない、ことを表している。ここで、ＹＥＡＲ関数は、日付値から年のデータを数値で返す関数である。
【００２１】
クエリ解析部１４０は、計算処理定義照合部１４１を有する。計算処理定義照合部１４１は、クエリに含まれる計算式で利用されている演算子または関数とその引数値を、計算処理定義情報部１６０の各行と照合し、当該クエリ処理におけるコンパイルのスキップ可否を判断する。
【００２２】
クエリ処理部１５０は、計算処理制御部１５１を有する。計算処理制御部１５１は、クエリに含まれる計算式に基づくＶＬ計算後、コンパイル処理を行う前に、コンパイルの必要性を計算処理定義照合部１４１の上記判断の結果に基づいて決定する。そして、計算処理制御部１５１は、コンパイルのスキップが可能であればコンパイルをスキップし、コンパイルのスキップが不可であれば、コンパイルを行うように制御する。
【００２３】
次に、本実施形態の動作を説明する。
【００２４】
図４は、本実施形態の動作を説明するためのデータベース１２１とクエリの例である。図４に示すように、データベース１２１には、レコード数１０００万件の売上明細テーブルの列に、売上日時の列が存在する。売上日時の列は、２００１／０１／０１から２０１５／０１／２０までのタイムスタンプ値が格納されており、ＶＬのデータサイズは４００万である。図４に示すクエリは、このような状態の売上明細テーブルから２０１４年以降の売上レコードを参照するためのクエリである。そのため、クエリのＷＨＥＲＥ句に記述された検索条件に、“ＹＥＡＲ（売上日時）”なる計算式が含まれている。
【００２５】
図６は本実施形態の動作の一例を示すフローチャートである。以下、図６を参照して、データベース管理装置１１０の動作を説明する。
【００２６】
データベース管理装置１１０のクエリ解析部１４０は、クライアント装置１３０からのクエリを解析する（Ｓ１０１）。その際、クエリ解析部１４０は、クエリ中に使用されている演算子・関数、引数の情報を収集する。図４に示すクエリからは、以下の情報が収集される。
演算子・関数：ＹＥＡＲ関数
引数の個数：１
引数の種類：列（売上日時）
【００２７】
次にクエリ解析部１４０は、計算処理定義照合部１４１において、計算処理定義情報部１６０の図５に示した表中に上記収集した情報の条件とマッチするものが存在するかどうか調べる（Ｓ１０２）。その結果、計算処理定義照合部１４１は、図５の６行目の「演算子・関数：ＹＥＡＲ関数、引数の数：１、引数１：制限なし」の行に上記情報がマッチすることを検出する（Ｓ１０３でＹｅｓ）。クエリ解析部１４０は、マッチした場合、この関数の計算をしても計算後のＶＬのソート性は崩れないため、ＶＮｏ、ＶＬのコンパイルは不要と判断する（Ｓ１０４）。なお、クエリ解析部１４０は、マッチしなかった場合（Ｓ１０３でＮｏ）、ＶＮｏ、ＶＬのコンパイルを必要と判断する（Ｓ１０５）。
【００２８】
クエリの解析が終わったら、クエリ処理部１５０は、クエリ解析結果に基づきクエリの処理を行う。まず、クエリ処理部１５０は、ＹＥＡＲ関数の計算処理を行う（Ｓ１０６）。即ち、クエリ処理部１５０は、売上日時の列のＶＬデータにおいて、年のデータを数値で取得する。この計算結果のＶＬは、図７の右側のＶＬに示されている。図７を参照すると、計算結果のＶＬは、０番目の要素の値２００１から始まり、最後の３，９９９，９９９番目の要素の値２０１５までソート性は崩れていない。
【００２９】
クエリ処理部１５０は、計算処理後、計算処理制御部１５１において、計算処理定義照合部１４１でのコンパイル要否の判断を確認する（Ｓ１０７）。今の例の場合、コンパイルは不要と判断されているので、計算処理制御部１５１は、ＶＮｏ、ＶＬのコンパイルをスキップする（Ｓ１０８）。なお、計算処理制御部１５１は、クエリの解析においてコンパイルは必要と判断されている場合、ＶＮｏ、ＶＬのコンパイルをスキップしない。その結果、クエリ処理部１５０は、コンパイルを実行する（Ｓ１０９）。
【００３０】
次に、クエリ処理部１５０は、計算後のＶＬに対して、２０１４年以降の範囲を検索する処理を行う（Ｓ１１０）。ここでの検索処理は、図２を参照して説明した例と基本的に同じであるため、詳細な説明は省略する。
【００３１】
このように本実施形態によれば、クエリの検索条件に含まれる計算式に、計算後もＶＬのソート性を崩さない計算を行う演算子・関数および引数を用いる計算式が含まれている場合、コンパイル処理を省くので、クエリの処理時間を短縮できる。
【００３２】
[第２の実施形態]
第１の実施形態では、クエリ解析部１４０は、クエリの計算式に含まれる演算子、関数、および引数の種類に基づいて、ＶＮｏとＶＬのコンパイルの必要性を決定した。本実施形態では、クエリの計算式に含まれる演算子、関数、引数の種類に加えて、引数の値の特徴に基づいて、ＶＮｏとＶＬのコンパイルの必要性を決定する。
【００３３】
これにより、ある定義域の値の計算であれば計算後のＶＬのソート性が崩れない、という性質を持つ演算子・関数について、値の条件によっては、第１の実施形態と同様にコンパイルをスキップできるようになる。
【００３４】
本実施形態について、ＡＢＳ関数（絶対値の計算）の例をとって説明する。この関数の計算は、引数が０以上の値であれば、計算後のＶＬのソート性は崩れないが、０未満であれば崩れてしまう。そのため、第１の実施形態の構成では、この関数は計算処理定義情報部１６０には定義できなかった。
【００３５】
本実施形態では、図８に示すように、演算子、関数、引数の種類に加えて、引数の値の特徴を有する計算処理定義情報を計算処理定義情報部１６０に予め記憶しておく。引数ごとの値特徴の欄には、演算子・関数の計算をするにあたり、計算後にＶＬのソート性が崩れない引数値の条件を入れる。例えば、ＡＢＳ関数の場合、図８の４行目に示すように、引数１の値特徴を０以上と定義する。この値特徴に定義する種類としては、「制限なし、０以上、０未満」などが考えられる。演算子・関数の性質によって、これ以外の種類をさらに用意しても良い。引数が値ではなく、列の場合でも、ＶＬがソートされている関係上、最小値・最大値は瞬時に分かるため、その２つの情報から、ＶＬの全データが上記の種類のどれを満たすかは判別可能である。
【００３６】
本実施形態において、実際にクエリを処理する際の動作は、第１の実施形態と基本的に同じであり、図６に示す流れに沿って行われる。但し、本実施形態では、図６のＳ１０１とＳ１０２の処理が第１の実施形態と相違する。本実施形態では、クエリ解析部１４０は、Ｓ１０１の処理において、クエリの検索条件に含まれる計算式から、演算子・関数と引数値の種類に加え、引数の値の特徴を収集する。また本実施形態では、クエリ解析部１４０は、Ｓ１０２の処理において、クエリ中に含まれる演算子・関数が計算処理定義情報部１６０に存在する計算処理定義情報にマッチするか否かを確認するときに、引数の値特徴の条件を満たすかどうかも確認するようにする。それらをすべて満たしていれば、コンパイルをスキップ可能と判断する。即ち、クエリ解析部１４０は、計算式に含まれる演算子、関数、引数の種類、および引数の値の特徴にマッチする計算処理定義情報が計算処理定義情報部１６０に存在すれば、計算後のＶＬのソート性は崩れないため、ＶＮｏとＶＬのコンパイルをスキップ可能と判断する。
【００３７】
このように本実施形態によれば、第１の実施形態に比べて、クエリの処理時間を更に短縮できる。その理由は、クエリの検索条件に含まれる計算式に、引数の値の条件によっては計算後もＶＬのソート性を崩さないで計算を行うことができる演算子・関数（及び引数）が含まれている場合であっても、スキップ可能と判断できるためである。
【００３８】
[第３の実施形態]
図９を参照すると、本発明の第３の実施形態に係るデータベース管理システム３００は、データベース管理装置３１０と記憶装置３２０とクライアント装置３３０とから構成される。そのうち、記憶装置３２０、記憶装置３２０内のデータベース３２１、およびクライアント装置３３０は、図３に示した記憶装置１２０、データベース１２１、およびクライアント装置１３０と同じである。
【００３９】
データベース管理装置３１０は、１台または複数台のサーバ計算機などで構成され、クライアント装置３３０からクエリを受け付け、それを解析して処理し、データベース３２１に対するクエリ実行結果をクライアント装置３３０に返却する。データベース管理装置３１０は、クエリの解析を行うクエリ解析部３４０と、クエリ処理を行うクエリ処理部３５０と、計算処理定義情報部３６０と、ソート情報部３７０とを有する。
【００４０】
計算処理定義情報部３６０は、コンパイルをスキップ可能な演算子、関数、引数値、引数の値特徴、および計算後のＶＬのソート順序（昇順、降順）が定義された計算処理定義情報を記憶する。
【００４１】
図１１は、計算処理定義情報部３６０に記憶される計算処理定義情報の例を示す。この例の計算処理定義情報は、表形式で、演算子または関数名と引数の個数と引数に入力可能なデータの種類（列または値または制限なし）と引数ごとの値特徴とソート順序の組み合わせからなる情報を１行ずつ格納している。この格納形式はあくまで一例であり、同様の情報が格納できるのであれば表形式である必要は無く、別のデータ構造でも構わない。例えば、図１１の３行目の計算処理定義情報は、＊演算子は、引数を２つ取り、任意の値特徴の列と０以上の値特徴の値の乗算であれば、ＶＬ計算後のソート性は崩れないが、計算後のＶＬは昇順になる、ことを表している。また、例えば、図１１の４行目の計算処理定義情報は、＊演算子は、引数を２つ取り、任意の値特徴の列と０未満の値特徴の値の乗算であれば、ＶＬ計算後のソート性は崩れないが、計算後のＶＬは降順になる、ことを表している。
【００４２】
ソート情報部３７０は、ＶＬ計算後のソート順序を列ごとに記憶する。ソート情報部３７０の内容は、クエリ解析部３４０から更新され、クエリ処理部３５０から参照される。
【００４３】
クエリ解析部３４０は、計算処理定義照合部３４１とソート情報更新部３４２を有する。計算処理定義照合部３４１は、クエリに含まれる計算式で利用されている演算子または関数とその引数値と引数の特徴値を、計算処理定義情報部３６０の各行の計算処理定義情報と照合し、当該クエリ処理におけるコンパイルのスキップ可否および計算後のＶＬのソート順序を判断する。ソート情報更新部３４２は、ソート情報部３７０の初期化を行う。またソート情報更新部３４２は、計算処理定義照合部３４１の判断に応じて、ソート情報部３７０を更新する。
【００４４】
クエリ処理部３５０は、計算処理制御部３５１とソート情報参照部３５２を有する。計算処理制御部３５１は、クエリに含まれる計算式に基づくＶＬ計算後、コンパイル処理を行う前に、コンパイルの必要性を計算処理定義照合部３４１の上記判断の結果に基づいて決定する。そして、計算処理制御部３５１は、コンパイルのスキップが可能であればコンパイルをスキップし、コンパイルのスキップが不可であれば、コンパイルを行うように制御する。ソート情報参照部３５２は、計算後の処理中にＶＬを参照する必要がある場合に、ソート情報部３７０を参照して、計算後のＶＬのソート順序が昇順または降順のどちらかを確認する。
【００４５】
次に、本実施形態の動作を説明する。
【００４６】
図１０は、本実施形態の動作を説明するためのデータベース３２１とクエリの例である。図１０に示すように、データベース３２１には、レコード数１万件のテーブルＴａｂｌｅ２の列に、ＣｏｌｕｍｎＡの列、ＣｏｌｕｍｎＢの列、ＣｏｌｕｍｎＣの列が存在する。ＣｏｌｕｍｎＢの列は、−１０００から５００までの値が格納されており、ＶＬのデータサイズは３０である。図１０に示すクエリは、このような状態のテーブルＴａｂｌｅ２から、ＣｏｌｕｍｎＢの列のデータの符号を反転したときに２００以上の値となるレコードを参照するためのクエリである。そのため、クエリのＷＨＥＲＥ句に記述された検索条件に、“ＣｏｌｕｍｎＢ＊（−１）”なる計算式が含まれている。
【００４７】
図１３は本実施形態の動作の一例を示すフローチャートである。以下、図１３を参照して、データベース管理装置３１０の動作を説明する。
【００４８】
データベース管理装置３１０のクエリ解析部３４０は、クライアント装置３３０からクエリを受け取ると、まず、ソート情報更新部３４２により、ソート情報部３７０の初期化を行う（Ｓ３０１）。これはソート情報部３７０が１つ前のクエリに応じた状態のままになっている可能性があるためである。各列のソート状態は、計算前は昇順なので、ソート情報更新部３４２は、図１２に示すように、ソート情報部３７０の各列のソート情報を全て昇順に書き換える。
【００４９】
次に、クエリ解析部３４０は、クライアント装置３３０からのクエリを解析する（Ｓ３０２）。その際、クエリ解析部３４０は、クエリ中に使用されている演算子・関数、引数の情報を収集する。図１０に示すクエリからは、以下の情報が収集される。
演算子・関数：＊演算子
引数の個数：２
引数１の種類：列（ＣｏｌｕｍｎＢ）
引数１の値特徴：なし
引数２の種類：値
引数２の値特徴：０未満
【００５０】
次にクエリ解析部３４０は、計算処理定義照合部３４１において、計算処理定義情報部３６０の図１１に示した表中に上記収集した情報の条件とマッチするものが存在するかどうか調べる（Ｓ３０３）。その結果、計算処理定義照合部３４１は、図１１の４行目の「演算子・関数：＊演算子、引数の数：２、引数１：列、引数１の値特徴：制限なし、引数２：値、引数２の値特徴：０未満」の行に上記情報がマッチすることを検出する（Ｓ３０４でＹｅｓ）。クエリ解析部３４０は、マッチした場合、この計算式による計算をしても計算後のＶＬのソート性は崩れないため、ＶＮｏ、ＶＬのコンパイルは不要と判断する（Ｓ３０５）。またクエリ解析部３４０は、コンパイル不要と判断した場合、上記マッチした計算処理定義情報のソート順序の欄から、計算後のＶＬのソート順序を取得し、ソート情報更新部３４２により、ソート情報部３７０を更新する（Ｓ３０７〜Ｓ３０９）。すなわち、全ての列について（Ｓ３０９）、ソート情報更新部３４２は、各列の計算後のソート情報を順に判別し（Ｓ３０７）、降順となる列については、該当の列の情報を降順に書き換える（Ｓ３０８）。今の例では、ＣｏｌｕｍｎＢがそれに該当するため、図１４に示すようにＣｏｌｕｍｎＢの箇所を降順に更新する。なお、クエリ解析部３４０は、マッチしなかった場合（Ｓ３０４でＮｏ）、ＶＮｏ、ＶＬのコンパイルを必要と判断する（Ｓ３０６）。
【００５１】
クエリの解析が終わったら、クエリ処理部３５０は、クエリ解析結果に基づきクエリの処理を行う。まず、クエリ処理部３５０は、＊演算子の計算処理を行う（Ｓ３１０）。即ち、クエリ処理部３５０は、ＣｏｌｕｍｎＢの列のＶＬデータに−１を乗算して、計算後のＶＬをＣｏｌｕｍｎＢ’に一時的に格納する。この計算結果のＶＬは、図１５の右側のＶＬに示されている。図１５を参照すると、計算結果のＶＬは、０番目の要素の値１０００から始まり、最後の２９番目の要素の値−５００まで降順のソート状態である。
【００５２】
クエリ処理部３５０は、計算処理後、計算処理制御部３５１において、計算処理定義照合部３４１でのコンパイル要否の判断を確認する（Ｓ３１１）。今の例の場合、コンパイルは不要と判断されているので、計算処理制御部３５１は、ＶＮｏ、ＶＬのコンパイルをスキップする（Ｓ３１２）。なお、計算処理制御部３５１は、クエリの解析においてコンパイルは必要と判断されている場合、ＶＮｏ、ＶＬのコンパイルをスキップしない。その結果、クエリ処理部３５０は、コンパイルを実行する（Ｓ３１３）。
【００５３】
次に、クエリ処理部３５０は、計算後のＶＬに対して、２００以上の範囲を検索する処理を行う（Ｓ３１４、Ｓ３１５）。ここでの検索処理は、図２を参照して説明した例と基本的に同じである。但し、Ｓ３１４において、ＶＬのソート状態が昇順であるとは限らないため、クエリ処理部３５０は、ソート情報参照部３５２によりソート情報部３７０を参照して、ＶＬのソート状態が昇順、降順のどちらになっているかを確認して処理を行う。例えば、２００という値がＣｏｌｕｍｎＢ’のＶＬ内のどこに位置するかを二分探索などで調べた後、ＶＬ真偽値配列を作成する際、対象の列であるＣｏｌｕｍｎＢ’のＶＬのソート状態が降順となっていることをソート情報部３７０から判明するので、図１６に示すように、見つかった位置から小さい要素をすべてＴとする。以降の処理は、図２を参照して説明した例と基本的に同じであるため、詳細な説明は省略する。
【００５４】
このように本実施形態によれば、クエリの検索条件に含まれる計算式に、計算後のＶＬのソート状態が元の昇順とは逆の降順となる計算を行う演算子・関数および引数を用いる計算式が含まれている場合であっても、コンパイル処理を省くので、第１および第２の実施形態に比較して、クエリの処理時間をより一層短縮できる。
【００５５】
[第４の実施形態]
図１７を参照すると、本発明の第４の実施形態に係るデータベース管理装置４００は、データベース４１０とクライアント４２０とにネットワーク等を通じて接続されている。データベース４１０は、データをカラム単位かつソート状態で格納する。クライアント４２０は、データベース４１０に対するクエリをデータベース管理装置４００へ送信し、データベース４１０に対するクエリ実行結果をデータベース管理装置４００から受信する。
【００５６】
データベース管理装置４００は、クエリ解析部４３０とクエリ処理部４４０とを有する。クエリ解析部４３０は、クエリの検索条件に含まれる計算式に基づいて、カラムの全データを計算式に従って計算した値に変更した場合にカラムのデータのソート状態が崩れるか否かを決定する機能を有する。クエリ処理部４４０は、カラムの全データを計算式に従って計算した値に変更した変更後カラムを生成し、変更後カラムのデータをソートする前に、当該ソートの必要性を上記決定の結果に基づいて決定する機能を有する。
【００５７】
このように構成された本実施形態に係るデータベース管理装置４００は、以下のように動作する。即ち、データベース管理装置４００のクエリ解析部４３０は、クライアント４２０からのクエリを受け付けると、クエリの検索条件に含まれる計算式に基づいて、カラムの全データを上記計算式に従って計算した値に変更した場合にカラムのデータのソート状態が崩れるか否かを決定する。次に、データベース管理装置４００のクエリ処理部４４０は、カラムの全データを上記計算式に従って計算した値に変更した変更後カラムを生成し、変更後カラムのデータをソートする前に、当該ソートの必要性をクエリ解析部４３０の決定の結果に基づいて決定する。
【００５８】
このように本実施形態によれば、クエリの検索条件に計算式が含まれる場合であっても、クエリの処理時間が長大化するのを防止することができる。
【００５９】
その理由は、クエリ解析部４３０がクエリの検索条件に含まれる計算式に基づいて、カラムの全データを上記計算式に従って計算した値に変更した場合にカラムのデータのソート状態が崩れるか否かを決定し、クエリ処理部４４０がカラムの全データを上記計算式に従って計算した値に変更した変更後カラムを生成し、変更後カラムのデータをソートする前に、当該ソートの必要性を上記決定の結果に基づいて決定するためである。
【００６０】
以上、本発明を幾つかの実施形態を挙げて説明したが、本発明は以上の実施形態にのみ限定されず、本発明の範囲内において各種の付加変更が可能である。
【産業上の利用可能性】
【００６１】
本発明は、データをカラム単位かつソート状態で格納するデータベースに対するクエリを処理するデータベース管理装置に利用でき、特にクエリの検索条件に計算式が含まれる場合に利用できる。
【符号の説明】
【００６２】
１００…データベース管理システム
１１０…データベース管理装置
１２０…記憶装置
１２１…データベース
１３０…クライアント装置
１４０…クエリ解析部
１４１…計算処理定義照合部
１５０…クエリ処理部
１５１…計算処理制御部
１６０…計算処理定義情報部
３００…データベース管理システム
３１０…データベース管理装置
３２０…記憶装置
３２１…データベース
３３０…クライアント装置
３４０…クエリ解析部
３４１…計算処理定義照合部
３４２…ソート情報更新部
３５０…クエリ処理部
３５１…計算処理制御部
３５２…ソート情報参照部
３６０…計算処理定義情報部
３７０…ソート情報部
４００…データベース管理装置
４１０…データベース
４２０…クライアント
４３０…クエリ解析部
４４０…クエリ処理部
【図１】
0006677025.tif 000002
【図２】
0006677025.tif 000003
【図３】
0006677025.tif 000004
【図４】
0006677025.tif 000005
【図５】
0006677025.tif 000006
【図６】
0006677025.tif 000007
【図７】
0006677025.tif 000008
【図８】
0006677025.tif 000009
【図９】
0006677025.tif 000010
【図１０】
0006677025.tif 000011
【図１１】
0006677025.tif 000012
【図１２】
0006677025.tif 000013
【図１３】
0006677025.tif 000014
【図１４】
0006677025.tif 000015
【図１５】
0006677025.tif 000016
【図１６】
0006677025.tif 000017
【図１７】
0006677025.tif 000018