(57)【特許請求の範囲】
【請求項１】
１つ又はそれ以上の外部のデータベースにアクセスする機能を有するデータベース管理システムにおいて、
問合せに含まれる各機能が外部のデータベースにおいて実行されるものか否かを事前に定義設定する手段と、
利用者から送られた前記問合せにおいて参照される機能が１つの外部データベースへのアクセスによって処理可能かどうかを評価する手段と、
前記問合せにおいて参照される全ての機能が前記１つの外部データベースへのアクセスにより処理可能であると評価され且つ前記定義設定する手段により前記１つの外部データベースにおける実行が定義されているときには、前記問合せは前記１つの外部データベースにおいて処理され、
前記問合せにおいて参照される機能のうち一部の機能が前記１つの外部データベースへのアクセスにより処理可能でないと評価されるときは、前記問合せに含まれ前記１つの外部データベースにおいて実行されると設定される機能を前記１つの外部データベースにおいて実行した後、前記１つの外部データベースでは実行されない前記問合せ中の他の機能について、少なくとも１つの外部データベースで実行された結果を前記データベース管理システムに付属する内部データベースに取り込んでその内部データベースにおいて残された機能処理を実行することを特徴とするデータベース管理システム。
【請求項２】
１つ又はそれ以上の外部のデータベースにアクセスする機能を有するデータベース管理システムにおける問合せ方法であって、
（１）問合せに含まれる各機能が外部のデータベースで実行されるものか否かの設定情報を取得するステップと、
（２）取得された前記設定情報を参照することによって、前記問合せにおいて参照される前記機能が１つの外部データベースへのアクセスによって処理可能か否か評価するステップと、
（３）前記問合せにおいて参照される機能が前記１つの外部データベースへのアクセスにより処理可能であると評価されるならば、前記問合せにおいて参照される機能を前記１つの外部データベースにおいて処理するためのアクセス手順を生成するステップと、
（４）前記問合せにおいて参照される機能が前記１つの外部データベースへのアクセスにより実行可能でないと評価されるときは、前記問合せに含まれ前記１つの外部データベースにおい処理できない機能を前記データベース管理システムに付属する内部データベースにおいて処理するためのアクセス手順を生成するステップと、
を有することを特徴とするデータベース管理システムにおける問合せ方法。
【請求項３】
請求項２に記載のデータベース管理システムにおける問合せ方法であって、
（１）あらかじめ設定された定義情報に基づいて、利用者から送られた前記問合せにある全ての機能が１つの外部データベースにおいて処理可能と判定されるときに、前記問合せを前記１つの外部データベースにおいて処理するためのアクセス手順を生成するステップと、
（２）前記定義情報に基づいて、前記問合せに含まれる機能が前記１つの外部データベースにおいて処理不可能と判定されるときには、外部データベースにアクセスする機能を有する前記データベース管理システム内の前記内部データベースにおいて前記機能を実行するアクセス手順を生成するステップと、
を有することを特徴とするデータベース管理システムにおける問合せ方法。
【請求項４】
請求項２に記載のデータベース管理システムにおける問合せ方法であって、
前記定義情報は、外部データベースを管理するデータベース管理システムの種類ごとに、問合せに含まれる機能が外部データベースにおいて実行可能かどうかを定義するものであることを特徴とするデータベース管理システムにおける問合せ方法。
【請求項５】
請求項４に記載のデータベース管理システムにおける問合せ方法であって、
前記定義情報は、外部データベースを管理するデータベース管理システムの種類およびバージョンごとに、問合せに含まれる機能が外部データベースにおいて実行可能かどうかを定義するものであることを特徴とするデータベース管理システムにおける問合せ方法。
【請求項６】
１つ又はそれ以上の外部のデータベースにアクセスする機能を有するデータベース管理システムにおける問合せ実行プログラムであって、
（１）問合せに含まれる各機能が外部のデータベースで実行されるものか否かの設定情報を取得する手順と、
（２）取得された前記設定情報を参照することによって、前記問合せにおいて参照される前記機能が１つの外部データベースへのアクセスによって処理可能か否か評価する手順と、
（３）前記問合せにおいて参照される機能が前記１つの外部データベースへのアクセスにより処理可能であると評価されるならば、前記問合せにおいて参照される機能を前記１つの外部データベースにおいて処理するためのアクセス手順を生成する手順と、
（４）前記問合せにおいて参照される機能が前記１つの外部データベースへのアクセスにより実行可能でないと評価されるときは、前記問合せに含まれ前記１つの外部データベースにおい処理できない機能を前記データベース管理システムに付属する内部データベースにおいて処理するためのアクセス手順を生成する手順と、
を有することを特徴とするデータベース管理システムにおける問合せ実行プログラム。
【請求項７】
１つ又はそれ以上の外部のデータベースにアクセスする機能を有するデータベース管理システムにおける問合せ実行プログラムであって、
（１）あらかじめ設定された定義情報に基づいて、利用者から送られた前記問合せにある全ての機能が１つの外部データベースにおいて処理可能と判定されるときに、前記問合せを前記１つの外部データベースにおいて処理するためのアクセス手順を生成するステップと、
（２）前記定義情報に基づいて、前記問合せに含まれる機能が前記１つの外部データベースにおいて処理不可能と判定されるときには、外部データベースにアクセスする機能を有する前記データベース管理システムに付属する内部データベースにおいて前記機能を実行するアクセス手順を生成するステップと、
を有することを特徴とするデータベース管理システムにおける問合せ実行プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データベース管理システム、データベース管理システムにおける問い合わ方法、データベース管理システムにおける問い合わせ実行プログラムに関し、とくにそれらにおける問合せの最適化に関するものである。
【０００２】
【従来の技術】
従来の問合せの最適化方法は、米国特許第５５９０３２１号に示すように、問合せで参照するデータが全て一つの外部のデータベースに含まれるかどうかを評価するステップと、該問合せ中の機能が前記一つの外部のデータベースで実行できるかどうかを評価するステップを含み、該問合せに含まれるデータが全て一つのデータベースに含まれ、かつ該問合せ中の機能が全て前記外部のデータベースで評価できる場合に、該問合せを前記外部のデータベースで実行する方法がある。
【０００３】
【発明が解決しようとする課題】
問合せ中の機能が外部のデータベースで実行できるかどうか、実行することが望ましいどうかは、機能名称だけではなく、外部のデータベースに含まれるデータの形式や、問合せ内で該機能をどのように使用しているかなど、利用者の経験と知見にもとづいて最適化のために利用者がデータベースをどのように利用するか決定しうることが望ましい。しかし、上記従来技術では、問合せに含まれる機能が外部のデータベースで実行できるかどうかは予め外部のデータベースにアクセスする機能を持つデータベース管理システムに内蔵されている。このため、利用者が意図したような問合せの最適化を実現することができず、問合せの実行性能が悪くなる場合があるという問題があった。
【０００４】
本発明の目的は、利用者が、問合せ中の機能の実行場所を指定しうるようになすことにより、利用者の意図したデータベースの利用方法を問合せの最適化に適用することができるデータベース管理システム、データベース管理システムにおける問い合わせ方法、データベース管理システムにおける問い合わせ実行プログラムを提供することにあり、とくにそれらにおける問合せの最適化を実現するにある。
【０００５】
本発明の他の目的は、利用者が、上記問合せ中の機能の実行場所の指定を、データベース管理システムの種類、データベース管理システムの種類及びバージョン、及びデータベース毎に指定することができる、問合せの最適化方法を提供することである。
【０００６】
上記の目的は、
１つ又はそれ以上の外部のデータベースにアクセスする機能を有するデータベース管理システムにおいて、
利用者から送られた問合せ中の機能を外部のデータベースにおいて実行するかどうかを指定する手段と、
前記利用者から送られた前記問合せにおいて参照されるデータが1つの外部データベースへのアクセスによって処理可能かどうかを評価する手段と、
前記問合せにおいて参照される全ての機能が前記１つの外部データベースへのアクセスにより処理可能であと評価され且つ前記利用者が前記１つの外部データベースにおける実行を指定しているときには、前記問合せは前記１つの外部データベースにおいて処理され、
前記問合せにおいて参照される全ての機能が前記１つの外部データベースへのアクセスにより処理可能でないと評価されるときは、前記問合せに含まれ前記１つの外部データベースにおいて実行されると指定される機能を前記１つの外部データベースにおいて実行した後、前記１つの外部データベースでは実行されない前記問合せ中の他の機能を、前記１つの外部データベースから実行結果を内部データベースに取り込んでその内部データベースにおいて実行することを特徴とするデータベース管理システムによって達成される。
【０００７】
本発明の目的は、
１つ又はそれ以上の外部のデータベースにアクセスする機能を有するデータベース管理システムおける問合せ方法であって、
（１）利用者から送られた問合せ中の機能を外部のデータベースで実行するかどうかの指定を取得するステップと、
（２）前記問合せにおいて参照される前記機能が１つの外部データベースへのアクセスによって処理可能かどうかおよび前記利用者によって前記１つの外部データベースにおいて実行するように指定されているかどうかを評価するステップと、
（３）記問合せにおいて参照される機能が前記１つの外部データベースへのアクセスにより処理可能であると評価されしかも前記利用者により実行が指定されているならば、前記問合せを前記１つの外部データベースにおいて処理するためのアクセス手順を生成するステップと、
（４）前記問合せにおいて参照される機能が前記１つの外部データベースへのアクセスにより実行可能でないと評価されるときは、前記問合せに含まれ前記１つの外部データベースにおいて処理できない機能を前記データベース管理システム内の内部データベースにおいて処理するためのアクセス手順を生成するステップと、を有することを特徴とするデータベース管理システムにおける問合せ方法によって達成される。
【００１０】
さらに上記の目的は
１つ又はそれ以上の外部のデータベースにアクセスする機能を有するデータベース管理システムおける問合せ実行プログラムであって、
（１）利用者から送られた問合せ中の機能を外部のデータベースで実行するかどうかの指定を取得する手順と、
（２）前記問合せにおいて参照される前記機能が１つの外部データベースへのアクセスによって処理可能かどうかおよび前記利用者によって前記１つの外部データベースにおいて実行するように指定されているかどうかを評価する手順と、
（３）前記問合せにおいて参照される機能が前記１つの外部データベースへのアクセスにより処理可能であると評価されしかも前記利用者により実行が指定されているならば、前記問合せを前記１つの外部データベースにおいて処理するためのアクセス手順を生成する手順と、
（４）前記問合せにおいて参照される機能が前記１つの外部データベースへのアクセスにより実行可能でないと評価されるときは、前記問合せに含まれ前記１つの外部データベースにおいて処理できない機能を前記データベース管理システム内の内部データベースにおいて処理するためのアクセス手順を生成する手順と、
を有することを特徴とするデータベース管理システムにおける問合せ実行プログラム
によって達成される。
【００１１】
【発明の実施の形態】
以下、図１〜図１１を用いて本発明の実施の形態について説明する。
図１は、本発明の実施の形態である外部のデータベースにアクセスする機能を有するデータベース管理システムの構成を示すものである。該外部のデータベースにアクセスする機能を有するデータベース管理システムは、問合せを行うクライアント１０１、クライアント１０１より問合せを受付け、問合せの実行を行う外部のデータベースにアクセスする機能を有するデータベース管理システム１０２、データベース１１０を管理するデータベース管理システム１０９を含むデータベースサーバ１０８、及び上記クライアント１０１、及びデータベースサーバ１０８を接続するネットワーク１０７、内部データベース１１２から構成される。外部のデータベースにアクセスする機能を有するデータベース管理システム１０２は、問合せの中の機能の実行場所を記述した定義ファイル１０６を読込み、機能実行可否設定表１０４を作成する定義情報取得ステップ１０３、外部のデータベースにアクセスする機能を有するデータベース管理システム１０２で使用する外部のデータベース管理システムの情報及び表定義情報を記憶するディクショナリ表１１１、及び機能実行可否設定表及びディクショナリ表１１１を参照してクライアント１０１から投入された問合せの最適化を行う最適化処理ステップ１０５を含む。
【００１２】
なお、図１ではクライアント１０１、外部のデータベースにアクセスする機能を有するデータベース管理システム１０２、データベース管理システム１０９は、それぞれ異なるマシンに存在し、それらがネットワーク１０７で接続されているが、これらクライアント１０１、外部のデータベースにアクセスする機能を有するデータベース管理システム１０２、データベース管理システム１０９が同一のマシンに配置してもよい。この場合、ネットワーク１０７は不要である。
【００１３】
図２は、定義ファイル１０６に記述する定義情報の記述例を示している。ユーザは、外部のデータベース管理システムの動作についての知見を元に、定義ファイル１０６を作成する。すなわち、ユーザの意図した最適化の方法がここで定義される。次に、定義ファイル１０６の構成について説明する。定義ファイル１０６は、該定義ファイルがデータベース管理システムの種類毎の定義であるのか、データベース管理システム及びバージョン毎の定義であるのか、あるいはデータベース毎の定義であるのかを示すレコード２０１と、問合せ中の各機能が外部のデータベースで実行できるかどうかを記述するレコード２０２とから構成される。図２の例では、定義ファイル１０６ａはレコード２０１ａの値がdbms=DBX1であるが、これは定義ファイル１０６ａに記述された内容がDBX1という種類のデータベース管理システムに対して有効であることを示している。定義ファイル１０６ｂのレコード２０１ｂの値はdbms=DBX1,ver=5.0であり、これは定義ファイル１０６ｂがDBX1という種類のデータベース管理システムのバージョン５．０に対して有効であるということを示している。定義ファイル１０６ｃのレコード２０１ｃの値はfs=db01であり、これは定義ファイル１０６ｃに記述された定義が外部のデータベースdb01に対して有効であることを示している。
【００１４】
図３は、機能実行可否設定表１０４の構成例を示した図である。機能実行可否設定表１０４は、データベース管理システムの種類毎の定義情報３０９を指すポインタ３０１、データベース管理システムの種類及びバージョン毎の定義情報３０９を指すポインタ３０２、及び外部のデータベース毎の定義情報３０９を指すポインタ３０３を持つ。定義情報３０９は、データベース管理システムの種類を記憶する領域３０４、バージョンを記憶する領域３０５、外部のデータベース名を記憶する領域３０６、他の定義情報へのポインタを記憶する領域３０７、問合せ中の機能名と該機能が外部のデータベースで実行できるかどうかの値を記憶するレコード３０８とから構成される。レコード３０８は、さらに機能名を格納する領域３１０と、値を記憶する領域３１１とから構成される。図３に示したステップにより、図２の定義ファイル１０６に定義された内容が、図１のデータベース管理システム１０２の機能実行可否設定表１０４に取り込むことが可能になる。この結果、ユーザの意図した最適化の方法をデータベース管理システム１０２に取込むことが可能となる。
【００１５】
図４は、図１の外部のデータベースにアクセスする機能を有するデータベース管理システム１０２で使用する、外部のデータベースの定義及び表定義を記憶するディクショナリ表１１１のテーブル構成例を示した図である。ディクショナリ表１１１は、列名を格納するフィールド４０１、表名を格納するフィールド４０２、外部のデータベース名を格納するフィールド４０３、外部のデータベースを管理するデータベース管理システムの種類を格納するフィールド４０４、及び該データベース管理システムのバージョンを格納するフィールド４０５から構成される。
【００１６】
図５は、定義情報取得ステップ１０３で実行される処理の例を示した図である。本処理では、全ての定義ファイル１０６を対象に次の処理を行う。まず、定義ファイル１０６に記述されたレコード２０１を取得する（ステップ５０１）。次に、定義情報３０９を作成し、レコード２０１の値を定義情報３０９に設定する。レコード２０１がデータベース管理システムの種類を示している場合（図２の１０６ａの場合）は、データベース管理システムの種類を記憶するフィールド３０４に該レコード２０１で指定されたデータベース管理システムの種類を格納する。レコード２０１がデータベース管理システムの種類及びバージョンを示している場合（図２の１０６ｂの場合）は、データベース管理システムの種類を記憶するフィールド３０４に該レコード２０１で指定されたデータベース管理システムの種類を格納し、データベース管理システムのバージョンを格納するフィールド３０５にレコード２０１で指定された該データベース管理システムのバージョンを格納する。レコード２０１が外部のデータベースの名称を示している場合（図２の１０６ｃの場合）は、外部のデータベースの名称を記憶するフィールド３０６に該レコード２０１で指定された外部のデータベースの名称を格納する（ステップ５０２）。
【００１７】
その後、現在処理している定義ファイル１０６のレコード２０２のそれぞれについて、次の処理繰返し行う（ステップ５０３ａ、５０３ｂ）。まず、定義情報３０９内に、問合せの機能毎の実行先を表すレコード３０８を作成する。次に、レコード２０２のコロン（：）の左辺に記述された値をレコード３０８の機能名領域３１０に、右辺に記述された値をレコード３０８の設定値領域３１１にそれぞれ格納する（ステップ５０４）。
【００１８】
現在処理している定義ファイル１０６の全てのレコード２０２についてステップ５０４の処理が完了したら、レコード２０１がデータベース管理システムの種類を示している場合は機能実行可否設定表のフィールド３０１から、レコード２０１がデータベース管理システムの種類とバージョンを示している場合は機能実行可否設定表のフィールド３０２から、レコード２０１が外部のデータベースの名称を示している場合は機能実行可否設定表のフィールド３０３から、作成した定義情報３０９をそれぞれポイントする。既にフィールド３０１、３０２、３０３から定義情報３０９がポイントされている場合は、ポイントされている先の定義情報３０９の次ポインタフィールド３０７から、次の定義情報３０９をさすように構成されている。
【００１９】
図６は、最適化処理ステップ１０５で実行される処理の例を示した図である。まず、定義定義情報取得ステップ１０３を用いて、定義ファイル１０６を機能実行可否設定表１０４に設定する（ステップ６０１）。クライアント１０１から問合せが入力されると（ステップ６０２）、入力された問合せに対して、問合せが含む外部のデータベース数が一つかつ問合せが含む全ての機能が外部サーバで実行と指定されているかどうかを判定する（ステップ６０３）。ステップ６０３が成立する場合はステップ６０１で入力された問合せを外部のデータベースで実行するためのコードを生成し（ステップ６０４）、問合せを外部のデータベースで実行する（ステップ６０５）。そうでない場合には、外部のデータベースで実行すると指定された機能を外部のデータベースで実行し、それ以外の機能を自システム１０２にデータを取得して実行するためのコードを生成し（ステップ６０６）、外部のデータベースで実行すると指定された機能を外部のデータベースで実行し、結果を内部データベース１１２に取得し、外部のデータベースで実行できない機能を実行し結果を得る（ステップ６０７）。
【００２０】
図７は、問合せの実行可否判定ステップ６０３で実行される処理の例を示した図である。まず、問合せに含まれる外部サーバの数を０に初期化する（ステップ７０１）。次に、問合せ中の各機能について、以下の処理を繰り返す（ステップ７０２ａ、７０２ｂ）。
【００２１】
図９の問合せを例に説明する。図９は、表T1を探索条件length(T1.c1)=10で探索した結果と、表T2を探索条件length(T2.c2)>15で探索した結果とを条件T2.c2>T1.c1で結合した結果を取得するという問合せである。また、この問合せの探索条件機能９０２ｂ（＝）及び９０２ｅ（＞）は、図２の定義ファイル１０６に、外部のデータベース管理システムDBX1で実行するように定義されている。また、機能９０２ａ（length）は、外部のデータベースdb01で実行するように定義されている（図２の定義ファイル１０６ｃ）。一方、機能９０２ｄのlengthは、外部のデータベースでは実行しないように定義されている（図２の定義ファイル１０６ｂ）。
【００２２】
問合せの内容が図９の内容の場合、まず、該機能９０２ａに含まれる機能が、図３の３０９で外部のデータベースで実行可と指定されているかどうかを調べる。この場合length機能９０２ａには列T1.c1のみが含まれるが、列は機能ではないため、該機能９０２ａは外部サーバで実行不可のマークが付与された機能を含まないと判定する（ステップ７０８）。
【００２３】
次に、機能が含むデータが一つの外部のデータベースに閉じているかどうかを判定する。これは、ディクショナリ表１１１を参照し、該機能に含まれる列指定が属する外部のデータベースの数を数え上げることにより行う（ステップ７０３）。該機能が複数の外部のデータベースにまたがる場合は、機能に「外部サーバで実行不可」をマークし、次の機能の判定を行う（ステップ７０６）。該機能が一つの外部のデータベースに閉じている場合は、機能を実行する先の外部のデータベース毎、該外部のデータベースを管理するデータベース管理システムの種類及びバージョンの毎、及び及び該データベース管理システムの種類毎の定義情報３０９を、機能実行可否設定表１０４より取得し（ステップ７０５）、該機能が外部サーバで実行されるよう指定されているかどうかを判定する（ステップ７０５）。該機能が外部のデータベース毎の定義情報３０９で実行可能と定義されている場合（該機能の名称を機能名フィールド３１０に持つレコード３０８が存在し、該レコード３０８の設定値フィールド３１１の値がＹＥＳの場合）、当該機能は外部のデータベースで実行するよう指定されていると判断する。一方、該レコード３０８の設定値フィールド３１１の値がＮＯの場合は、当該機能は外部のデータベースで実行するよう指定されていないと判断する。外部のデータベース毎の定義情報３０９に、該機能の名称を機能名フィールド３１０に持つレコード３０８が存在しない場合は、ステップ７０４で取得したデータベース管理システム及びバージョン毎の定義情報３０９を用いて、同様に該機能が外部のデータベースで実行可能と指定されているかどうかを判断する。データベース管理システムの種類及びバージョン毎の定義情報３０９にも、該機能の名称を機能名フィールド３１０に持つレコード３０８が存在しない場合は、ステップ７０４で取得したデータベース管理システム毎の定義情報３０９を用いて、同様に該機能が外部のデータベースで実行可能と指定されているかどうかを判断する。データベース管理システムの種類毎の定義情報３０９にも、該機能の名称を機能名フィールド３１０に持つレコード３０８が存在しない場合は、該機能は外部のデータベースで実行可能と指定されていると判断する（ステップ７０５）。その後、機能中の外部サーバとこれまで出現した外部のデータベースを比較し、異なっていればその数だけ問合せに含まれる外部サーバの数を増加する（ステップ７０７）。
【００２４】
図８は、機能実行先の外部のデータベースの定義情報３０９を取得するステップ７０４で実施される処理の例を示した図である。まず、ディクショナリ表１１１から定義情報を取得する対象の列が属する外部のデータベース名、該データベースを管理するデータベース管理システムの種類及びバージョンを取得する（ステップ８０１）。次に、機能実行可否設定表１０４のポインタ３０３からチェーンされている定義情報３０９のそれぞれについて、ステップ８０１で取得した外部のデータベース名と該定義情報３０９の外部のデータベース名フィールド３０６の値を比較する（ステップ８０２）。比較結果が等しい場合、該定義情報３０９を取得情報の対象とする（ステップ８０５）。次に、機能実行可否設定表１０４のポインタ３０２からチェーンされている定義情報３０９のそれぞれについて、ステップ８０１で取得したデータベース管理システムの種類と該定義情報３０９のデータベース管理システム種類フィールド３０４の値、及びステップ８０１で取得したバージョンと該定義情報３０９のバージョンフィールド３０５の値、をそれぞれ比較する（ステップ８０３）。両方の比較結果が等しい場合、該定義情報３０９を取得情報の対象とする（ステップ８０６）。次に、機能実行可否設定表１０４のポインタ３０１からチェーンされている定義情報３０９のそれぞれについて、ステップ８０１で取得したデータベース管理システムの種類と該定義情報３０９のデータベース管理システム種類フィールド３０４の値を比較する（ステップ８０４）。比較結果が等しい場合、該定義情報３０９を取得情報の対象とする（ステップ８０７）。最後に呼出し元は、ステップ８０５〜８０７で取得情報の対象とした定義情報３０９を取得する（ステップ８０８）。
【００２５】
以下、図２に示した定義ファイル１０６ａ〜１０６ｃから、図３に示す機能実行可否設定表１０４を作成する処理の例について説明する。該処理は、定義情報取得ステップ１０３を用いて行う。まずステップ５０１で定義ファイル１０６ａのレコード２０１ａを読む。レコード２０１ａには、dbms=DBX1と記述されているが、ここでdbms=は定義ファイルがデータベース管理システムの種類毎の定義であることを示しており、さらにデータベース管理システムの種類がDBX1であることを示している。従って、ステップ５０２により、定義情報３０９ａのデータベース管理システムの種類フィールド３０４ａにDBX1が設定される。次に、ステップ５０４でレコード２０２ａを取得し、機能名＝とそれが外部のデータベース（この場合はデータベース管理システムがDBX1である外部のデータベース）で実行可能であるかどうかを示した値（レコード２０２ａの場合はＹＥＳ）をレコード３０８ａの機能名フィールド３１０ａ及び設定値フィールド３１１ａにそれぞれ設定する。同様に、レコード２０２ｂも取得し、レコード３０８ｂを作成する。次に、ステップ５０５で該定義情報３０９ａのアドレスを機能実行可否設定表１０４に設定する。定義ファイル１０６ａの場合、レコード２０１ａにはdbms=DBX1と書かれていることから、該定義ファイルはデータベース管理システムの種類ごとの定義と判断し、フィールド３０１にアドレスを設定する。
【００２６】
定義ファイル１０６ｂの場合は、レコード２０１ｂに書かれている値はdbms=DBX1,ver=5.0であることから、定義情報３０９ｂのデータベース管理システムの種類フィールド３０４ｂにDBX1を、バージョンフィールド３０５ｂに5.0を設定する（ステップ５０１、５０２）。その後、レコード２０２ｃを読込み、レコード３０８ｃを作成する（ステップ５０４）。最後に、レコード２０１ｂにデータベース管理システムの種類とバージョンの両方が記述されていることから、該定義ファイル１０６ｂはデータベース管理システムの種類およびバージョンごとの定義（定義ファイル１０６ｂの場合はDBX1 5.0）と判断し、機能実行可否設定表１０４のポインタ３０２から該定義情報３０９ｂをポイントする（ステップ５０５）。
【００２７】
定義ファイル１０６ｃの場合は、レコード２０１ｃに書かれている値はfs=db01であることから、定義情報３０９ｃの外部のデータベース名フィールド３０６ｃにdb01を設定する（ステップ５０１、５０２）。その後、レコード２０２ｄを読込み、レコード３０８ｄを作成する（ステップ５０４）。最後に、レコード２０１ｃに外部のデータベースの名称が記述されていることから、該定義ファイル１０６ｃは外部のデータベースごとの定義（定義ファイル１０６ｃの場合はデータベースdb01）と判断し、機能実行可否設定表１０４のポインタ３０３から該定義情報３０９ｃをポイントする（ステップ５０５）。
【００２８】
以下、図９に示した問合せ９０１を例に、図６の問合せの外部サーバ実行可否判定がどのように判定されるかを示す。問合せ９０１に含まれる、判定対象となる機能９０２は、スカラ関数length（９０２ａ）、＝比較演算（９０２ｂ）、＞比較処理（９０２ｃ）、length（９０２ｄ）、＞比較処理（９０２ｅ）である。外部のデータベースへのアクセス機能を有するデータベース管理システム１０２は、クライアント１０１からの問合せ９０１を、ステップ６０１で受け取り、ステップ６０３で該問合せの実行可否判定をステップ６０３で行う。ステップ６０３では、図７に示すフローが実行される。
【００２９】
まず、問合せに含まれる外部のデータベース数を０に初期化した後、問合せの各機能について判定を行う。問合せ９０１の例では、まずlength機能９０２ａが含むデータがいくつの外部サーバにあるかを判定するが（ステップ７０３）、この場合length機能９０２ａに含まれる列の数が１であるため、ステップ７０３の判定結果はＹとなる。
【００３０】
次に、ステップ７０４でlength機能９０２ａの実行先の外部のデータベースの定義情報を取得する。ステップ７０４では図８に示したフローが実施される。まず、ステップ８０１で、ディクショナリ表１１１より判定対象の列が属する外部のデータベース、該データベースを管理するデータベース管理システムの種類、及びバージョンを取得する。この場合、列c1は図４に示すように表T1に属しているため、同一の列名及び表名を持つディクショナリ表１１１のレコード４１０ａの外部サーバ名、データベース管理システムの種類、及びバージョンが求めるデータであり、値はそれぞれdb01、DBX1、5.0となる。次にステップ８０２で、外部サーバ実行可否判定表１０４のフィールド３０３からのチェーンに繋がれている定義情報３０９ｃを参照する。定義情報３０９ｃの外部のデータベース名フィールド３０６ｃの値はdb01であり、これは先ほどステップ８０１で取得した外部のデータベース名の値と等しいため、定義情報３０９ｃを、返却対象とする（ステップ８０５）。次に、外部サーバ実行可否判定表１０４のフィールド３０２からの定義情報３０９ｂを参照する。定義情報３０９ｂのデータベース管理システム種類フィールド３０４ｂの値、及びバージョンフィールド３０５ｂの値はそれぞれDBX1、5.0であるが、これはステップ８０１で取得したデータベース管理システムの種類、及びバージョンとそれぞれ等しいため、定義情報３０９ｂを取得情報の対象とする（ステップ８０６）。次に、外部サーバ実行可否判定表１０４のフィールド３０１からの定義情報３０９ａを参照する。定義情報３０９ａのデータベース管理システム種類フィールド３０４ａの値はDBX1であるが、これはステップ８０１で取得したデータベース管理システムの種類と等しいため、定義情報３０９ｂを、取得情報の対象とする（ステップ８０６）。これらの処理の結果、ステップ７０４で、定義情報３０９ｃ、３０９ｂ、３０９ａを実行先の外部のデータベースの定義情報と取得する。
【００３１】
次に、ステップ７０５で、length機能９０２ａが外部のデータベースで実行するよう指定されているかどうかを調べる。定義情報３０９ｃ、３０９ｂ、３０９ａの順に、機能名３１０にlength()を持つレコード３０８を検索し、見つかった最初のレコードをの設定値フィールド３１１の値が外部サーバで実行されるかどうかを示している。この場合、レコード３０８ｄが最初に見つかるレコードになるが、該レコード３０８ｄの設定値はYESであり、該機能は外部サーバで実行できると判定する。次にステップ７０７で、これまで出現した外部のデータベースの数を計算するが、この場合初めて出てきたので１とする。
【００３２】
次に、機能＝（９０２ｂ）について、同様の判定を行う。この場合、ステップ７０８で該機能９０２ｂが外部のデータベースで実行不可とマークされた機能を含んでいるかどうかを判定するが、機能length（９０１ａ）は外部のデータベースで実行可能であるので含んでいないと判定する。次に、ステップ７０３で、該機能９０２ｂが含む外部のデータベース数を求めるが、該機能９０２ｂは列を含まず、該機能９０２ａは列はT1.c1を含むのみであるため、１と判定する。次にステップ７０４で該列T1.c1が含まれる外部のデータベースの定義情報を取得するが、この場合は、機能９０２ａの場合と同様定義情報３０９ｃ、３０９ｂ、３０９ａが実行先の外部のデータベースの定義情報として返却される。次に、ステップ７０５で該機能９０２ｂが外部のデータベースで実行されるよう指定されているかどうかを判定するが、この場合レコード３０８ａが最初に見つかるレコードであり、３０８ａの設定値フィールド３１１ａの値がYESであるため該機能９０２ｂも外部のデータベースで実行できると判定する。最後にステップ７０７で外部のデータベースの数を増加するが、この場合列T1.c1は先のlength機能９０２ａと同じ外部のデータベースであり、外部のデータベースの数の増加は行わない。
【００３３】
次に、機能＞（９０２ｃ）について同様の判定を行う。この場合、ステップ７０８で該機能９０２ｃが外部のデータベースで実行できるかどうかは、レコード３０８ｂの設定値フィールド３１1１ａで判定するが、該フィールド３１１ａの値はYESのため、外部のデータベースで実行不可とマークされた機能を含んでいないと判定する。ステップ７０３で該機能９０２ｃが含む外部のデータベースの数が一つかどうかを、ディクショナリ表１１１を参照して判定する。該機能９０２ｃに含まれる列は、T1.c1とT2.c2の２つである。列T1.c1が参照する外部のデータベースは、レコード４１０ａよりdb01、列T2.c2が参照する外部のデータベースは、レコード４１０ｂよりdb02であり異なっているため、ステップ７０３の判定結果はNとなり、該機能９０２ｃに外部のデータベースで実行不可のマークを付与する（ステップ７０６）。その後、ステップ７０７で外部のデータベースの数を増加させるが、新たにdb02が出現しており、問合せが参照する外部のデータベースの数は２となる（ステップ７０７）。
【００３４】
次に、ステップ７０５で、length機能（９０２ｄ）が外部のデータベースで実行するよう指定されているかどうかを調べる。この場合、レコード３０８ｃが最初に見つかるレコードになるが、該レコード３０８ｄの設定値フィールド３１１ｂの値はNOであり、該機能は外部サーバで実行できないので該機能９０２ｄに外部のデータベースで実行不可のマークを付与する。次にステップ７０７で、これまで出現した外部のデータベースの数を計算するが、該機能は列T2.c2のみを含み、かつ該列T2.c2は既に出現しているため外部のデータベースの数は２のままとする。
【００３５】
最後に、機能＝（９０２ｅ）について、同様の判定を行う。この場合、ステップ７０８で該機能９０２ｅが外部サーバで実行不可とマークされた機能を含んでいるかどうかを判定するが、既に機能９０２ｄが外部のデータベースで実行不可とマークされているため、該機能９０２ｅにも、外部サーバで実行不可のマークを付与する（ステップ７０６）。
【００３６】
次に、ステップ６０３で問合せが含む外部のデータベースが一つかどうかを判定するが、外部のデータベースの数が２であるため、図１０の１００３に示すようなアクセス手順を生成する（ステップ６０５）。９０１に示す問合せの場合、データベース管理システム自身が持つデータベースにアクセスする場合は図１０の１００１に示すように、表T1を条件length(T1.c1)=10でスキャンするコード（１００１ｂ）、表T2を条件length(T2.c2)>15でスキャンするコード（１００１ｃ）、及びコード１００１ｂと１００１ｃの実行結果を条件T1.c1>T2.c2で結合するコード１００１ａを生成する。ステップ６０５では、該コードのうち、表をスキャンする処理を、外部のデータベース上の表からデータを取得するSQL文に置換えたコードを生成する。この時、スキャンの条件が外部のデータベースで実行できる条件の場合は該条件を該SQL文に付与し、外部のデータベースで実行できない条件の場合は、外部のデータベースから取得したデータに対して、該外部のデータベースで実行できない条件で選択するコードを付与する。問合せ９０１の例では、表T1のデータを外部のデータベースから条件length(T1.c1=10で取得するSQL文を持つコード１００３ｂと、外部のデータベース上の表T2からデータを取得するコード１００３ｄと１００３ｄから取得したデータを条件length(T2.c2)>15で選択するコード１００３ｃと、コード１００３ｂと１００３ｃの実行結果を条件T1.c1>T2.c2で結合するコード１００３ａを生成する。
【００３７】
また、問合せ９０１が参照する外部のデータベースの数が一つであり、かつ全ての機能が外部のデータベースで実行できる場合は、ステップ６０４で、１００２に示すように、問合せ９０１全体を外部のデータベースで実行するコード１００２を生成する。
【００３８】
本発明を持たないデータベース管理システムの場合、スカラ関数length()を外部のデータベースで実行するかどうかをユーザの指定で切替えられないため、データベース管理システムにおいてlength()が外部のデータベースで実行できないように組み込まれていると、外部のデータベースdb01ではlength()を実行することが可能であってもlength()を含む条件（機能９０２ａ、９０２ｂ）を外部のデータベースで実行することができない。そのため、該問合せ９０１に対して生成するコードは図１１の１１０１に示すように、表T1から条件なしでデータを取得するコード１１０１ｃ、１１０１ｃを実行した結果から条件length(T1.c1)=10でデータを絞り込むコード１１０１ｂ、表T2から条件なしでデータを取得するコード１１０１ｅ、１１０１ｅで取得したデータを条件length(T2.c2)>15で絞り込むコード１１０１ｄ、及び１１０１ｂと１１０１ｄの実行結果を条件T1.c1>T2.c2で結合するコード１１０１ａを生成する。この結果外部のデータベースdb01から取得する表T1のデータを絞り込むことができず、問合せの性能が劣化する。
本発明では、ユーザがどの機能を外部のデータベースで実行するかを指定できるようになっているため、外部のデータベースdb01で該機能length()を実行するよう指定することで、外部のデータベースdb01から取得するデータの量を絞り込むことが可能となり、結果として問合せの性能を向上させることが可能となる。
【００３９】
【発明の効果】
本発明によれば、外部のデータベースにアクセスする機能を有するデータベース管理システムに、問合せ中のどの機能を外部のデータベースで実行させるかをユーザが指定できる手段を設けたため、利用者が意図したように問合せの最適化を実現することができ、問合せの実行性能を高速化することが可能となる。
【００４０】
本発明のさらに他の様態によれば、データベース管理システムの種類毎、データベース管理システムの種類・バージョン毎、および外部のデータベース毎に、問合せ中の機能を外部のデータベースで実行するかどうかを指定することができるため、指定に要する作業量を削減することが可能になる。また、データベース管理システムのバージョンや外部のデータベースによって指定の異なる部分のみに着目し、共通する項目を取出して定義できるため、指定に要する作業量を削減することが可能になる。
【図面の簡単な説明】
【図１】本発明が実施される外部のデータベースへのアクセス機能を有するデータベースシステムの構成例である。
【図２】定義ファイルの記述例である。
【図３】機能実行可否設定表の構成例である。
【図４】ディクショナリ表の構成例である。
【図５】定義情報取得ステップ１０３で実行される処理の例である。
【図６】最適化処理ステップ１０５で実行される処理の例である。
【図７】問合せの実行可否判定ステップ６０３で実施される処理の例である。
【図８】定義情報取得ステップ７０４で実施される処理の例である。
【図９】問合せの例である。
【図１０】問合せで生成されるアクセス手順を示したコードの例である。
【図１１】本発明で示した機能を持たない場合に問合せで生成されるアクセス手順を示したコードの例である。
【符号の説明】
１０１…クライアント
１０２…外部のデータベースへのアクセス機能を有するデータベース管理システム
１０３…定義情報取得ステップ
１０４…機能実行可否設定表
１０５…最適化処理ステップ
１０６…定義ファイル
１０７…ネットワーク
１０８…データベースサーバ
１０９…データベース管理システム
１１０…データベース
１１１…ディクショナリ表
１１２…内部データベース
【図１】
0004255624.tif 000002
【図２】
0004255624.tif 000003
【図３】
0004255624.tif 000004
【図４】
0004255624.tif 000005
【図５】
0004255624.tif 000006
【図６】
0004255624.tif 000007
【図７】
0004255624.tif 000008
【図８】
0004255624.tif 000009
【図９】
0004255624.tif 000010
【図１０】
0004255624.tif 000011
【図１１】
0004255624.tif 000012