(57)【要約】【課題】ユーザがクエリ式の複数の代替形を実際にサブミットできるようにする方法および機構を提供する。【解決手段】クエリによって、複数の同等のフォームの選択候補が定式化される。選択候補は、同等のフォームを表す複数の引数を有するＣＨＯＯＳＥ演算子によって表される。ルックアップテーブルを生成して、ＣＨＯＯＳＥ引数以外の各ノードのグループを含める。ＣＨＯＯＳＥ引数について、生成されるテーブルに、メンバとして、すべてのＣＨＯＯＳＥ引数を有する単一の同等物グループが含まれる。オプティマイザの列挙アルゴリズムを適用して、追加のメンバおよび／またはグループを生成し、グループごとに、そのすべてのメンバが同等になる。コスト値を各グループの各メンバに割り当て、各グループの１メンバを、最小のコスト値のメンバとして選択する。グループの最小のコスト値のメンバによって、最適化されたツリーおよびクエリの最適化が定義される。【選択図】　　　　図８
2004030677.tif 000002
【特許請求の範囲】
【請求項１】
同等のフォームの少なくとも１対のうちの少なくとも１つの選択候補を含むクエリを最適化する方法であって、前記クエリは、演算子および前記演算子に関連する引数を含み、各選択候補は、同等のフォームの対応する対を表すＣＨＯＯＳＥ引数の少なくとも１対を有するＣＨＯＯＳＥ演算子によって表され、前記クエリの初期ツリー表現は、各演算子および各引数のノードを含み、各引数は、そのような演算子を表す前記ノードの子ノードとして前記ツリー内で表される演算子に関連し、前記方法は、
ルックアップテーブルの初期版を生成するステップであって、前記生成されるルックアップテーブルは、各ＣＨＯＯＳＥ演算子およびそのＣＨＯＯＳＥ引数の前記ノード以外の前記初期ツリーの各ノードのグループを含み、前記生成されるルックアップテーブルは、各ＣＨＯＯＳＥ演算子ノードおよびその前記ＣＨＯＯＳＥ引数ノードのそれぞれに関して、両方のＣＨＯＯＳＥ引数ノードを有する単一のグループをそのメンバとして含み、各演算子は、そのグループ内のメンバとして、前記演算子およびそれに関連する各引数のグループへの参照として表されるステップと、
前記テーブルの前記初期版に基づいて各グループの使用可能な同等物を生成するステップであって、
グループの追加のメンバ、
新しいグループの新しいメンバ、および
その組合せ
の少なくとも１つを生成するステップを含み、それにより、グループごとに、そのすべてのメンバは同等であるステップと、
各グループの各メンバにコスト値を割り当て、前記グループの最小のコスト値のメンバとして各グループのメンバを選択するステップであって、各メンバの前記割り当てられるコスト値は、そのようなメンバのコストと、前記メンバは１つまたは複数の他のグループを暗示する場合に各暗示されるグループの前記最小のコスト値のメンバのコストとを反映し、前記グループの前記最小のコスト値のメンバは、前記クエリの最適化されたツリーを定義し、それにより前記クエリの最適化を定義するステップと
を備えることを特徴とする方法。
【請求項２】
クエリ結果を作るために前記クエリの前記最適化を実行するステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項３】
前記テーブルの前記初期版を生成するステップは、前記ツリー内の各ＣＨＯＯＳＥ演算子ノードに関して、
前記ＣＨＯＯＳＥ演算子ノードの前記ＣＨＯＯＳＥ引数ノードを判定するステップと、
前記判定されたＣＨＯＯＳＥ引数ノードを含むように前記テーブル内のグループを定義するステップと、
前記ＣＨＯＯＳＥ演算子を参照する任意の他のグループを、その代わりに前記判定されたＣＨＯＯＳＥ引数ノードを有する前記定義されたグループを参照するように調整するステップと
を含むことを特徴とする請求項１に記載の方法。
【請求項４】
同等のフォームの対の少なくとも１つの選択候補を含むクエリを最適化する方法を実行するコンピュータ実行可能命令をその上に有するコンピュータ可読媒体であって、前記クエリは、演算子および前記演算子に関連する引数を含み、各選択候補は、同等のフォームの対応する対を表すＣＨＯＯＳＥ引数の対を有するＣＨＯＯＳＥ演算子によって表され、前記クエリの初期ツリー表現は、各演算子および各引数のノードを含み、各引数は、そのような演算子を表す前記ノードの子ノードとして前記ツリー内で表される演算子に関連し、前記方法は、
ルックアップテーブルの初期版を生成するステップであって、前記生成されるルックアップテーブルは、各ＣＨＯＯＳＥ演算子およびそのＣＨＯＯＳＥ引数のノード以外の前記初期ツリーの各ノードのグループを含み、前記生成されるルックアップテーブルは、各ＣＨＯＯＳＥ演算子ノードおよびそのＣＨＯＯＳＥ引数ノードのそれぞれに関して、両方のＣＨＯＯＳＥ引数ノードを有する単一のグループをそのメンバとして含み、各演算子は、そのグループ内のメンバとして、前記演算子およびそれに関連する各引数のグループへの参照として表されるステップと、
前記テーブルの前記初期版に基づいて各グループの使用可能な同等物を生成するステップであって、
グループの追加のメンバ、
新しいグループの新しいメンバ、および
その組合せ
の少なくとも１つを生成することを含み、グループごとに、そのすべてのメンバは同等であるステップと、
各グループの各メンバにコスト値を割り当て、前記グループの最小のコスト値のメンバとして各グループのメンバを選択するステップであって、各メンバの前記割り当てられるコスト値は、そのようなメンバのコストと、前記メンバは１つまたは複数の他のグループを暗示する場合に各暗示されるグループの前記最小のコスト値のメンバのコストとを反映し、前記グループの前記最小のコスト値のメンバは、前記クエリの最適化されたツリーを定義し、それにより前記クエリの最適化を定義するステップと
を備えることを特徴とするコンピュータ可読媒体。
【請求項５】
前記方法は、クエリ結果を作るために前記クエリの前記最適化を実行するステップをさらに備えることを特徴とする請求項４に記載の媒体。
【請求項６】
前記テーブルの前記初期版を生成するステップは、前記ツリー内の各ＣＨＯＯＳＥ演算子ノードに関して、
前記ＣＨＯＯＳＥ演算子ノードの前記ＣＨＯＯＳＥ引数ノードを判定するステップと、
前記判定されたＣＨＯＯＳＥ引数ノードを含むように前記テーブル内のグループを定義するステップと、
前記ＣＨＯＯＳＥ演算子を参照する任意の他のグループを、その代わりに前記判定されたＣＨＯＯＳＥ引数ノードを有する前記定義されたグループを参照するように調整するステップと
を含むことを特徴とする請求項４に記載の媒体。
【請求項７】
同等のフォームの対の少なくとも１つの選択候補を含むクエリを最適化する方法を実行するコンピュータであって、前記クエリは、演算子および前記演算子に関連する引数を含み、各選択候補は、同等のフォームの対応する対を表すＣＨＯＯＳＥ引数の対を有するＣＨＯＯＳＥ演算子によって表され、前記クエリの初期ツリー表現は、各演算子および各引数のノードを含み、各引数は、そのような演算子を表すノードの子ノードとして前記ツリー内で表される演算子に関連し、前記方法は、
ルックアップテーブルの初期版を生成するステップであって、前記生成されるルックアップテーブルは、各ＣＨＯＯＳＥ演算子およびそのＣＨＯＯＳＥ引数のノード以外の前記初期ツリーの各ノードのグループを含み、前記生成されるルックアップテーブルは、各ＣＨＯＯＳＥ演算子ノードおよびその前記ＣＨＯＯＳＥ引数ノードのそれぞれに関して、両方のＣＨＯＯＳＥ引数ノードを有する単一のグループをそのメンバとして含み、各演算子は、そのグループ内のメンバとして、前記演算子およびそれに関連する各引数のグループへの参照として表されるステップと、
前記テーブルの前記初期版に基づいて各グループの使用可能な同等物を生成するステップであって、
グループの追加のメンバ、
新しいグループの新しいメンバ、および
その組合せ
の少なくとも１つを生成するステップを含み、それにより、グループごとに、そのすべてのメンバは同等であるステップと、
各グループの各メンバにコスト値を割り当て、前記グループの最小のコスト値のメンバとして各グループのメンバを選択するステップであって、各メンバの前記割り当てられるコスト値は、そのようなメンバのコストと、前記メンバは１つまたは複数の他のグループを暗示する場合に各暗示されるグループの前記最小のコスト値のメンバのコストとを反映し、前記グループの前記最小のコスト値のメンバは、前記クエリの最適化されたツリーを定義し、これによって前記クエリの最適化を定義するステップと
を備えることを特徴とするコンピュータ。
【請求項８】
前記方法は、クエリ結果を作るために前記クエリの前記最適化を実行するステップをさらに備えることを特徴とする請求項７に記載のコンピュータ。
【請求項９】
前記テーブルの前記初期版を生成するステップは、前記ツリー内の各ＣＨＯＯＳＥ演算子ノードに関して、
前記ＣＨＯＯＳＥ演算子ノードの前記ＣＨＯＯＳＥ引数ノードを判定するステップと、
前記判定されたＣＨＯＯＳＥ引数ノードを含むように前記テーブル内のグループを定義するステップと、
前記ＣＨＯＯＳＥ演算子を参照するすべての他のグループを、その代わりに前記判定されたＣＨＯＯＳＥ引数ノードを有する前記定義されたグループを参照するように調整するステップと
を含むことを特徴とする請求項７に記載のコンピュータ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、データベース等に関する実行のために、いくつかのサブミットされた同等のクエリ式の中から選択する方法に関する。具体的には、本発明は、クエリ最適化技法に基づいて、同等のクエリ式から導出されるさまざまな代替物の中から最も効率的なクエリ式を選択する方法に関する。
【０００２】
【従来の技術】
リレーショナルデータベースシステムまたは他のデータベースシステムなどの複雑なデータベースシステムに関して、情報は、通常はお互いに相互参照する複数の表に保管される。通常、クエリ言語およびクエリエバリュエータ（ｑｕｅｒｙ　ｅｖａｌｕａｔｏｒ）が、そのようなデータベースシステムに保管された情報にアクセスし、それを使用するのに使用される。そのようなクエリ言語およびクエリエバリュエータの一例が、米国ワシントン州レッドモンドのＭＩＣＲＯＳＯＦＴ　Ｃｏｒｐｏｒａｔｉｏｎが配布するＭＩＣＲＯＳＯＦＴ　ＳＱＬ　ＳＥＲＶＥＲによって与えられる。
【０００３】
データベース管理システム（ＤＢＭＳ）に含めることができるものなどのクエリエバリュエータには、通常は、クエリ言語で記述された受け取られたクエリを最適化するクエリオプティマイザ（ｑｕｅｒｙ　ｏｐｔｉｍｉｚｅｒ）が含まれる。定義されたクエリに、さまざまな定義済みクエリコマンドによって結合される複数のクエリ副次式（ｑｕｅｒｙ　ｓｕｂ−ｅｘｐｒｅｓｓｉｏｎ、以下では「式」）を含められることに留意されたい。各クエリ式に、クエリコマンドによって結合される複数のクエリ式を含めることができる。クエリ最適化は、一般に既知であり、照会されるデータベースおよびその構造に基づく既知の規則に従って実行される。一般に、クエリオプティマイザは、受け取ったクエリに基づいて複数の代替物を生成し、その後、実行のために代替物のうちで最も効率的なものを選択する。
【０００４】
【発明が解決しようとする課題】
時々、ユーザによってサブミットされるかアプリケーションで記述されたクエリ内のクエリ式が、それぞれのフォームが同一の結果を作る、複数の代替のフォームをとる可能性がある。データベース表の基礎となるレイアウトに依存して、これらの同等物を、必ずオプティマイザによって推論できるわけではない。しかし、ユーザまたはアプリケーションは、どのフォームが最も効率的であるかを知らず、したがって、好ましいクエリ式としてどのフォームをサブミットすべきかを知らない。本質的に、ユーザまたはアプリケーションは、クエリオプティマイザにクエリ式のそれぞれのフォームを事前にサブミットし、その後、そのようなクエリオプティマイザによって最適化される、それらのフォームのうちで最も効率的なものを選択することができない。
【０００５】
したがって、クエリオプティマイザが、クエリ式のフォームのうちで最も効率的なものを選択し、それを最適化する方法で、ユーザがクエリ式の複数の代替フォームを実際にサブミットできるようにする方法および機構の必要性が存在する。
【０００６】
【課題を解決するための手段】
前述の必要は、同等の式の対の少なくとも１つの選択候補を含むクエリが最適化される、本発明によって満足される。クエリには、演算子および演算子に関係する引数が含まれ、各選択候補は、同等のフォームの対応する対を表すＣＨＯＯＳＥ引数の対を有するＣＨＯＯＳＥ演算子によって表される。
【０００７】
クエリの初期ツリー表現に、各演算子およびその各引数のノードが含まれる。ある演算子に関係する各引数は、ツリー内で、そのような演算子を表すノードの子ノードとして表される。ルックアップテーブルの初期版が、各ＣＨＯＯＳＥ演算子およびそのＣＨＯＯＳＥ引数のノード以外の初期ツリーの各ノードのグループを含むように生成される。生成されたルックアップテーブルには、各ＣＨＯＯＳＥ演算子ノードおよびそのＣＨＯＯＳＥ引数ノードに関して、そのメンバとして両方のＣＨＯＯＳＥ引数ノードを有する単一のグループが含まれる。各演算子は、そのグループ内のメンバとして、演算子およびそれに関連する各引数のグループへの参照として表される。
【０００８】
変換規則等を、テーブルの初期版の各グループの各メンバに適用して、グループの追加メンバ、新しいグループの新しいメンバ、およびその組合せの少なくとも１つを生成することができ、これによって、グループごとに、そのメンバのすべてが同等になる。コスト値が、各グループの各メンバに割り当てられ、各グループの１メンバが、グループの最小のコスト値のメンバとして選択される。各メンバの割り当てられたコスト値は、そのようなメンバのコストと、メンバが１つまたは複数の他のグループを暗示する場合に、各暗示されるグループの最小のコスト値のメンバのコストとを反映する。グループの最小のコスト値のメンバによって、クエリの最適化されたツリーが、したがって、クエリの最適化が定義される。
【０００９】
前述の要約ならびに本発明の実施形態の以下の詳細な説明は、添付図面と共に読まれるときによりよく理解される。本発明の例示のために、現在好ましい実施形態を図面に示す。しかし、本発明が、図示の正確な配置および手段に制限されないことを理解されたい。
【００１０】
【発明の実施の形態】
コンピュータ環境
図１および以下の説明は、本発明および／またはその一部を実施することができる適切なコンピューティング環境の簡単な全般的な説明を提供するためのものである。必要ではないが、本発明を、クライアントワークステーションまたはサーバなどのコンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の全般的な文脈で説明する。一般に、プログラムモジュールには、特定のタスクを実行するか特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等が含まれる。さらに、本発明および／またはその一部を、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な民生用電子機器、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ等を含む他のコンピュータシステム構成と共に実行することができることを諒解されたい。本発明は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境でも実践することができる。分散コンピューティング環境では、プログラムモジュールを、ローカルおよびリモートの両方のメモリストレージデバイスに配置することができる。
【００１１】
図１を参照すると、例示的汎用コンピューティングシステムに、処理ユニット１２１、システムメモリ１２２、および、システムメモリを含むさまざまなシステムコンポーネントを処理ユニット１２１に結合するシステムバス１２３を含む、普通のパーソナルコンピュータ１２０等が含まれる。システムバス１２３は、メモリバスまたはメモリコントローラ、周辺バス、およびさまざまなバスアーキテクチャのいずれかを使用するローカルバスを含む、複数のタイプのバス構造のいずれかとすることができる。システムメモリには、読取専用メモリ（ＲＯＭ）１２４およびランダムアクセスメモリ（ＲＡＭ）１２５が含まれる。起動中などにパーソナルコンピュータ１２０内の要素の間の情報の転送を助ける基本ルーチンを含む基本入出力システム１２６（ＢＩＯＳ）が、ＲＯＭ１２４に保管される。
【００１２】
パーソナルコンピュータ１２０には、さらに、ハードディスク（図示せず）から読み取り、これに書き込むハードディスクドライブ１２７、取外し可能磁気ディスク１２９から読み取り、これに書き込む磁気ディスクドライブ１２８、およびＣＤ−ＲＯＭまたは他の光学媒体などの取外し可能光ディスク１３１から読み取り、これに書き込む光ディスクドライブ１３０が含まれる。ハードディスクドライブ１２７、磁気ディスクドライブ１２８、および光ディスクドライブ１３０は、それぞれハードディスクドライブインターフェース１３２、磁気ディスクドライブインターフェース１３３、および光ドライブインターフェース１３４によってシステムバス１２３に接続される。ドライブおよびそれに関連するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびパーソナルコンピュータ１２０の他のデータの不揮発性ストレージを提供する。
【００１３】
本明細書で説明する例示的実施形態では、ハードディスク、取外し可能磁気ディスク１２９、および取外し可能光ディスク１３１が使用されるが、コンピュータによってアクセス可能なデータを保管することができる他のタイプのコンピュータ可読媒体も、例示的動作環境で使用できることを諒解されたい。そのような他のタイプの媒体には、磁気カセット、フラッシュメモリカード、ディジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）等が含まれる。
【００１４】
オペレーティングシステム１３５、１つまたは複数のアプリケーションプログラム１３６、他のプログラムモジュール１３７、およびプログラムデータ１３８を含む複数のプログラムモジュールを、ハードディスク、磁気ディスク１２９、光ディスク１３１、ＲＯＭ１２４、またはＲＡＭ１２５に保管することができる。ユーザは、キーボード１４０およびポインティングデバイス１４２などの入力デバイスを介してパーソナルコンピュータ１２０にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）に、マイクロホン、ジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、スキャナ等を含めることができる。これらおよび他の入力デバイスは、しばしば、システムバスに結合されるシリアルポートインターフェース１４６を介して処理ユニット１２１に接続されるが、パラレルポート、ゲームポート、またはｕｎｉｖｅｒｓａｌ　ｓｅｒｉａｌ　ｂｕｓ（ＵＳＢ）などの他のインターフェースによって接続することができる。モニタ１４７または他のタイプのディスプレイデバイスも、ビデオアダプタ１４８などのインターフェースを介してシステムバス１２３に接続される。モニタ１４７のほかに、パーソナルコンピュータには、通常は、スピーカおよびプリンタなどの他の周辺出力デバイス（図示せず）が含まれる。図１の例示的システムには、ホストアダプタ１５５、Ｓｍａｌｌ　Ｃｏｍｐｕｔｅｒ　Ｓｙｓｔｅｍ　Ｉｎｔｅｒｆａｃｅ（ＳＣＳＩ）バス１５６、および、ＳＣＳＩバス１５６に接続された外部ストレージデバイス１６２も含まれる。
【００１５】
パーソナルコンピュータ１２０は、リモートコンピュータ１４９などの１つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作することができる。リモートコンピュータ１４９は、もう１つのパーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイス、または他の一般的なネットワークノードとすることができ、メモリストレージデバイス１５０だけが図１に示されているが、リモートコンピュータ１４９には、通常は、パーソナルコンピュータ１２０に関して上で説明した要素の多数またはすべてが含まれる。図１に示された論理接続には、ローカルエリアネットワーク（ＬＡＮ）１５１および広域ネットワーク（ＷＡＮ）１５２が含まれる。そのようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットでありふれたものである。
【００１６】
ＬＡＮネットワーキング環境で使用されるときには、パーソナルコンピュータ１２０は、ネットワークインターフェースまたはネットワークアダプタ１５３を介してＬＡＮ１５１に接続される。ＷＡＮネットワーキング環境で使用されるときには、パーソナルコンピュータ１２０に、通常はモデム１５４または、インターネットなどの広域ネットワーク１５２を介する通信を確立する他の手段が含まれる。モデム１５４は、内蔵または外付けとすることができるが、シリアルポートインターフェース１４６を介してシステムバス１２３に接続される。ネットワーク化された環境では、パーソナルコンピュータ１２０に関して図示されたプログラムモジュール、またはその一部を、リモートメモリストレージデバイスに保管することができる。図示のネットワーク接続が、例示的であり、コンピュータの間で通信リンクを確立する他の手段を使用することができることを諒解されたい。
【００１７】
本発明のシステムおよび方法
本発明では、ユーザまたはアプリケーションが、あるクエリ式に関する複数の意味論的に同等のフォームを示すクエリをクエリエバリュエータのクエリオプティマイザにサブミットし、クエリオプティマイザが、クエリ式のフォームのうちで最も効率的な１つを選択し、それを最適化し、選択された最適化されたクエリが、事前に決定されたデータベースに対して実行される。具体的に言うと、アプリケーションのユーザによって使用されるクエリ言語に、「ＣＨＯＯＳＥ」言語要素が含まれ、これによって、そのようなユーザまたはアプリケーションが、クエリ式の２つのフォームが、少なくともそれによって作られる結果に関して、実際に同等であることを宣言できるようになる。
【００１８】
関係式の同等は、クエリオプティマイザの設計および動作の基本である。早期のオプティマイザでは、結合の再順序付けおよび選択のプッシュダウン（すなわち、結合および選択の代数的特性の利用）によって、クエリの単純な実行より１桁の性能改善をもたらすことができ、効果的に、高水準宣言型クエリ言語の使用が現実的になった。やがて、他の有用な同等物が識別され、新しいクエリ実行戦略が使用できるようになる。現在、リレーショナル式の同等物に関する、たとえば半結合、外部結合、ｇｒｏｕｐ　ｂｙなどの演算子を扱う、かなりの文献が存在する。どの場合にも、同等の式は、やはり、特定のクエリおよびデータ分布に関して１桁の性能向上につながる。データベースに対し宣言される制約が、代数的特性と関連するときに、追加の同等物を導出することができる。一意性、検査制約、および外部キー制約を使用して、空の副次式を検出し、ｇｒｏｕｐ　ｂｙを単純化し、並べ換え、不必要な結合を除去することができる。
【００１９】
クエリ式の同等なフォーム
クエリオプティマイザで「ネイティブに」コード化できる同等物情報のほかに、ユーザまたはアプリケーション開発者が、現在の制約機構を使用して効率的に宣言することができない同等物を知っていることがしばしばである。たとえば、図２に移って、販売データからの部分的集計の結果を保管するのにリレーショナルデータベースを使用するＯＬＡＰエンジンを検討されたい。詳細データは、表ｄｅｔａｉｌ（ａｍｏｕｎｔ（金額）、ｃｕｓｔｏｍｅｒ（顧客）、ｄａｔｅ（日付）、ｐｒｏｄｕｃｔ（製品）、ｓｔｏｒｅ（店）など）に保管される。各顧客が、総購入額に基づいて計算されるレーティングを有する。そのような顧客レーティングに基づいて、ＯＬＡＰエンジンが、下記を含む集計をマテリアライズする：
【００２０】
2004030677.tif 000003
【００２１】
2004030677.tif 000004
【００２２】
2004030677.tif 000005
【００２３】
ここで、ユーザが、製品および顧客レーティングごとの総売上を要求すると仮定する。図２から諒解されるように、そのような情報は、２つの事前に集計される表、ｔａｂｌｅＣｒＰＳまたはｔａｂｌｅＣｒＰＤのいずれかをさらに集計することによって計算することができる。言い換えると、そのようなクエリ式は、少なくとも２つの同等のフォームをとることができる。しかし、重要なことに、クエリ式のどのフォームをサブミットしなければならないかが即座にわかる可能性は低い。具体的に言うと、図２に示されたデータベースの構造に基づいてクエリ式のどのフォームを最も効率的に実行できるかが即座にわかる可能性は低い。通常、最も効率的に実行されるクエリは、データベース内のデータ分布および使用可能なデータベース索引に依存する。
【００２４】
ＣＨＯＯＳＥ演算子
本発明の一実施形態では、クエリ式の両方のフォームが、「ＣＨＯＯＳＥ」演算子によってＯＬＡＰエンジンにサブミットされ、これによって、ＯＬＡＰエンジンに関連するクエリオプティマイザが、クエリ式の両方のフォームを同等であるものとして関連付ける。あるシナリオでは、ＣＨＯＯＳＥ演算子が、複数の入力を有する関数として働き、この入力のそれぞれが、クエリ式の１つのフォームに対応する。もう１つのシナリオでは、ＣＨＯＯＳＥ演算子が、クエリ式のフォームの対を結合し、構文的にはこの対の間に挿入される。後者の場合に、複数の入れ子になったＣＨＯＯＳＥ演算子を使用して、より多数のクエリ式のフォームを結合できることに留意されたい。
【００２５】
どちらの場合でも、ＣＨＯＯＳＥ演算子の結果は、クエリ式のフォームの結合された対の１つが、実行のためにクエリオプティマイザによって選択され、実際に実行されることである。クエリオプティマイザが、コンピュータリソース、時間などを考慮に入れた期待されるコストに基づいて最も効率的なフォームを選択すると仮定されることに留意されたい。もちろん、クエリオプティマイザは、本発明の趣旨および範囲から逸脱せずに、他の適当な原理に基づいて選択することができる。本質的に、クエリオプティマイザは、ＣＨＯＯＳＥ演算子に固有のクエリ式のフォームの間のユーザ定義の同等物に基づいて選択する。したがって、クエリオプティマイザが「ネイティブ」同等物を生成する際に、クエリオプティマイザは、「ユーザ」同等物としてＣＨＯＯＳＥ演算子によって定義されるクエリ式のフォームをも定義し、ネイティブ同等物およびユーザ同等物を同様の方法で扱う。
【００２６】
図２のＯＬＡＰデータベースについて、製品および顧客ランキングごとの総売上を、下記のビューによって定義することができる。
【００２７】
2004030677.tif 000006
【００２８】
すなわち、製品および顧客ランキングごとの総売上のクエリ式を、構文ステートメントＡ　ＣＨＯＯＳＥ　Ｂと表すことができ、ここで、ＡはｔａｂｌｅＣｒＰＳからの選択を表し、ＢはｔａｂｌｅＣｒＰＤからの選択を表す。ＣＨＯＯＳＥが、他のデータ演算子に関して完全に合成的であることに留意されたい。ＣＨＯＯＳＥを、最上位の演算子として使用する必要はなく、任意の副クエリ、導出テーブル、またはビューで使用することができる。
【００２９】
本発明の一実施形態では、そのようなビューまたはクエリをクエリオプティマイザにサブミットすることができ、そのようなクエリオプティマイザは、クエリ式のより効率的なフォームを選択する。そのような実施形態では、そのようなクエリ式がより大きいクエリの副部分としてクエリオプティマイザにサブミットされる場合もあり、この場合に、クエリオプティマイザは、より大きいクエリの最適化の一部としてクエリ式のより効率的なフォームを選択する。
【００３０】
クエリオプティマイザ
本発明の一実施形態では、ＣＨＯＯＳＥ演算子が、米国ワシントン州レッドモンドのＭＩＣＲＯＳＯＦＴ　Ｃｏｒｐｏｒａｔｉｏｎが配布する前述のＭＩＣＲＯＳＯＦＴ　ＳＱＬ　ＳＥＲＶＥＲを含む市販製品で使用されるものなどのメモアイジング（ｍｅｍｏ−ｉｚｉｎｇ）オプティマイザフレームワークに基づく代数クエリオプティマイザに統合される。もちろん、他のフレームワークを、本発明の趣旨および範囲から逸脱せずに使用することができる。
【００３１】
そのようなクエリオプティマイザフレームワークの全般的な説明を、以下で示す。
【００３２】
図３に移ると、実行されるクエリを、ｎレベルツリー１０に代数化することができ、ツリー１０の各ノードが、拡張されたリレーション代数の演算子または引数に対応することがわかる。このツリー１０は、下記のクエリに基づく。
（Ｓｃａｎ　Ａ　ＪＯＩＮ　Ｓｃａｎ　Ｂ）　ＪＯＩＮ　Ｓｃａｎ　Ｃ
【００３３】
演算子の引数が、いくつかの場合に、別の演算子（第２のＪＯＩＮに関する第１のＪＯＩＮなど）または実際の引数（第１のＪＯＩＮに関するＳｃａｎ　Ａなど）である場合があることに留意されたい。
【００３４】
図からわかるように、この照会の結果は、ツリー１０の最上部であり、ノードは、ツリーの構造に従って、下から上に適用される。その結果、各ノードが、副結果を表し、第ｎ層の副結果が、第（ｎ＋１）層でリンクされるノードに適用されて、もう１つの副結果が達成されるか、最上層でのクエリの結果が達成される。
【００３５】
重要なことに、クエリオプティマイザは、コスト関数を使用して、各副結果および結果を達成するコストを推定する。コスト関数は、一般に既知であるか、あるいは関連する人に明白であろうから、本明細書で詳細に説明する必要はない。通常、コスト関数は、副結果を達成するのに必要な時間に関する推定値を提供するが、コスト関数が、本発明の趣旨および範囲から逸脱せずに、他のタイプの推定値を提供することができる。
【００３６】
重要なことに、クエリオプティマイザは、副結果を有する部分的プランとしてツリー１０内の各ノード（各演算子および各引数を含む）を検討し、部分的プランごとに、既知の意味論的に同等のプランを生成する。その後、コスト関数を使用して、クエリオプティマイザは、各部分的プランおよび同等物のコストを判定し、それらのうちで最もコストの低いものを選択する。
【００３７】
図４に移ると、図３の各演算子および各引数とその同等物およびコストに関する情報が、最適化処理中にクエリオプティマイザによって検討されるすべての演算子／引数およびその同等物を保持するルックアップテーブルまたは構造体１２で維持されることがわかる。ルックアップテーブル１２は、グループ１４に編成され、各グループ１４は、テーブル１２内のエントリを有する。各グループ１４に、所与の副結果を実施するすべての演算子／引数およびその同等物が含まれる。
【００３８】
図５に移ると、クエリが、まず、クエリオプティマイザによって受け取られ（ステップ５０１）、クエリオプティマイザが、受け取ったクエリを代数化して、図３のツリーなどの初期ツリー１０を作る（ステップ５０３）ことがわかる。そのようなツリー１０を、暗に構成するか実際に構成することができることに留意されたい。通常、受け取ったクエリの実行は、準最適であり、したがって、オプティマイザが必要である。クエリオプティマイザは、図４に示されたものなどのルックアップテーブル１２の初期版を生成することから始める（ステップ５０５）。テーブル１２内で、演算子および引数を含む図３のツリーからのすべてのノードが、異なるグループ１４に割り当てられることに留意されたい。各引数は、引数自体としてそのグループ１４内で表現されるが、各演算子は、演算子およびそれに関連する引数（すなわち、演算子のノードの子）としてそのグループ１４内で表現される。したがって、演算子の子ノードへの参照のそれぞれが、そのような子のグループ１４への参照に置換される（ステップ５０７）。したがって、テーブル１２内の各演算子は、もはや引数または他の演算子を参照するのではなく、引数または他の演算子を有する対応するグループ１４を参照する。ツリー１０の最上レベル（すなわち最終的な結果）を表すグループ１４を、ルートグループ１４と称する。
【００３９】
したがって、要約すると、図３に示されたツリー１０は、次の（第２）レベルからの第２のＪＯＩＮ演算子およびＳｃａｎ　Ｃ演算子を結合する第１のＪＯＩＮ演算子を有するルート（第１）レベルを含む３つのレベルを有し、第２のＪＯＩＮ演算子は、次の（第３）レベルからのＳｃａｎ　Ａ演算子およびＳｃａｎ　Ｂ演算子を結合する。それに対応して、図４の初期テーブル１２は、５つのグループ１４を有し、グループ１は、メンバとしてＳｃａｎ　Ａを有し、グループ２は、メンバとしてＳｃａｎ　Ｂを有し、グループ３は、メンバとしてグループ１（Ｓｃａｎ　Ａを有する）およびグループ２（Ｓｃａｎ　Ｂを有する）の第２のＪＯＩＮを有し、グループ４は、メンバとしてＳｃａｎ　Ｃを有し、ルートグループは、メンバとしてグループ３（第２のＪＯＩＮを有する）およびグループ４（Ｓｃａｎ　Ｃを有する）の第１のＪＯＩＮを有する。
【００４０】
実際の最適化処理中に、図４のテーブル１２のメンバのそれぞれに、変換規則を適用することができる（ステップ５０９）。そのような変換規則は、一般に既知であるか、あるいは関連する人に明白であろうから、本明細書で詳細に説明する必要はない。一般に、特定のメンバに対する特定の変換の結果は、それぞれが特定のメンバと同等であり、したがって特定のメンバと同一のグループ１４になる１つまたは複数のメンバ演算子になるか、おそらくは新しいグループ１４を含む複数のグループ１４にまたがる複数のメンバになる可能性がある。変換が検索空間全体にまたがることを保証するために、細心の注意を払う。
【００４１】
重要なことに、変換規則が、複数の同等のフォームを生成するのに使用される技法の１つにすぎないことに留意されたい。したがって、複数の同等のフォームを生成する他の適当な技法のどれであっても、本発明の趣旨および範囲から逸脱せずに使用することができる。一般に、代替物のテーブル１２は、クエリの各式の複数の同等のフォームを列挙するのに使用される。そのような列挙は、前述の変換規則および動的プログラミング結合列挙を含むさまざまな方法で代数的に達成される。どの場合でも、アルゴリズムが、演算子およびデータベースで宣言される制約の既知の特性に基づいて各クエリ式の複数の同等のフォームを生成するのにクエリオプティマイザの列挙コンポーネントによって使用される。
【００４２】
図６に、変換規則が適用された後のテーブル１２を示す。図からわかるように、変換に基づいて、グループ３が、当初に存在した１　ＪＯＩＮ　２メンバに加えて、その同等物として、メンバとして２　ＪＯＩＮ　１を有し、ルートグループが、当初に存在した３　ＪＯＩＮ　４メンバに加えて、その同等物として、メンバとして４　ＪＯＩＮ　３を有する。さらに、グループ５および６が、新しいメンバと共に追加され、ルートグループが、第１および第２のＪＯＩＮを本質的に異なる順序で実行できることを反映する追加の同等のメンバを有する。
【００４３】
すべての同等のメンバがテーブル１２で定義されたならば、クエリオプティマイザは、各メンバにコスト値を割り当てるが、このコスト値は、個々のメンバのコストだけではなく、そのような個々のメンバによって暗示される最小のコストのメンバのコストも反映する（ステップ５１１）。したがって、「親」グループの最小のコストのメンバを計算するために、親グループのメンバのいずれかによって参照される各「子」グループが、まず、計算された最小のコストのメンバを有しなければならない。具体的に言うと、ルートグループの最小のコスト値のメンバを計算するために、クエリオプティマイザが、比喩的に図３のツリーの最下部から開始し、最上部に達するまで上向きに作業する。
【００４４】
具体的に言うと、クエリオプティマイザは、Ｓｃａｎ　Ａのコスト値、したがってグループ１の最小のコスト値を計算し；Ｓｃａｎ　Ｂのコスト値、したがってグループ２の最小のコスト値を計算し；グループ１および２の最小のコスト値に基づいて１　ＪＯＩＮ　２および２　ＪＯＩＮ　１のコスト値を計算し、少ない方をグループ３の最小のコスト値として選択し；Ｓｃａｎ　Ｃのコスト値、したがってグループ４の最小のコスト値を計算し；グループ１および４の最小のコスト値に基づいて１　ＪＯＩＮ　４および４　ＪＯＩＮ　１のコスト値を計算し、少ない方をグループ５の最小のコスト値として選択し；グループ２および４の最小のコスト値に基づいて４　ＪＯＩＮ　２および２　ＪＯＩＮ　４のコスト値を計算し、少ない方をグループ６の最小のコスト値として選択し；その後、グループ１〜６の最小のコスト値に基づいて３　ＪＯＩＮ　４、４　ＪＯＩＮ　３、５　ＪＯＩＮ　２、２　ＪＯＩＮ　５、６　ＪＯＩＮ　１、および１　ＪＯＩＮ６のコスト値を計算し、最小の値をルートグループの最小のコスト値として選択する。参照を簡単にするために、グループ１４（図６の下線部分）から選択された最小のコスト値のメンバのそれぞれを、将来の参照のために識別する。たとえば、選択されたメンバに、マークを付けることができ、あるいは、グループ１４以外のすべてのメンバを破棄して、そのような最小のコスト値のメンバだけが残るようにすることができる。
【００４５】
さらに、ルートグループの最小のコスト値のメンバを選択するときに、そのような選択されたメンバによって、暗黙のうちに、クエリオプティマイザが最初に受け取ったクエリの最適化が定義される（ステップ５１３）。たとえば、ルートグループの選択されたメンバが、１　ＪＯＩＮ　６である場合に、グループ１の最小のコスト値のメンバ（Ｓｃａｎ　Ａ）が、グループ６の最小のコスト値のメンバと結合される。同様に、最適化されたクエリに関する最適化されたツリーが完全に定義されるまで、この処理が繰り返される。具体的に言うと、グループ６の選択されたメンバが、４　ＪＯＩＮ　２である場合に、グループ４の最小のコスト値のメンバ（Ｓｃａｎ　Ｃ）が、グループ２の最小のコスト値のメンバ（Ｓｃａｎ　Ｂ）と結合される。そのように選択されたメンバに基づくそのような最適化されたツリー１０を、図７に示す。
【００４６】
この説明から諒解されるように、クエリ最適化では、各グループ１４の最小のコスト値のメンバを選択することによって、各後続のグループ１４について最小のコスト値が選択さることが保証され、最小のコスト値がルートグループについて選択されることが保証される。さらに、ルートグループの選択されたメンバから作業することによって、最適化されたクエリツリー１０が見つかり、このツリー１０を実行して、既知の最もコスト効率のよい方法でクエリ結果を作ることができる。
【００４７】
上の説明を、代替物のテーブルの異なる実施形態を使用するか、変換規則以外の手段によってそのようなテーブルを追加（ｐｏｐｕｌａｔｅ）する他のオプティマイザアーキテクチャに単純な方法で拡張することができる。具体的に言うと、この概念を、多数の市販クエリオプティマイザで使用される周知のボトムアップ列挙技法に基づくオプティマイザに適用することができる。
【００４８】
ＣＨＯＯＳＥ演算子とクエリオプティマイザ
本発明の一実施形態では、ＣＨＯＯＳＥ演算子およびそのＣＨＯＯＳＥ引数が、上で要約したようにクエリオプティマイザに適用されて、クエリ式の複数のフォームをクエリオプティマイザにサブミットできるようになる。具体的に言うと、本発明のＣＨＯＯＳＥ演算子では、同等物としてそのＣＨＯＯＳＥ引数（すなわち、オペランドで実施される代替だが同等のクエリ式）が定義され、同等物のうちで最も効率的な（たとえば最小のコスト値の）ものに基づいて同等物の間から選択することによってクエリオプティマイザが動作するという事実が利用される。したがって、ＣＨＯＯＳＥ演算子では、結局、定義された同等のＣＨＯＯＳＥ引数がクエリオプティマイザにサブミットされ、クエリオプティマイザは、ＣＨＯＯＳＥ引数（またはその同等物）のうちでより効率的なものを選択する。
【００４９】
具体的には、図８を参照すると、実行されるクエリに、図示のように、同等のクエリ式を表す引数の対を有するＣＨＯＯＳＥ演算子が含まれ、このクエリは、ｎレベルツリー１０に代数化されることがわかる。ここで、ツリー１０は、下記のクエリに基づく。
（Ｓｃａｎ　Ａ　ＣＨＯＯＳＥ　Ｓｃａｎ　Ｂ）　ＪＯＩＮ　Ｓｃａｎ　Ｃ
【００５０】
ＣＨＯＯＳＥ演算子が、必ずしも１対の引数だけを有することに制限されないことに留意されたい。そうではなく、ＣＨＯＯＳＥ演算子は、本発明の趣旨および範囲から逸脱せずに、任意の数の引数を有することができる。また、ＣＨＯＯＳＥ演算子のネスティングおよび他の類似するタイプのデバイスを使用して、事実上、複数の同等のクエリ式を定義できることに留意されたい。
【００５１】
図９に移ると、図８のツリー１０に対応するテーブル１２が示されている。重要なことに、Ｓｃａｎ　ＡとＳｃａｎ　Ｂ（すなわちＣＨＯＯＳＥ引数）の間などのＣＨＯＯＳＥ演算子によって定義される同等物に基づいて、定義されたグループ１４の１つ（グループ１）に、１（すなわちＳｃａｎ　Ａ）および２（すなわちＳｃａｎ　Ｂ）が含まれる。すなわち、ＣＨＯＯＳＥ演算子に基づいて、クエリオプティマイザが、単一のグループ１４にそのＣＨＯＯＳＥ引数を配置する。ＣＨＯＯＳＥ演算子自体は、テーブル１２のどのグループ１４にも現れず、その代わりに、前述の単一のグループ１４（図４のグループ３）に割り当てられるＣＨＯＯＳＥ引数によって置換される。ツリー１０で前にＣＨＯＯＳＥ演算子を参照したルートグループの後続のＪＯＩＮは、ＣＨＯＯＳＥ演算子のＣＨＯＯＳＥ引数を有する単一のグループ１４を参照する。
【００５２】
本発明では、クエリオプティマイザが、図５のステップ５０３など、初期ツリー１０を作るために受け取られたクエリを代数化する過程で、クエリ内のＣＨＯＯＳＥ演算子を見つける（図１０のステップ１００１）クエリオプティマイザが、ＣＨＯＯＳＥ演算子のＣＨＯＯＳＥ引数を判定することと（ステップ１００３）、判定されたＣＨＯＯＳＥ引数を含むようにテーブル１２のグループ１４を定義することと（ステップ１００５）、ＣＨＯＯＳＥ演算子を参照するすべての他のグループ１４が、その代わりに、判定されたＣＨＯＯＳＥ引数について定義されたグループ１４を参照するように調整することと（ステップ１００７）によって、ＣＨＯＯＳＥ演算子を処理する。重要なことに、図５に概要を示した処理の他の代替案は、必要と思われない。
【００５３】
したがって、要約すると、図８に示されたツリー１０は、次の（第２）レベルからのＣＨＯＯＳＥ演算子およびＳｃａｎ　Ｃ演算子を結合する第１のＪＯＩＮ演算子を有するルート（第１）レベルを含む３つのレベルを有し、ＣＨＯＯＳＥ演算子は、次の（第３）レベルからのＳｃａｎ　Ａ演算子およびＳｃａｎ　Ｂ演算子を結合する。それに対応して、図９の初期テーブル１２は、３つのグループ１４を有し、グループ１は、Ｓｃａｎ　ＡおよびＳｃａｎ　ＢがＣＨＯＯＳＥ引数である限り、メンバとしてＳｃａｎ　ＡおよびＳｃａｎ　Ｂを有し、グループ２は、メンバとしてＳｃａｎ　Ｃを有し、ルートグループは、メンバとしてグループ１（Ｓｃａｎ　ＡおよびＳｃａｎ　Ｂを有する）およびグループ２（Ｓｃａｎ　Ｃを有する）のＪＯＩＮを有する。
【００５４】
やはり、変換規則が、図９のテーブルの各メンバに適用されて、グループの追加メンバおよび／または追加グループ（図示せず）が作られ、クエリオプティマイザは、各グループ１４の各メンバにコスト値を割り当て、各グループ１４の最小のコスト値のメンバを選択する。特筆すべきことに、Ｓｃａｎ　ＡおよびＳｃａｎ　Ｂをグループ１の同等のメンバとして定義することによって、Ｓｃａｎ　Ａの同等物およびＳｃａｎ　Ｂの同等物も、グループ１に配置され、Ｓｃａｎ　Ａおよびその同等物とＳｃａｎ　Ｂおよびその同等物を含むグループ１の同等物のすべてに、コスト値が割り当てられ、グループ１のそのようなすべてのメンバのうちで最小のコスト値のメンバが、選択される。本来、Ｓｃａｎ　Ａまたはその同等物およびＳｃａｎ　Ｂまたはその同等物のうちでより効率的なものが、選択される。
【００５５】
簡単のために、同等物が見つからず、図９のテーブル１４が、変換規則の適用による影響を受けないと仮定し、簡単のために、Ｓｃａｎ　ＡがＳｃａｎ　Ｂに対して最小のコスト値を有することがわかったと仮定すると、図８の初期ツリー１０から導出される最適化されたツリー１０は、図１１に示されたものである。やはり、ＣＨＯＯＳＥ演算子に基づいて、クエリオプティマイザが、グループ１４の同等物としてＣＨＯＯＳＥ引数を定義し、ＣＨＯＯＳＥ引数によって表される副クエリの代替のフォームは、同一のグループ１４の他の同等のメンバから区別不能である。ＣＨＯＯＳＥ演算子が、テーブル１４から除去されるので、クエリオプティマイザが、テーブル１４の同等物を生成する際に特定の規則または指示を意識する必要がないことに留意されたい。非常に単純に言えば、クエリオプティマイザのコストに基づく選択機構は、前と同様に実行され、クエリオプティマイザが、ＣＨＯＯＳＥ演算子またはその同等物の基礎であるクエリ式の代替のフォームの適当な１つを含む複数の同等の式の間から最適のクエリ式を選択する。
【００５６】
結論
本発明に関連して実行される処理を実現するのに必要なプログラミングは、比較的単純であり、クエリ最適化技法の技量を有する関連するプログラミングを行なう者に明白である。したがって、そのようなプログラミングは、本明細書には添付しない。特定のプログラミングを使用して、本発明の趣旨および範囲から逸脱せずに、本発明を実現することができる。
【００５７】
前述の説明で、本発明に、クエリオプティマイザがクエリ式のフォームのうちで最も効率的な１つを選択し、それを最適化する方法で、ユーザまたはアプリケーションがクエリ式の複数の代替のフォームをサブミットできるようにする、新しい有用な方法および機構が含まれることがわかる。発明的概念から逸脱せずに、上で説明した実施形態に変更を加えることができることを諒解されたい。したがって、本発明が、開示された特定の実施形態に制限されるのではなく、特許請求の範囲によって定義される本発明の趣旨および範囲に含まれる修正形態を含むことが意図されていることを理解されたい。
【図面の簡単な説明】
【図１】本発明の諸態様および／または諸部分を組み込むことができる汎用コンピュータシステムを表すブロック図である。
【図２】販売データからの部分的集計の結果が保管されるリレーショナルデータベースの少なくとも一部を示し、クエリの結果をクエリの２つのフォームのいずれかから導出することができ、このフォームのそれぞれが、データベース内の異なる表に基づくブロック図である。
【図３】ｎレベルツリーに代数化されたクエリを示すブロック図である。
【図４】図３のツリーに基づいてクエリオプティマイザによって形成されるグループの初期テーブルを示すブロック図である。
【図５】図４のテーブルに基づいて図３のツリーによって表されるクエリを最適化する際にクエリオプティマイザによって実行されるステップを示す流れ図である。
【図６】グループの追加の同等のメンバおよび／または追加グループを提供するために変換規則が適用された後の、図４のテーブルを示すブロック図である。
【図７】図６のテーブルの各グループの最小のコスト値のメンバに基づいて最適化された図３のツリーを示すブロック図である。
【図８】クエリに、本発明の一実施形態によるＣＨＯＯＳＥ演算子が含まれる、ｎレベルツリーに代数化された別のクエリを示すブロック図である。
【図９】本発明の一実施形態による、図８のツリーに基づいてクエリオプティマイザによって形成されるグループの初期テーブルを示し、初期テーブル内の単一のグループに、ＣＨＯＯＳＥ演算子によってＣＨＯＯＳＥ引数が同等になるように宣言される限りＣＨＯＯＳＥ演算子のＣＨＯＯＳＥ引数が含まれることが、ＣＨＯＯＳＥ演算子の効果であるブロック図である。
【図１０】図９のテーブルを形成するために図８のツリー内のＣＨＯＯＳＥ演算子を処理する際に本発明の一実施形態に従ってクエリオプティマイザによって実行されるステップを示す流れ図である。
【図１１】図９のテーブルの各グループの最小のコスト値のメンバに基づいて本発明の一実施形態に従って最適化された図８のツリーを示すブロック図である。
【符号の説明】
１０　ｎレベルツリー
１２　ルックアップテーブルまたは構造体
１４　グループ
【図１】
2004030677.tif 000007
【図２】
2004030677.tif 000008
【図３】
2004030677.tif 000009
【図４】
2004030677.tif 000010
【図５】
2004030677.tif 000011
【図６】
2004030677.tif 000012
【図７】
2004030677.tif 000013
【図８】
2004030677.tif 000014
【図９】
2004030677.tif 000015
【図１０】
2004030677.tif 000016
【図１１】
2004030677.tif 000017