(57)【特許請求の範囲】
【請求項１】
データベースに対するＳＱＬ文を受け取った際に、前記ＳＱＬ文が結合表を含むか否かを検出する第１の検出手段と、
前記第１の検出手段によって前記ＳＱＬ文が結合表を含むことが検出されると、前記結合表の結合方式および当該結合表がネスト構造を有している場合にはネスト構造を順次解析して、当該結合表を構成する前記データベースにおける基本表を探索する探索手段と、
前記探索手段によって探索された前記基本表ごとに前記ＳＱＬ文における結合条件まとめるとともに、前記基本表ごとに結合方式および結合条件に応じた条件フラグの設定を行い、前記アクセス文を前記基本表の並びから成るアクセスプランに変換して記憶領域に格納する変換手段と、
前記記憶領域に格納された前記アクセスプランにしたがってデータベースへのアクセス実行時に処理される中間オブジェクトを生成する生成手段とを備えたことを特徴とする関係データベースアクセス装置。
【請求項２】
SQL文による関係データベースに対するアクセスを解析して木構造のパースツリーを出力するSQL解析手段と、
前記パースツリーの先頭から順次に結合表の有無を検査するfrom句処理手段と、
該from句処理手段が結合表を検出するごとに呼び出され、前記パースツリー上の結合表を再帰的に処理して、当該結合表を親とする子を順次に探索し未処理の左端の結合表（開始表）を検出する結合表処理手段と、
該結合表処理手段が左（右）外結合表を検出するごとに呼び出され、当該外結合表を親とする右（左）側の子の基本表を前記探索と同方向、かつ順次に探索し、当該基本表の結合状態に基づいたnullセットフラグ処理を行う外結合表処理手段と、
前記結合表処理手段が内結合表を検出するごとに呼び出され、当該内結合表を親とする子の基本表を前記探索と同方向、かつ順次に探索し、当該基本表の結合状態に基づいたnullセットフラグ処理を行う内結合表処理手段と、
前記外結合表処理手段または前記内結合表処理手段が基本表を検出するごとに呼び出され、該基本表に、当該親の結合条件と、該結合条件を満たさない場合には前記nullセットフラグ処理の結果によりnull値を設定すべき旨との設定を行う結合条件設定手段と
を有し、上記各手段によって生成された最適化パースツリーに基づき、アクセス実行時に一括処理可能な中間オブジェクトを生成できるようにしたことを特徴とする関係データベースアクセス装置。
【請求項３】
前記SQL文がインデックス文を含む場合に、前記パースツリー中の全ての表について、インデックス定義の有無と、有の場合に当該表で使用可能か否かとを検査し、使用可能なインデックスを設定するインデックス設定手段を付加したことを特徴とする請求項２記載の関係データベースアクセス装置。
【請求項４】
前記結合表処理手段は、前記開始表の左表または右表が結合表なら、それぞれ左表または右表を開始表として再帰的に処理し、また前記from句処理手段が検出した開始表が外結合表または内結合表なら該開始表を処理対象表とし、
前記外結合表処理手段は、前記処理対象表の左表または右表が結合表なら左表または右表を処理対象表として再帰的に処理し、また前記処理対象表の左表が結合表でないが前記処理対象表と前記開始表が等しいなら、若しくは前記処理対象表の左表が結合表でないならnullセットフラグをセットして左表または右表を処理対象表とし、
前記内結合表処理手段は、前記開始表が左結合表の右下にあり、かつ前記処理対象表の左表が結合表なら該左表を、また、前記開始表の右表が結合表なら該右表をそれぞれ開始表として再帰的に処理し、また、前記開始表が左結合表の右下にあり、かつ前記処理対象表の左表が結合表でないとき及び前記開始表の右表が結合表でないときは前記nullセットフラグをセットし、また、前記開始表が左結合表の右下になく、かつ前記処理対象表の右表が基本表なら前記nuuセットフラグをセットせず、
前記結合条件設定手段は、前記nullセットフラグがセットされているか否かに応じて、前記処理対象表に結合条件を満たさない場合にはnull値を設定すべき旨の指定を行う
ことを特徴とする請求項２または３記載の関係データベースアクセス装置。
【請求項５】
SQL文による関係データベースに対するアクセスを解析して木構造のパースツリーを出力する手順と、
前記パースツリーの先頭から結合表の有無を検査する手順と、
該検査によって結合表を検出するごとに呼び出され、前記パースツリー上の結合表を再帰的に処理して、当該結合表を親とする子を順次に探索し未処理の左端の結合表（開始表）を検出する手順と、
該該探索によって左（右）外結合表を検出するごとに呼び出され、当該外結合表を親とする右（左）側の子の基本表を前記探索と同方向、かつ順次に探索し、当該基本表の結合状態に基づいたnullセットフラグ処理を行う手順と、
前記内結合表を検出するごとに呼び出され、当該内結合表を親とする子の基本表を前記探索と同方向、かつ順次に探索し、当該基本表の結合状態に基づいたnullセットフラグ処理を行う手順と、
前記探索によって基本表が検出されるごとに呼び出され、該基本表に、当該親の結合条件と、該結合条件を満たさない場合には前記nullセットフラグ処理の結果によりnull値を設定すべき旨との設定を行う手順と
を有し、上記各手順によって生成された最適化パースツリーに基づき、アクセス実行時に一括処理可能な中間オブジェクトを生成できるようにしたことを特徴とする関係データベースアクセス方法。
【請求項６】
SQL文による関係データベースに対するアクセスを解析して木構造のパースツリーを出力する手順と、
前記パースツリーの先頭から結合表の有無を検査する手順と、
該検査によって結合表を検出するごとに呼び出され、前記パースツリー上の結合表を再帰的に処理して、当該結合表を親とする子を順次に探索し未処理の左端の結合表（開始表）を検出する手順と、
該該探索によって左（右）外結合表を検出するごとに呼び出され、当該外結合表を親とする右（左）側の子の基本表を前記探索と同方向、かつ順次に探索し、当該基本表の結合状態に基づいたnullセットフラグ処理を行う手順と、
前記内結合表を検出するごとに呼び出され、当該内結合表を親とする子の基本表を前記探索と同方向、かつ順次に探索し、当該基本表の結合状態に基づいたnullセットフラグ処理を行う手順と、
前記探索によって基本表が検出されるごとに呼び出され、該基本表に、当該親の結合条件と、該結合条件を満たさない場合には前記nullセットフラグ処理の結果によりnull値を設定すべき旨との設定を行う手順と
を有し、上記各手順によって生成された最適化パースツリーに基づき、アクセス実行時に一括処理可能な中間オブジェクトを生成できるようにしたことを特徴とする関係データベースアクセス方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み込み可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、関係データベースアクセス装置および関係データベースアクセス方法、特に、外結合および内結合を含むＳＱＬの結合表機能に関する。
【０００２】
【従来の技術】
関係データベース（ｒｅｌａｔｉｏｎａｌ  ｄａｔａｂａｓｅ）が提唱されるまでの階層型データベースや網型データベースにおけるデータモデルは、周知のとおり、枝や網と呼ばれるポインタを用いて、それぞれセグメント間，レコード間を辿るようになっていた。関係データモデルは、このような枝や網と呼ばれるポインタを用いたデータ構造の概念を一切捨て、表という概念を持ち込んだ。表は、行と列で構成されており、行は横方向に見たときの基本構成であってレコードに相当し、列は表を縦方向に見たときの基本構成であってフィールドに相当する。
【０００３】
関係データベースは、このような表形式のデータモデルであることから、構造がシンプルで、データの種類の組合せが簡単にできるという特徴がある。したがって、多目的の利用が可能であり、特に、従来型のデータモデルでは不都合であった、検索のたびに検索条件のデータの組合せを変えるような非定型の処理にも好都合である。
【０００４】
関係デーベースをアクセスするための操作言語として、ＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）がＩＳＯとＪＩＳで標準化されている。ＳＱＬの指示は非手続き型であり、利用者は手続きをいちいちプログラムで記述する必要がないので、関係データベースＳＱＬの操作性を高める一因となっている。
【０００５】
ところで、関係データベースにおける各表は、データの冗長性を排除した正規化が施されているため、ＳＱＬでは、有意義なアクセスを実現するべく、複数の表を同時に操作できるようにしている。すなわち、複数の表の特定の列の値を結び合わせる結合表機能である。この場合、２つの表を結合するには、当然、比較可能な属性をもつ列が両方の表に存在しなければならない。
【０００６】
表の結合には、１つの表または両方の表から一致しない行を無視する内結合（ｉｎｎｅｒ  ｊｏｉｎ）と、一致しないデータの一部または全てを管理する外結合（ｏｕｔｅｒ  ｊｏｉｎ）とがある。さらに、外結合には、キーワードｊｏｉｎの左側に指定された表の一致しない行も残す左外結合（ｌｅｆｔ  ｏｕｔｅｒ  ｊｏｉｎ）と、キーワードｊｏｉｎの右側に指定された表の一致しない行を残す右外結合（ｒｉｇｈｔ  ｏｕｔｅｒ  ｊｏｉｎ）とがある。残された新しい行については、左（右）側に指定された表の列と、空白（ｎｕｌｌ）とが格納される。なお、このような表の結合については、１９９８年４月２７日、株式会社トッパン発行のＩＳＢＮ４−８１０１−９８２２−８、１５４￣１６８ページに記載されている。
【０００７】
では、ＪＩＳ  Ｘ  ３００５−１９９５で規定されている結合表を含む、従来のＳＱＬによる関係データベースの問合せについて図面を参照して具体的に説明する。
【０００８】
図１９は、表Ｔ２と表Ｔ３との左外結合をネスト構造００１として有する、表Ｔ１と表Ｔ２との左外結合を示すＳＱＬ文０００である。ネスト構造００１では、表Ｔ２の列１と表Ｔ３の列１とが一致することが結合条件であり、また、ＳＱＬ文０００では、表Ｔ１の列１と表Ｔ２の列１とが一致することが結合条件である。
【０００９】
従来、このような関係データベースをアクセスするには、まず、ネストした中間結果ＴＭＰを導出する。いま、表Ｔ１，Ｔ２，Ｔ３の各内容が、それぞれ図２０の参照番号００２，００３，００４に示すとおりであるものとすると、中間結果ＴＭＰは、上述の左外結合の説明により図２０の参照番号００５で示すようになる。
【００１０】
その後、図２１に示すように、中間結果ＴＭＰを表Ｔ１との左外結合の相手の表００７として、検索条件００８の下に、ＳＱＬ文００６を処理する。その最終結果ＲＥＳは、上述の左外結合の説明により図２２の参照番号００９で示すとおりになる。
【００１１】
【発明が解決しようとする課題】
しかしながら、上述した従来の関係データベースのアクセスでは、ネスト構造を意識して中間結果を作成し、それを更に結合するようなデータベースのアクセスが行われるため、無駄なコストが発生するという第１の問題点がある。
【００１２】
また、ネスト構造の順にデータベースをアクセスしていくと、結合条件００８において、本来ならば表Ｔ２の列１に付加されたインデックスの利用が有効なところ、表Ｔ２はＳＱＬ文００６で既に中間結果ＴＭＰとして処理されており、実際にはインデックスの利用ができないという第２の問題点がある。ここで、インデックスとは、指定された列の内容をデータ値でソートしたレコード位置情報のリストをいい、典型的なインデックス使用の意味は、表へのアクセスを高速化するものとして周知である。
【００１３】
さらに、ネスト構造を離れても、図２３に例示するように、Ｔ２  ｌｅｆｔ  ｏｕｔｅｒ  ｊｏｉｎ  Ｔ３からＴ３  ｌｅｆｔ  ｏｕｔｅｒ  ｊｏｉｎ  Ｔ２と結合の順番を入れ換えた場合に、結合結果はそれぞれ００１０，００１１で示す如く異なったものとなり交換則が成り立たない。また、３つ以上の表について外結合の順番を入れ換えると、その結合結果は異なったものとなり結合則も成り立たないことが容易に検証できる。したがって、外結合が含まれると、交換則と結合則を前提にした検索に有効なインデックスの検出が不可能であるという第３の問題点がある。
【００１４】
そこで、本発明の目的は、利用者や利用プログラムがネスト構造を意識する必要のない関係データベースの問合せ装置および関係データベースの問合せ方法を提供することにある。
【００１５】
また、本発明の他の目的は、インデックスを有効に利用できる高速な関係データベースの問合せ装置および関係データベースの問合せ方法を提供することにある。
【００１６】
【課題を解決するための手段】
本発明の第１の関係データベースアクセス装置は、アクセス文中に結合表を含むアクセスに対して、前記結合表のネスト構造および外結合の状態を、一元的な表の並びから成るアクセスに変換し、これによって中間オブジェクトを生成し、アクセス実行時に一括処理可能にしたことを特徴とする。
【００１７】
本発明の第２の関係データベースの問合せ装置は、アクセス文中に結合表を含むアクセスに対して、前記結合表のネスト構造および結合表を構成する基本表を探索し、該基本表ごとに、順次に、関連する結合条件と該結合条件を満たさない場合には、該基本表にｎｕｌｌ値を設定すべき旨の指定を行うことによって、前記結合表のネスト構造および外結合の状態を、一元的な表の並びから成るアクセスに変換し、これによって中間オブジェクトを生成し、アクセス実行時に一括処理可能にしたことを特徴とする。
【００１８】
本発明の第３の関係データベースの問合せ装置は、  ＳＱＬ文による関係データベースに対するアクセスを解析して木構造のパースツリーを出力するＳＱＬ解析手段と、
前記パースツリーの先頭から順次に結合表の有無を検査するｆｒｏｍ句処理手段と、
該ｆｒｏｍ句処理手段が結合表を検出するごとに呼び出され、前記パースツリー上の結合表を再帰的に処理して、当該結合表を親とする子を順次に探索し未処理の左端の結合表（開始表）を検出する結合表処理手段と、
該結合表処理手段が左（右）外結合表を検出するごとに呼び出され、当該外結合表を親とする右（左）側の子の基本表を前記探索と同方向、かつ順次に探索し、当該基本表の結合状態に基づいたｎｕｌｌセットフラグ処理を行う外結合表処理手段と、
前記結合表処理手段が内結合表を検出するごとに呼び出され、当該内結合表を親とする子の基本表を前記探索と同方向、かつ順次に探索し、当該基本表の結合状態に基づいたｎｕｌｌセットフラグ処理を行う内結合表処理手段と、
前記外結合表処理手段または前記内結合表処理手段が基本表を検出するごとに呼び出され、該基本表に、当該親の結合条件と、該結合条件を満たさない場合には前記ｎｕｌｌセットフラグ処理の結果によりｎｕｌｌ値を設定すべき旨との設定を行う結合条件設定手段と
を有し、上記各手段によって生成された最適化パースツリーに基づき、アクセス実行時に一括処理可能な中間オブジェクトを生成できるようにしたことを特徴とする。
【００１９】
更に、本発明の関係データベースの問合せ装置の好ましい実施の形態は、前記ＳＱＬ文がインデックス文を含む場合に、前記パースツリー中の全ての表について、インデックス定義の有無と、有の場合に当該表で使用可能か否かとを検査し、使用可能なインデックスを設定するインデックス設定手段を付加したことを特徴とする。
【００２０】
また、本発明の関係データベースアクセス方法は、ＳＱＬ文による関係データベースに対するアクセスを解析して木構造のパースツリーを出力する手順と、
前記パースツリーの先頭から結合表の有無を検査する手順と、
該検査によって結合表を検出するごとに呼び出され、前記パースツリー上の結合表を再帰的に処理して、当該結合表を親とする子を順次に探索し未処理の左端の結合表（開始表）を検出する手順と、
該探索によって左（右）外結合表を検出するごとに呼び出され、当該外結合表を親とする右（左）側の子の基本表を前記探索と同方向、かつ順次に探索し、当該基本表の結合状態に基づいたｎｕｌｌセットフラグ処理を行う手順と、
前記内結合表を検出するごとに呼び出され、当該内結合表を親とする子の基本表を前記探索と同方向、かつ順次に探索し、当該基本表の結合状態に基づいたｎｕｌｌセットフラグ処理を行う手順と、
前記探索によって基本表が検出されるごとに呼び出され、該基本表に、当該親の結合条件と、該結合条件を満たさない場合には前記ｎｕｌｌセットフラグ処理の結果によりｎｕｌｌ値を設定すべき旨との設定を行う手順と
を有し、上記各手順によって生成されたパースツリーおよびアクセスプランから、アクセス実行時に一括処理可能な中間オブジェクトを生成できるようにしたことを特徴とする。
【００２１】
本発明では、結合表およびそのネストの状態を全てオプティマイザ部で処理し、表を一括処理可能な一元的な表の並びに変換し、それに従った中間オブジェクトを生成するようにしたため、実行時に結合表単位で不必要な中間結果を生成する必要がなくなり、最適なデータベースアクセス性能が得られる。
【００２２】
さらに、結合表およびそのネスト状況を考慮した有効なインデックスの選択処理や、必要ならＪＩＳ  Ｘ  ３００５−１９９５に定める外結合のｎｕｌｌ値変換情報も全て同時にオプティマイザ部で処理可能であるため、上述の処理を、オプティマイザ部以外の他のコンポーネントの大幅な改造を伴うことなく容易に実現できる。
【００２３】
【発明の実施の形態】
次に、本発明の実施の形態について図面を参照して説明する。
【００２４】
図１は、本発明のＤＢＭＳの概要を示すブロック図である。図１において、ＳＱＬ文１１０（図８）による問合せを受けるＤＢＭＳ１００は、ＳＱＬ文１１０を解析しパースツリー１２０（図９）を出力するＳＱＬ解析部１０１と、パースツリー１２０から表結合の最適なアクセスプランとしての中間オブジェクト１８０（図１４）を生成するオプティマイザ部１０２と、中間オブジェクト１８０を解釈し実行する実行処理部１０３とから構成されている。
【００２５】
オプティマイザとは、本来、関係データベースの重要な機能の１つであるオプティマイジング（データベースの最適化）機能を司る、ＤＢＭＳのエンジンをいう。すなわち、オプティマイザは、ある表に対してＳＱＬ文を発行したときに、ユーザのＳＱＬ文の書き方に関係なく、最適なアクセス経路（処理手順）を検出する機能を有する。最適なアクセス経路とは、例えば、どのインデックスを使用して、どのようにテーブルをアクセスしたら、使用する資源が最少で済むか、ということである。具体例をあげれば、少量データの表である販売実績表と大量データの表である商品マスター表との結合操作では、前者を結合条件の基準にする方がパーフォマンスは上がるであろう。オプティマイザは、このようなデータベースの最適化を行うものである。
【００２６】
本発明のオプティマイザ部１０２は、データベースに対する問合せ等のアクセスを行うためのＳＱＬ文中に結合表を含む場合、結合表のネスト構造や外結合の状態を一元的な表の並びに変換しておき、データベースアクセスを行う実行処理部において、この表の並びを一括処理できるようにすることによって、データベースの最適化を図るものである。そのために、結合表のネスト構造および結合表を構成する基本表を探索し、該基本表ごとに、順次に、関連する結合条件と該結合条件を満たさない場合には、該基本表にｎｕｌｌ値を設定すべき旨の指定を行う。
【００２７】
本発明のオプティマイザ部は、図２にその処理遷移とともに示すように、ｆｒｏｍ句処理手段（図３）１０００と、結合表処理手段（図４）１１００と、外結合表処理手段（図５）１２００と、内結合表処理手段（図６）１３００と、結合条件設定手段（図７）１４００とを含む。そして、パースツリー１２０を入力して、これに含まれる結合表単位に、結合表とその配下の基本表とを１セットにして、表ごとに処理していく。各処理の対象となる表を処理対象表という。結合表およびそのネストの状態を全て処理して、表を一括処理可能な一元的な表の並びに変換し、それに従った中間オブジェクト１８０を生成する。
【００２８】
まず、ＳＱＬ文１１０について説明する。図８は、ＳＱＬ文１１０の具体例を示し、これによって、結合表を含むＤＢＭＳ１００に対する問合せを行う。図８において、ｏｕｔｅｒ  ｊｏｉｎは外結合を示し、ｉｎｎｅｒ  ｊｏｉｎは内結合を示す。このＳＱＬ文１１０は、２つの外結合を含む。１つ目は、表Ｔ２の列１と表Ｔ３の列１との一致を結合条件１１２とする、表Ｔ２と表Ｔ３との内結合（Ｔ２  ｉｎｎｅｒ  ｊｏｉｎ  Ｔ３  ｏｎ  Ｔ２．ｃ１  ＝Ｔ３  ．ｃ１）をネスト構造として有する。また、２つ目は、表Ｔ４の列１と表Ｔ５の列１との一致を結合条件１１３とする、表Ｔ４と表Ｔ５との左外結合である。
【００２９】
ＳＱＬ解析部１０１は、ＳＱＬ文１１０を入力してパースツリー１２０を出力する。パースツリー１２０は、図９に示すとおり、ＳＱＬ文１１０をツリー状に構成したものであり、木構造を逆さにした形状となっている。木の根に当るのが、図８のｆｒｏｍ句である。
【００３０】
図９を参照すると、図８の構造が視覚的に理解できよう。すなわち、ｆｒｏｍ句１３１をルートとして、１つ目の左外結合表１３２の次に、２つ目の左外結合表１３７が位置する。左外結合１３２は、左側を基本表（結合表でない表をいう）１３３（Ｔ１）、右側を内結合表１３４とし、さらに、内結合表１３４は左側を基本表１３５（Ｔ２）、右側を基本表１３６（Ｔ３）とする。また、２つ目の左外結合表１３７は、左側を基本表１３８（Ｔ４）、右側を基本表１３９（Ｔ５）とする。特定の表に対して、左側に位置する表を左表、右側に位置する表を右表ということにする。
【００３１】
次に、オプティマイザ部１０２における上述の各手段の機能について、図２に示す処理遷移図を参照して説明する。
【００３２】
ｆｒｏｍ句処理手段１０００は、ＳＱＬ解析部１０１が解析した結果であるパースツリー１２０を入力して、その先頭から結合表の有無をチェックし、結合表を検出するごとに結合表処理手段１１００を呼び出す（１００３）。
【００３３】
結合表処理手段１１００は、パースツリー１２０上の結合表を再帰的に処理し（１１０９，１１１２）、当該結合表を親とする子を順次に探索し、未処理の左端の結合表（開始表）を検出すると、その結合表が外結合表か、内結合表かによって外結合表処理手段１２００または内結合表処理手段１３００を呼び出す（１１０３，１１０６）。
【００３４】
外結合表処理手段１２００または内結合表処理手段１３００は、図８における結合条件１１１，１１２，１１３が存在するパースツリー１２０上の位置および結合の種類を識別し、それによって結合条件１１１，１１２，１１３を移動する位置と、結合条件１１１，１１２，１１３を満たさない場合にｎｕｌｌ値を設定すべき表を探索し、結合条件設定手段１４００を呼び出す（１２０３，１３０６等）。外結合表処理手段１２００，内結合表処理手段１３００においても、ネスト構造として、それぞれ外結合，内結合を含む場合には、結合表を再帰的に処理する（１２０３，１３０４等）。
【００３５】
これによって、外結合表処理手段１２００は、結合表処理手段１１００により検出された外結合表が、左外結合表ならこれを親とする右側の子の基本表を結合表処理手段１１００における探索と同方向、かつ、順次に探索し、一方、右外結合表ならこれを親とする左側の子の基本表を結合表処理手段１１００における探索と同方向、かつ、順次に探索することになる。また、内結合表処理手段１３００は、結合表処理手段１１００により検出された内結合表を親とする子の基本表を結合表処理手段１１００における探索と同方向、かつ、順次に探索する。
【００３６】
すなわち、結合表の開始表が外結合の場合は外結合表処理手段１２００が呼び出され、開始表の右以下の表に対し結合条件１１１および１１３が複製、移動され、また、結合条件を満たさない場合には、その表がｎｕｌｌ値を設定するよう、フラグ（ｎｕｌｌセットフラグという）を設定する（このことを、以下、「ｓｅｔ＿ｎｕｌｌ＝ＹＥＳを設定する」という）。
【００３７】
結合表の開始表が内結合の場合は内結合表処理手段１３００が呼び出され、開始表が外結合の右以下に位置する場合は、開始表の左以下および右以下の表に対し結合条件１１２が複製、移動され、また結合条件を満たさない場合にはｓｅｔ＿ｎｕｌｌ＝ＹＥＳを設定するべく結合条件設定手段１４００を呼び出す。結合表の開始表が外結合の左以下に位置する場合は、開始表の右以下の表に対し結合条件１１２が複製、移動され、また結合条件１１２を満たさない場合にはｎｕｌｌ値を設定しないように、ｎｕｌｌセットフラグを設定する（このことを、以下、「ｓｅｔ＿ｎｕｌｌ＝ＮＯを設定する」いう）べく結合条件設定手段１４００を呼び出す。
【００３８】
結合条件設定手段１４００は、処理対象表に対し、開始表に指定された結合条件１１１，１１２または１１３を設定し、結合条件を満たさない場合にｎｕｌｌ値を設定すべきであれば、実行処理部１０３が結合対象表にｎｕｌｌを設定するための準備（以下、「ｓｅｔ＿ｎｕｌｌ＿ＹＥＳを設定」と記す。）を、そうでなければ何も設定しないための準備（以下、「ｓｅｔ＿ｎｕｌｌ＿ＮＯ」と記す。）をする。
【００３９】
以上の各手段によって生成されたパースツリーを図１３に示す。
【００４０】
次に、図３〜図７に示す上述の各手段の流れ図をも参照しながら本発明の実施の形態の全体の動作を説明する。
【００４１】
まず、ＳＱＬ解析部１０１にＳＱＬ文１１０が入力されると、ＳＱＬ解析部１０１はＳＱＬ文１１０を解析、分解したパースツリー１２０を出力する。オプティマイザ部１０２はパースツリー１２０を入力し、まずｆｒｏｍ句処理手段１０００を実行する。
【００４２】
ｆｒｏｍ句処理手段１０００は、図３に示すように、パースツリー１２０のｆｒｏｍ句先頭から処理を開始し、結合表１３２を検出すると（ステップ１００１）、検出した結合表を開始表として（ステップ１００２）、結合表処理手段１１００を呼び出す（ステップ１００３）。以上の処理をｆｒｏｍ句の最後まで繰り返す（ステップ１００４，１００５）。
【００４３】
結合表処理手段１１００は、図４に示すように、開始表１３２が外結合であると認め（ステップ１１０１）、開始表１３２を処理対象表とし（ステップ１１０２）、外結合表処理手段１２００を呼び出す（ステップ１１０３）。また、開始表が内結合表であることが認められると（ステップ１１０４）、開始表を処理対象表とし（ステップ１１０５）、内結合表処理手段１３００を呼び出す（ステップ１１０６）。
【００４４】
その後、開始表の左表が結合表であることを検出すると（ステップ１１０７）、その左表を開始表とし（１１０８）、結合表処理手段１１００を再帰的に呼び出す（ステップ１１０９）。また、開始表の右表が結合表であることを検出すると（ステップ１１１０）、その右表を開始表とし（ステップ１１１１）、結合表処理手段１１００を再帰的に呼び出す（ステップ１１１２）。
【００４５】
外結合表処理手段１２００は、図５に示すように、処理対象表の左表が結合表であることが認められると（ステップ１２０１）、その左表を処理対象表とし（ステップ１２０２）、外結合表処理手段１２００を再帰的に呼び出す（ステップ１２０３）。しかし、ステップ１２０１で処理対象表の左表が結合表であることが認められず、かつ処理対象表が開始表と等しくなければ（ステップ１２０４）、ｎｕｌｌセットフラグをＹＥＳとするとともに左表を処理対象表とし（ステップ１２０５）、結合条件設定手段１４００を呼び出す（ステップ１２０６）。
【００４６】
同様に、処理対象表の右表が結合表であることが認められると（ステップ１２０７）、その左表を処理対象表とし（ステップ１２０８）、外結合表処理手段１２００を再帰的に呼び出す（ステップ１２０９）。しかし、ステップ１２０７で処理対象表の左表が結合表であることが認めらない場合は、ｎｕｌｌセットフラグをＹＥＳとするとともに右表を処理対象表とし（ステップ１２１０）、結合条件設定手段１４００を呼び出す（ステップ１２１１）。
【００４７】
内結合表処理手段１３００は、図６に示すように、開始表が左結合表の右下にあるかを検査し（ステップ１３０１）、その結果が真であれば外結合表処理手段１２００と類似の処理を行う（ステップ１３０２〜１３１１）。ただし、ステップ１３０４，１３０９で呼び出すのは内結合表処理手段１３００である。ステップ１３０１における検査の結果が偽であり、かつ処理対象表の右表が基本表であれば（ステップ１３１３）、ｓｅｔ＿ｎｕｌｌ＝ＮＯとし（ステップ１３１４）、結合表設定手段１４００を呼び出す（ステップ１３１５）。
【００４８】
結合条件設定手段１４００は、図７に示すように、ｓｅｔ＿ｎｕｌｌがＹＥＳに等しければ（ステップ１４０１）、処理対象表にｓｅｔ＿ｎｕｌｌ＿ＹＥＳを設定し（ステップ１４０２）、またステップ１４０１でｓｅｔ＿ｎｕｌｌがＮＯに等しければ処理対象表にｓｅｔ＿ｎｕｌｌ＿ＮＯを設定する（ステップ１４０３）。その後、処理対象表に開始表の条件を設定する（１４０４）。
【００４９】
では、オプティマイザ部１０２にパースツリー１２０（図９）が入力した場合を例として、本発明の実施の形態の動作を具体的に説明する。
【００５０】
まず、ｆｒｏｍ句処理手段１０００が呼ばれ、ｆｒｏｍ句処理手段１０００では、図９に示すｆｒｏｍ句の先頭１３１から結合表か否かを検査する（図３のステップ１００１）。先頭の表１３２はキーワード「ｌｅｆｔ  ｊｏｉｎ」から明らかに結合表であるから検査結果は真であるため、現在の表１３２を開始表とし（ステップ１００２）、結合表処理手段１１００を呼び出す（ステップ１００３）。
【００５１】
結合表処理手段１１００では、開始表１３２が外結合表か否かが検査され（図４のステップ１１０１）、結果は真であるため、開始表１３２を処理対象表とし（ステップ１１０２）、外結合表処理手段１２００を呼び出す（ステップ１１０３）。
【００５２】
外結合表処理手段１２００では、処理対処表１３２の左表１３３が結合表か否かが検査され（図５のステップ１２０１）、結果は偽であり、かつ、処理対象表１３２が開始表でもあるため（ステップ１２０４）、処理対象表１３２の右表１３４が結合表か否かが検査される（ステップ１２０７）。その結果は真であるため、右表１３４を処理対象表とし（ステップ１２０８）、外結合表処理手段１２００を再帰的に呼び出す（ステップ１２０９）。
【００５３】
この結果、再び、外結合表処理手段１２００の処理が開始され、処理対象表１３４の左表１３５が結合表か否かが検査され（図５のステップ１２０１）、結果は偽であり、かつ、処理対象表１３４と等しくないため（ステップ１２０４）、ｎｕｌｌセットフラグをＹＥＳとするとともに左表１３５を処理対象表とし（ステップ１２０５）、結合条件設定手段１４００を呼び出す（ステップ１２０６）。
【００５４】
ここで、ｎｕｌｌセットフラグとは、次ぎに説明する結合条件設定手段１４００において、処理対象表にｓｅｔ＿ｎｕｌｌ＿ＹＥＳを設定するかｓｅｔ＿ｎｕｌｌ＿ＮＯを設定するかを振り分ける（図７のステップ１４０１）ための制御フラグをいう。さらに、処理対象表にｓｅｔ＿ｎｕｌｌ＿ＹＥＳを設定すると、図１の実行処理部１０３が中間オブジェクト１８０を実行するときに、結合表にｎｕｌｌ値が設定され得ることになり、ｓｅｔ＿ｎｕｌｌ＿ＮＯを設定すると、結合表にｎｕｌｌ値を設定されることはなくなる。
【００５５】
結合条件設定手段１４００では、ｓｅｔ＿ｎｕｌｌ＝ＹＥＳか否かを検査し（図７のステップ１４０１）、上述のように、図５のステップ１２０５でｓｅｔ＿ｎｕｌｌ＝ＹＥＳ  とされていて、結果は真であるため、処理対象表１３５にｓｅｔ＿ｎｕｌｌ＿ＹＥＳを設定する（ステップ１４０２）。そして、処理対象表１３５に開始表１３２の検索条件Ｔ１．ｃ１＝Ｔ２．ｃ１を設定して（ステップ１４０４）、外結合表修理手段１２００のステップ１２０７へリターンする（ステップ１４０５）。上述の処理対象表１３５への設定結果は図１０において情報１３５ａとして示されている。
【００５６】
三度、外結合表処理手段１２００において、処理対象表１３４の右表１３６が結合表か否かが検査され（図５のステップ１２０７）、結果は偽であるため、ｓｅｔ＿ｎｕｌｌ＝ＹＥＳとするとともに右表１３６を処理対象表とし（ステップ１２１０）、結合条件設定手段１４００を呼び出す（ステップ１２１１）。
【００５７】
再び、結合条件設定手段１４００において、ｓｅｔ＿ｎｕｌｌ＝ＹＥＳか否かが検査され（図７のステップ１４０１）、結果は真であるため、処理対象表１３６にｓｅｔ＿ｎｕｌｌ＿ＹＥＳを設定し（ステップ１４０２）、処理対象表１３６に開始表１３２の検索条件Ｔ１．ｃ１＝Ｔ２．ｃ１を設定して（ステップ１４０４）、外結合表処理手段１２００のステップ１２１２へリターンする（ステップ１４０５）。上述の処理対象表１３６への設定結果は図１０において１３６ａとして示されている。
【００５８】
外結合表処理手段１２００では、結合表処理手段１１００のステップ１１０７へリターンする（図５のステップ１２１２）。
【００５９】
結合表処理手段１１００では、開始表１３２の左表１３３が結合表か否かが検査され（図４のステップ１１０７）、結果は偽であるため、開始表１３２の右表１３４が結合表であるか否かが検査され（ステップ１１１０）、結果は真であるため、その右表１３４を開始表とし（ステップ１１１１）、結合表処理手段１１００を再帰的に呼び出す（ステップ１１１２）。
【００６０】
結合表処理手段１１００においては、開始表１３４が外結合表かが検査され（ステップ１１０１）、結果は偽であるため、開始表１３４が内結合表かが検査される（１１０４）。その結果は真であるため、開始表１３４を処理対象表とし（ステップ１１０５）、内結合表処理手段１３００を呼び出す（ステップ１１０６）。
【００６１】
内結合表処理手段１３００では、開始表１３４が左外結合の右下にあるかが検査され（ステップ１３０１）、結果は真であるため、次に、処理対象表１３４の左表１３５が結合表かが検査される（ステップ１３０２）。その結果は偽であるため、ｓｅｔ＿ｎｕｌｌ＝ＹＥＳとされるとともに、左表１３５を処理対象表として（ステップ１３０５）、結合条件設定手段１４００を呼び出す（ステップ１３０６）。
【００６２】
結合条件設定手段１４００においては、ｓｅｔ＿ｎｕｌｌ＝ＹＥＳか否かを検査され（図７のステップ１４０１）、上述のように、図６のステップ１３０５でｓｅｔ＿ｎｕｌｌ＝ＹＥＳ  とされていて、結果は真であるため、処理対象表１３４にｓｅｔ＿ｎｕｌｌ＿ＹＥＳを設定する（ステップ１４０２）。そして、処理対象表１３５に開始表１３４の結合条件Ｔ２．ｃ１＝Ｔ３．ｃ１を設定して（ステップ１４０４）、内結合表修理手段１３００のステップ１３０７へリターンする（ステップ１４０５）。上述の処理対象表１３５への設定結果は、図１０において情報１３５ｂとして示されている。
【００６３】
内結合表修理手段１３００では、処理対象表１３４の右表１３６が結合表かが検査され（ステップ１３０７）、結果は偽であるため、ｓｅｔ＿ｎｕｌｌ＝ＹＥＳ  とされるとともに、右表１３６を処理対象表として（ステップ１３１０）、結合条件設定手段１４００を呼び出す（ステップ１３１１）。
【００６４】
結合条件設定手段１４００においては、ｓｅｔ＿ｎｕｌｌ＝ＹＥＳか否かを検査され（図７のステップ１４０１）、上述のように、図６のステップ１３０５でｓｅｔ＿ｎｕｌｌ＝ＹＥＳ  とされていて、結果は真であるため、処理対象表１３４にｓｅｔ＿ｎｕｌｌ＿ＹＥＳを設定する（ステップ１４０２）。そして、処理対象表１３６に開始表１３４の結合条件Ｔ２．ｃ１＝Ｔ３．ｃ１を設定して（ステップ１４０４）、内結合表修理手段１３００のステップ１３１２へリターンする（ステップ１４０５）。上述の処理対象表１３６への設定結果は、図１０において情報１３６ｂとして示されている。
【００６５】
内結合表修理手段１３００のステップ１３１２からは、結合表処理手段１１００におけるステップ１１１３（図４）へ、さらには、ｆｒｏｍ句処理手段１０００におけるステップ１００４（図３）へリターンし、ｆｒｏｍ句の最終かが検査される。その結果は、図９から明らかに偽であるため、次の表１３７へ進む（ステップ１００５）。
【００６６】
表１３７は、図９から明らかに結合表であるため（ステップ１００１）、現在の表１３７を開始表として、上述の処理と同様な処理を繰り返す。重複を厭わず、以下に説明する。
【００６７】
まず、結合表処理手段１１００が呼び出される（ステップ１００３）。結合表処理手段１１００では、開始表１３７が外結合表かが検査され（ステップ１１０１）、結果は真であるため、開始表１３７を処理対象対表として（ステップ１１０２）、外結合表処理手段１２００を呼び出す（ステップ１２０３）。
【００６８】
外結合表処理手段１２００では、処理対象表の左表１３８が結合表かが検査され（ステプ１２０１）、結果は偽であるため、次に、処理対象表１３７が開始表と等しいかが検査される（ステップ１２０４）。その結果は真であるため、開始表の右表１３９が結合表かが検査され（ステップ１２０７）、結果は偽であるため、ｓｅｔ＿ｎｕｌｌ＝ＹＥＳとするとともに、右表１３９を処理開始表として（ステップ１２１０）、結合条件設定手段１４００を呼び出す（ステップ１２１１）。
【００６９】
結合条件設定手段１４００においては、ｓｅｔ＿ｎｕｌｌ＝ＹＥＳか否かを検査され（図７のステップ１４０１）、上述のように、図５のステップ１２１０でｓｅｔ＿ｎｕｌｌ＝ＹＥＳ  とされていて、結果は真であるため、処理対象表１３９にｓｅｔ＿ｎｕｌｌ＿ＹＥＳを設定する（ステップ１４０２）。そして、処理対象表１３９に開始表１３７の結合条件Ｔ４．ｃ１＝Ｔ５．ｃ１を設定して（ステップ１４０４）、外結合表処理手段１２００のステップ１２１２へリターンする（ステップ１４０５）。上述の処理対象表１３９への設定結果は、図１０において情報１３９ａとして示されている。
【００７０】
以上のようにして得られたパースツリー１３０（図１０）における情報１３５ａおよび１３６ａは、図９のパースツリー１２０における左外結合による結合表１３２の右表に当る内結合の結合表１３４を構成する基本表１３５と１３６とのそれぞれについて、前述の左外結合の定義により、結合条件Ｔ１．ｃ１＝Ｔ２．ｃ１の下にｎｕｌｌ値が設定され得ることを示すことを意味する。また、情報１３５ｂおよび１３６ｂは、図９のパースツリー１２０における左外結合の結合表の右下に位置する内結合による結合表１３４を構成する基本表１３５と１３６のそれぞれについて、左外結合の定義により、結合条件Ｔ２．ｃ１＝Ｔ３．ｃ１の下にｎｕｌｌ値が設定され得ることを意味する。さらに、情報１３９ａは、図９のパースツリー１２０における左外結合による結合表１３７の右表に当る基本表１３９について、左外結合の定義により、結合条件Ｔ４．ｃ１＝Ｔ５．ｃ１の下にｎｕｌｌ値が設定され得ることを示すことを意味する。
【００７１】
次に、図１０のパースツリー１３０について、オプティマイザ部１０２は、基本表１３３，１３５，１３６，１３８，１３９および付加された情報１３５ａ，１３５ｂ，１３６ａ，１３６ｂ，１３９ａを再帰的にツリーの左から順に並べることによって、図１１に示すアクセスプラン１５０を得る。
【００７２】
このアクセスプラン１５０を上から下へ順に表Ｔ１，Ｔ２，Ｔ３，Ｔ４，Ｔ５を処理していくことを考えると、この内の１５２中の結合条件Ｔ２．ｃ１＝Ｔ３．ｃ１は、図１２に示すように、表Ｔ２および表Ｔ３の両方の読み込みが完了した時点１６２に移動するのが好都合である。こうして得られたアクセスプラン１６０（図１２）を木構造化したパースツリー１７０を図１３に示す。パースツリー１７０では、上述の考察の結果を反映して、パースツリー１３０（図１０）における表Ｔ２の検索条件１３５ｂを移動して、表Ｔ３の検索条件１７１としているのが解る。
【００７３】
アクセスプラン１６０は、上述のとおり、基本表を再帰的にツリーの左から順に並ベることにより得られる一元的な並びであるため、結合表のネスト構造を考慮することなく、その順に実行処理部１０３で処理可能な中間オブジェクト１８０のプランとなる。また、その検索結果もＪＩＳ  Ｘ  ３００５−１９９５で規定されている仕様を満たす。これは、実行時に結合表のネスト構造に従って結合表単位に中間結果を作成する等の従来のアクセスプランよりも高速であり、最適なデータベースアクセス性能を提供するものである。
【００７４】
オプティマイザ部１０２は、アクセスプラン１６０およびパースツリー１７０により、実行処理部１０３が処理可能な中間オブジェクト１８０（図１４）を生成する。中間オブジェクト１８０は、実行処理部１０３が解釈可能なデータベースアクセス手順を示すものである。
【００７５】
すなわち、図１４において、参照番号１８１で示される処理では表Ｔ１のレコードが先頭から順次に読み出され、同様に、１８２では表Ｔ２のレコードが先頭から順次に読み出され、１８３では表Ｔ３のレコードが先頭から順次に読み出され、１８４では表Ｔ４のレコードが先頭から順次に読み出され、１８５では表Ｔ５のレコードが先頭から順に読み出される。
【００７６】
その際、１８２の処理実行時には、検索条件１８２ａが評価され、評価結果が真であれば読み出されたレコード、偽であればｎｕｌｌ値をそれぞれ表Ｔ２のレコードとして設定する。
【００７７】
また、１８３の処理実行時には、検索条件１８３ａ，１８３ｂおよび１８３ｃが評価される。検索条件１８３ａの評価結果が真であれば読み出されたレコード、偽であればｎｕｌｌ値をそれぞれ表Ｔ３のレコードとして設定する。同様に、検索条件１８３ｂの評価結果が真であれば読み出されたレコード、偽であればｎｕｌｌ値をそれぞれ表Ｔ３のレコードとして設定し、検索条件１８３ｃの評価結果が真であれば読み出されたレコード、偽であればｎｕｌｌ値をそれぞれ表Ｔ３のレコードとして設定する。１８５の処理実行時には、検索条件１８５ａが評価され、評価結果が真であれば読み出されたレコード、偽であればｎｕｌｌ値をそれぞれ表Ｔ５のレコードとして設定する。
【００７８】
次に、本発明の他の実施の形態について説明する。
【００７９】
この実施の形態は、外結合表を用いたアクセスであっても、インデックス検索を可能にするものであって、図１２に示したアクセスプラン１６０を得るまでの手順は、第１の実施の形態と同じである。したがって、本実施の形態におけるオプティマイザ部１０４は、図１５に示すとおり、図２にインデックス選択手段２０００が付加されたものとなる。
【００８０】
いま、第１の実施の形態の説明で使用した図８のＳＱＬ文１１０に、図１６に示すようなインデックス１９０が付帯しているとする。インデックス文１９０におけるインデックス定義１９１は、表Ｔ２の列２をインデックスＩ２、表Ｔ３の列１をインデックスＩ３と、それぞれ定義することを意味する。このようなインデックス検索は、前述のように、データベースに対するアクセスを高速化するものとして知られている。
【００８１】
本実施の形態におけるオプティマイザ部１０４は、アクセスプラン１６０を得た後、これを入力としてインデックス選択手段２０００を呼び出す。インデックス選択手段２０００は、アクセスプラン１６０中の表１６ａ，１６ｂ，１６ｃ，１６ｄ，１６ｅの全てについて、インデックス定義１９１またはインデックス定義１９２によるインデックスが存在し、かつ、そのインデックスが結合条件１６１〜１６５で使用可能なものかを検査する。インデックスが結合条件で使用可能とは、そのインデックスにおいてインデックス定義された表について、結合条件が設定されていることをいう。検査の結果、使用可能なものがあれば、表に使用可能なインデックスの設定を行い、それをアクセスプランに反映することにより実行時処理の高速化を図る。
【００８２】
次に、図１７のフローチャートを参照して本実施の形態の全体の動作を説明する。
【００８３】
インデックス選択手段２０００は、アクセスプラン１６０の先頭の表から処理を開始し（図１７のステップ２００１）、表１６ａにインデックスが存在するか否かを検査する（ステップ２００２）。その結果は偽であり、また、表１６ａは最終表でないため（ステップ２００５）、次の表１６ｂへ進む（ステップ２００６）。
【００８４】
表１６ｂについても、インデックスが存在するか否かを検査し（ステップ２００２）、結果は真であるため、次に、結合条件１６１を参照してインデックス使用可能な条件が存在するか否かを検査する（ステップ２００３）。結果は偽であるため、最終表か否かの検査（ステップ２００５）を経て、次の表１６ｃへ進む（ステップ２００６）。
【００８５】
表１６ｃについてインデックスが存在するか否かを検査した（ステップ２００２）結果は真であるため、次に、検索条件１６２，１６３および１６４を参照してインデックス使用可能な条件が存在するか否かを検査する（ステップ２００３）。すると、検索条件１６２と１６４についてインデックス１９２を使用可能であることが解り、検査結果は真であるため、インデックス１９２を使用可能なものとして設定する（ステップ２００４）。そして、表１６ｃは最終表でないので（ステップ２００５）、次の表１６ｄへ進む（ステップ２００６）。
【００８６】
表１６ｄインデックスが存在するか否か検査する（ステップ２００２）。その結果は偽であり、また表１６ｄは最終表でないため（ステップ２００５）、次の表１６ｅへ進む（ステップ２００６）。
【００８７】
表１６ｅにインデックスが存在するか否かを検査する（ステップ２００２）。その結果は偽であり、表１６ｅは最終表であるため（ステップ２００５）、リターンする（ステップ２００７）。
【００８８】
以上の処理の結果、図１８に示すような中間オブジェクト２１０が得られる。この中間オブジェクト２１０において、参照番号２１１で示される処理は、インデックス使用可能と判断された表１６ｃに対するものであって、インデックスを用いて表Ｔ３を読み込むインデックス検索となる。
【００８９】
このように、本実施の形態によれば、結合表を用いたデータベースアクセスにおいても、検索に使用可能なインデックスを的確に設定できるため、インデックスを用いた最適なデータベースアクセス性能を得ることができる。これに対して、従来技術によるときは、結合表中に外結合を用いた問合せの場合、内結合のみの場合とは異なって、結合則が利用できないため、インデックス使用可能な条件が限られ、結合条件の移動を考慮した上で使用可能な選択する必要がある。
【００９０】
なお、以上に説明したデータベースアクセス方法をコンピュータに実行させるためのプログラムを半導体メモリ，磁気ディスク等のコンピュータ読み込み可能な記録媒体に記憶しておき、コンピュータに読み込ませて実行させるようにしてもよい。記録媒体に記憶されたプログラムは、コンピュータに読み込まれて、上述の第１の実施の形態、または第２の実施の形態におけるオプティマイザ部１０２または１０４と同様な動作を行う。
【００９１】
【発明の効果】
本発明の第１の効果は、結合表を含むデータベースのアクセスに対して、一元的な表の並びとした中間オブジェクトを生成する構成としたため、高速なデータベースアクセス性能を提供できるということである。これは、データベースアクセスを全て一元的な表の並びに変換するので、実行時に実行処理部が結合表のネスト構造や外結合を意識せずに処理することが可能となり、また、中間結果を生成する等の特別な処理を付加する必要がなくなるからである。
【００９２】
また、本発明の第２の効果は、結合表を含むデータベースアクセスに対しても、検索に使用可能なインデックスを的確に検出できるため、インデックスを使用した高速なデータベースのアクセス性能を提供できるということである。これは、結合表を含むアクセスを一元的な表の並びに変換するとともに、必要な条件を予め移動する手順を設けたので、内結合のみの場合以外の、結合則が適用できない場合であっても、使用可能なインデックスを的確に検出できるようになったからである。
【図面の簡単な説明】
【図１】本発明のＤＢＭＳの実施の形態を示すブロック図
【図２】本発明のＤＢＭＳにおけるオプティマイザ部の実施の形態の処理遷移図
【図３】図２におけるｆｒｏｍ句処理手段１０００の流れ図
【図４】図２における結合表処理手段１１００の流れ図
【図５】図２における外結合表処理手段１２００の流れ図
【図６】図２における内結合表処理手段１３００の流れ図
【図７】図２における結合条件設定手段１４００の流れ図
【図８】本発明の動作を説明するためのＳＱＬ文の例を示す図
【図９】図８のＳＱＬ文を木構造で表したパースツリーを示す図
【図１０】図２の実施の形態によって得られたパースツリーを示す図
【図１１】図１０のパースツリーから得られたアクセスプランを示す図
【図１２】図１１に示すアクセスプラン中の検索条件を並び替えたアクセスプランを示す図
【図１３】図１２のアクセスプランを木構造で表したパースツリーを示す図
【図１４】図２の実施の形態によって得られた中間オブジェクトを示す図
【図１５】本発明のＤＢＭＳにおけるオプティマイザ部の他の実施の形態の処理遷移図
【図１６】図１５の実施の形態を説明するためのインデックス文の例を示す図
【図１７】図１５の実施の形態におけるインデックス選択手段の流れ図
【図１８】図１５の実施の形態によって得られた中間オブジェクトを示す図
【図１９】従来技術を説明するためのＳＱＬ文の例を示す図
【図２０】従来技術を説明するための各表の内容を示す図
【図２１】従来技術における中間結果を用いたＳＱＬ文を示す図
【図２２】図１８のＳＱＬ文に対して得られた最終結果を示す図
【図２３】従来技術の問題点を説明するための図
【符号の説明】
０００          ＳＱＬ文
００１          ネスト構造
００６          ＳＱＬ文
１００          データベース管理システム（ＤＢＭＳ）
１０１          ＳＱＬ解析部
１０２          オプティマイザ部
１０３          実行処理部
１０４          オプティマイザ部
１１０          ＳＱＬ文
１２０          パースツリー
１３０          パースツリー
１５０          アクセスプラン
１６０          アクセスプラン
１７０          パースツリー
１８０          中間オブジェクト
１９０          インデックス文
２１０          中間オブジェクト
１０００        ｆｒｏｍ句処理手段
１１００        結合表処理手段
１２００        外結合表処理手段
１３００        内結合表処理手段
１４００        結合条件設定手段
２０００        インデックス選択手段
【図１】
0003584788.tif 000002
【図２】
0003584788.tif 000003
【図３】
0003584788.tif 000004
【図４】
0003584788.tif 000005
【図５】
0003584788.tif 000006
【図６】
0003584788.tif 000007
【図７】
0003584788.tif 000008
【図８】
0003584788.tif 000009
【図９】
0003584788.tif 000010
【図１０】
0003584788.tif 000011
【図１１】
0003584788.tif 000012
【図１２】
0003584788.tif 000013
【図１３】
0003584788.tif 000014
【図１４】
0003584788.tif 000015
【図１５】
0003584788.tif 000016
【図１６】
0003584788.tif 000017
【図１７】
0003584788.tif 000018
【図１８】
0003584788.tif 000019
【図１９】
0003584788.tif 000020
【図２０】
0003584788.tif 000021
【図２１】
0003584788.tif 000022
【図２２】
0003584788.tif 000023
【図２３】
0003584788.tif 000024