(57)【特許請求の範囲】
【請求項１】
特定のクエリ文から生成されたパラメータ化された文字列をクライアントから受信するステップと、
前記パラメータ化された文字列が前記パラメータ化された文字列が表すクエリの実行計画に対する実行計画識別子に対応付けてメモリに格納されているか否かを判断するステップと、
前記パラメータ化された文字列が前記メモリに前記実行計画識別子に対応付けて格納されていれば、前記メモリに格納されている実行計画識別子を前記クライアントに送信し、前記パラメータ化された文字列が前記メモリに格納されていなければ、前記クライアントから前記パラメータ化された文字列の実行計画を受信し実行計画識別子を生成して前記パラメータ化された文字列と関連付けて前記メモリに記憶し、前記実行計画識別子を前記クライアントに送信するステップと、
前記クライアントから前記実行計画識別子と前記特定のクエリ文に含まれた実行値リストとから構成されるクエリリクエストを受信するステップと、
前記実行計画識別子と前記実行値リストとの組み合わせが前記メモリに格納されていなければ、前記実行値リストを前記実行計画識別子に対する実行計画に適用して前記クエリを実行した結果を取得し、前記結果を前記実行計画識別子と前記実行値リストとに関連付けて前記メモリに記憶するステップと、
前記実行計画識別子と前記実行値リストとの組み合わせに関連付けられている前記結果を前記クライアントに提供するステップと、を含むことを特徴とするデータベース管理方法。
【請求項２】
前記クエリを実行した結果を提供する前に、前記メモリに前記クエリリクエストとマッチングするクエリ結果識別子が格納されているか否かを判断するステップをさらに含み、
前記クエリ結果提供ステップにおいて、前記クエリリクエストとマッチングするクエリ結果識別子が格納されている場合、前記クエリ結果識別子に対応するクエリの結果を前記メモリまたはディスクから取得して前記クライアントに提供し、
前記クエリリクエストとマッチングするクエリ結果識別子が格納されていない場合、前記実行計画識別子に対応する実行計画を、前記実行値リストを用いて実行することで取得されるクエリの結果を、前記クライアントに提供することを特徴とする請求項１に記載のデータベース管理方法。
【請求項３】
前記クエリリクエストとマッチングするクエリ結果識別子が格納されていない場合、前記実行計画識別子に対応する実行計画は、前記メモリから直接取得するか又は前記ディスクに格納されているストリーム形式の実行計画を復号化することで取得されることを特徴とする請求項２に記載のデータベース管理方法。
【請求項４】
前記パラメータ化された文字列、前記クエリリクエスト、および前記クエリリクエストに対するクエリ結果識別のためのクエリ結果識別子をマッチングして記録されるクエリテーブルを生成するステップをさらに含むことを特徴とする請求項１に記載のデータベース管理方法。
【請求項５】
前記パラメータ化された文字列に含まれているテーブル情報に対応するテーブルが変更されると、前記クエリテーブルを更新するステップをさらに含むことを特徴とする請求項４に記載のデータベース管理方法。
【請求項６】
前記パラメータ化された文字列は、前記クエリ文に含まれた実行値リストが予め定められたパラメータに変換された文字列であることを特徴とする請求項１に記載のデータベース管理方法。
【請求項７】
ユーザから受信したクエリ文からパラメータ化された文字列を生成するステップと、
前記パラメータ化された文字列をサーバに送信するステップと、
前記パラメータ化された文字列が前記パラメータ化された文字列が表すクエリの実行計画に対する実行計画識別子に対応付けて格納されているときには、前記サーバから前記実行計画識別子を受信し、前記パラメータ化された文字列が前記実行計画識別子に対応付けて格納されていないときには、前記サーバに前記パラメータ化された文字列の実行計画を送信し、前記サーバから前記実行計画識別子を受信するステップと、
前記実行計画識別子と前記クエリ文に含まれた実行値リストとから構成されるクエリリクエストを前記サーバに送信するステップと、
前記実行計画識別子と前記実行値リストとの組み合わせが格納されていなければ、前記実行値リストが前記実行計画識別子に対する実行計画に適用された前記クエリリクエストに対するクエリの結果を前記サーバから受信するステップと、を含むことを特徴とするデータベース管理方法。
【請求項８】
前記パラメータ化された文字列は、前記クエリ文に含まれた実行値リストを予め定められたパラメータに変換することで生成されることを特徴とする請求項７に記載のデータベース管理方法。
【請求項９】
前記実行計画識別子受信ステップの前に、
前記サーバから前記パラメータ化された文字列に対する応答が受信されれば、前記パラメータ化された文字列に対する実行計画を生成するステップと、
前記生成された実行計画を前記サーバに送信するステップと、をさらに含むことを特徴とする請求項７に記載のデータベース管理方法。
【請求項１０】
前記パラメータ化された文字列に対する応答は、前記サーバに前記パラメータ化された文字列と前記パラメータ化された文字列に対する実行計画識別子とがマッチングして格納されていない場合、前記サーバから受信されることを特徴とする請求項９に記載のデータベース管理方法。
【請求項１１】
請求項１乃至請求項１０のいずれか１項に記載された方法を行うためのプログラムが記録された記録媒体。
【請求項１２】
クライアントとのインターフェースを実現するインターフェースモジュールと、
クエリ文から生成されたパラメータ化された文字列が前記パラメータ化された文字列が表わすクエリの実行計画に対する実行計画識別子に対応付けてメモリに格納されているか否かを判断する判断モジュールと、
前記パラメータ化された文字列が前記メモリに前記実行計画識別子に対応付けて格納されていれば、前記メモリに前記パラメータ化された文字列とマッチングして格納されている実行計画識別子を前記クライアントに送信し、前記パラメータ化された文字列が前記メモリに格納されていなければ、前記クライアントから前記パラメータ化された文字列の実行計画を受信し実行計画識別子を生成して前記パラメータ化された文字列と関連付けて前記メモリに記憶し、前記実行計画識別子を前記クライアントに送信する実行計画識別子管理モジュールと、
前記実行計画識別子と前記クエリ文に含まれた実行値リストとから構成されるクエリリクエストが前記クライアントから受信されると、前記実行計画識別子と前記実行値リストとの組み合わせが前記メモリに格納されていなければ、前記実行値リストを前記実行計画識別子に対する実行計画に適用して前記クエリを実行した結果を取得し、前記結果を前記実行計画識別子と前記実行値リストとに関連付けて前記メモリに記憶し、前記実行計画識別子と前記実行値リストとの組み合わせに関連付けられている前記クエリを実行した前記結果を取得して前記クライアントに提供するクエリ結果取得モジュールと、を含むことを特徴とするデータベース管理システム。
【請求項１３】
前記実行計画識別子管理モジュールは、
前記パラメータ化された文字列が前記メモリに格納されていない場合、前記クライアントに前記パラメータ化された文字列に対する応答を送信し、前記クライアントから前記実行計画が受信されれば、前記受信された実行計画に実行計画識別子を付与して前記クライアントに送信することを特徴とする請求項１２に記載のデータベース管理システム。
【請求項１４】
前記クエリ結果取得モジュールは、
前記メモリに前記クエリリクエストとマッチングするクエリ結果識別子が格納されているか否かを判断し、
前記クエリリクエストとマッチングするクエリ結果識別子が格納されていれば、前記クエリ結果識別子に対応するクエリの結果を前記メモリまたはディスクから取得して前記クライアントに提供し、
前記クエリリクエストとマッチングするクエリ結果識別子が格納されていなければ、前記実行計画識別子に対応する実行計画を、前記実行値リストを用いて実行することで取得されるクエリの結果を、前記クライアントに提供することを特徴とする請求項１２に記載のデータベース管理システム。
【請求項１５】
前記クエリ結果取得モジュールは、
前記クエリリクエストとマッチングするクエリ結果識別子が格納されていない場合、前記メモリから前記実行計画識別子に対応する実行計画を直接取得するか、又は前記ディスクに格納されているストリーム形態の実行計画を復号化することで前記実行計画識別子に対応する実行計画を取得することを特徴とする請求項１４に記載のデータベース管理システム。
【請求項１６】
前記クエリ結果取得モジュールは、前記実行計画を実行することで取得されるクエリの結果を識別するためのクエリ結果識別子を生成することを特徴とする請求項１４に記載のデータベース管理システム。
【請求項１７】
前記パラメータ化された文字列、前記クエリリクエスト、および前記クエリの結果を識別するためのクエリ結果識別子がマッチングして記録されるクエリテーブルを生成し、前記メモリに格納するクエリテーブル管理モジュールをさらに含むことを特徴とする請求項１２に記載のデータベース管理システム。
【請求項１８】
前記クエリテーブル管理モジュールは、前記パラメータ化された文字列に含まれているテーブル情報に該当するテーブルが変更されると、前記クエリテーブルを更新することを特徴とする請求項１７に記載のデータベース管理システム。
【請求項１９】
ユーザから受信したクエリ文からパラメータ化された文字列を生成する文字列生成モジュールと、
前記パラメータ化された文字列が前記パラメータ化された文字列が表すクエリの実行計画に対する実行計画識別子に対応付けて格納されているときに、前記サーバから前記実行計画識別子を受信し、前記パラメータ化された文字列が前記実行計画識別子に対応付けて格納されていないときに、前記サーバに前記パラメータ化された文字列の実行計画を送信し、前記サーバから前記実行計画識別子を受信すると、前記実行計画識別子と前記クエリ文に含まれた実行値リストとから構成されるクエリリクエストを生成するクエリリクエスト生成モジュールと、
前記パラメータ化された文字列および前記クエリリクエストを前記サーバに送信し、前記実行計画識別子と前記実行値リストとの組み合わせが格納されていなければ、前記サーバから前記実行値リストを前記実行計画識別子に対する実行計画に適用して前記クエリを実行した結果を受信し、前記実行計画識別子と前記実行値リストとの組み合わせに関連付けられている前記結果を前記サーバから受信するインターフェースモジュールと、を含むことを特徴とするデータベース管理システム。
【請求項２０】
前記文字列生成モジュールは、前記クエリ文に含まれた実行値リストを予め定められたパラメータに変換することにより、前記パラメータ化された文字列を生成することを特徴とする請求項１９に記載のデータベース管理システム。
【請求項２１】
前記サーバから前記パラメータ化された文字列に対する応答が受信されれば、前記パラメータ化された文字列に対する実行計画を生成する実行計画生成モジュールをさらに含み、
前記インターフェースモジュールは、前記サーバから前記パラメータ化された文字列に対する応答を受信し、前記生成された実行計画を前記サーバに送信することを特徴とする請求項１９に記載のデータベース管理システム。
【請求項２２】
前記パラメータ化された文字列に対する応答は、前記サーバに前記パラメータ化された文字列と前記パラメータ化された文字列に対する実行計画識別子とがマッチングして格納されていない場合、前記サーバから受信されることを特徴とする請求項２１に記載のデータベース管理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース管理方法に関し、より詳しくは、データ処理速度を向上させることができるデータベース管理方法およびシステムに関する。
【背景技術】
【０００２】
データベース管理システム（Ｄａｔａｂａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ、以下「ＤＢＭＳ」という）は、膨大な量のデータを格納するデータベースを管理するためのシステムであって、大量の情報が絶え間なく生成されている現時代において、なくてはならない重要な要素であると考えられている。
【０００３】
このようなＤＢＭＳでは、全てのデータをテーブル（Ｔａｂｌｅ）形式でデータベースに格納するが、ここでテーブルとは、データベースでデータを格納する基本構造をいい、１つのテーブルは１つ以上のレコード（Ｒｅｃｏｒｄ）から構成される。
【０００４】
ここでレコードとは、テーブルの一行（Ｒｏｗ）を意味するもので、他の用語ではタプル（Ｔｕｐｌｅ）ともいう。また、各レコードは、１つ以上のカラム（Ｃｏｌｕｍｎ）から構成されるが、ここでカラムとは、テーブルを構成する実際のテーブル項目を表現する名前を有するドメイン（Ｄｏｍａｉｎ）を意味するもので、他の用語ではアトリビュート（Ａｔｔｒｉｂｕｔｅ）またはフィールド（Ｆｉｅｌｄ）ともいう。
【０００５】
このようなＤＢＭＳは、外部から特定のクエリ（Ｑｕｅｒｙ）が入力される場合、入力されたクエリに応じてデータベースにデータを選択、挿入、更新、削除するなどの機能を行う。
【０００６】
ここでクエリとは、データベースのテーブルに格納されているデータに対してどのような要求、すなわち、データに対してどのような操作を希望するか記述したものを意味し、構造化クエリ言語（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ、以下「ＳＱＬ」という）といった言語を用いて表現される。
【０００７】
このようなＳＱＬ文のうち最も代表的なクエリ文は、選択（ＳＥＬＥＣＴ）文である。このようなＳＥＬＥＣＴ文を用いてテーブルに存在するデータを閲覧し、データを分析してデータの内容を修正し、複数のテーブルに分散し格納されているデータを相互参照して所望のデータを閲覧することができる。
【０００８】
例えば、「ＳＥＬＥＣＴ＊  ＦＲＯＭ  ｂｏａｒｄ  ＷＨＥＲＥ  ｉｄ＝１０」というＳＱＬ構文の場合、「ｂｏａｒｄ」というテーブルから「ｉｄ＝１０」を満たす全てのカラムに該当するレコード、言い換えれば、全てのカラムに該当するタプルの選択を要求することを意味する。
【０００９】
このようなＤＢＭＳでは、上述したクエリ文が入力されると、入力されたクエリ文を通じて要求されるデータを抽出するために、データ抽出方法と順序を決める実行計画を生成するが、従来のＤＢＭＳは、クエリ文が入力される時ごとに各クエリ文ごとに新しい実行計画を生成し、生成された実行計画によってデータを抽出する。
【００１０】
しかしながら、以前に入力された第１クエリ文と完全に同一である第２クエリ文、または、特定の条件、例えば実行値リストのみが異なる第２クエリ文が入力される場合、第２クエリ文に対する実行計画は第１クエリ文に対する実行計画と殆ど同一であるにもかかわらず、従来のＤＢＭＳは、第２クエリ文に対する実行計画を再度生成するので、システム運用の効率性が低下するという問題点がある。
【００１１】
また、従来のＤＢＭＳは、以前に入力された第１クエリ文と完全に同一である第２クエリ文が入力された場合、第１クエリ文に対するクエリの結果を利用せず、第２クエリ文に対して生成された実行計画の実行を通じて第２クエリ文に対するクエリの結果を別途生成するので、非効率的であるという問題点がある。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
本発明は、上述した問題点を解決するためのものであって、クエリ文の実行値リストをパラメータ化することで生成されるパラメータ化された文字列に対して実行計画を生成し、パラメータ化された文字列とパラメータ化された文字列に対する実行計画の識別子とをマッチングして格納することができるデータベース管理方法およびシステムを提供することを技術的課題とする。
【００１３】
特定のクエリ文から生成されたパラメータ化された文字列がメモリに格納されている場合、前記メモリに前記パラメータ化された文字列とマッチングして格納されている実行計画を行うことにより、前記クエリ文に対する結果値を取得することができるデータベース管理方法およびシステムを提供することを他の技術的課題とする。
【００１４】
特定のクエリ文から生成されたパラメータ化された文字列および前記クエリ文の実行値リストがメモリに格納されている場合、前記パラメータ化された文字列および実行値リストとマッチングして格納されている結果値を前記クエリ文に対する結果値として提供することができるデータベース管理方法およびシステムを提供することをさらに他の技術的課題とする。
【課題を解決するための手段】
【００１５】
上述した目的を達成するための本発明の一実施形態に係るデータベース管理方法は、特定のクエリ文から生成されたパラメータ化された文字列をクライアントから受信するステップと、前記パラメータ化された文字列がメモリに格納されているか否かを判断するステップと、前記パラメータ化された文字列が前記メモリに格納されていれば、前記メモリに前記パラメータ化された文字列とマッチングして格納されている実行計画識別子を前記クライアントに送信し、前記パラメータ化された文字列が前記メモリに格納されていなければ、前記パラメータ化された文字列の実行計画に対する実行計画識別子を生成して前記クライアントに送信するステップと、前記実行計画識別子と前記特定のクエリ文に含まれる実行値リストとから構成されるクエリリクエストを前記クライアントから受信するステップと、前記クエリリクエストを用いて取得されるクエリの結果を前記クライアントに提供するステップと、を含む。
【００１６】
このとき、前記パラメータ化された文字列が前記メモリに格納されていない場合、前記実行計画識別子送信ステップは、前記クライアントに前記パラメータ化された文字列に対して応答するステップと、前記クライアントによって生成された実行計画を前記クライアントから受信するステップと、前記受信した実行計画に対する実行計画識別子を生成して前記クライアントに送信するステップと、を含むことを特徴とする。
【００１７】
一方、前記生成された実行計画識別子を前記パラメータ化された文字列とマッチングし、前記メモリに格納するステップをさらに含んでもよい。
【００１８】
本発明の一実施形態において、前記クエリ結果提供ステップの前に、前記メモリに前記クエリリクエストとマッチングするクエリ結果識別子が格納されているか否かを判断するステップをさらに含み、前記クエリ結果提供ステップにおいて、前記クエリリクエストとマッチングするクエリ結果識別子が格納されている場合、前記クエリ結果識別子に対応するクエリの結果を前記メモリまたはディスクから取得して前記クライアントに提供し、前記クエリリクエストとマッチングするクエリ結果識別子が格納されていない場合、前記実行計画識別子に対応する実行計画を、前記実行値リストを用いて実行することによって取得されるクエリの結果を前記クライアントに提供してもよい。
【００１９】
このとき、前記クエリリクエストとマッチングするクエリ結果識別子が格納されていない場合、前記実行計画識別子に対応する実行計画は、前記メモリから直接取得するか、又は前記ディスクに格納されているストリーム形式の実行計画を復号化することで取得することを特徴とする。
【００２０】
一方、前記実行計画を実行することで取得されるクエリの結果を識別するためのクエリ結果識別子を生成するステップと、前記クエリ結果識別子、前記クエリリクエスト、および前記パラメータ化された文字列を互いにマッチングして前記メモリに格納するステップと、をさらに含んでもよい。
【００２１】
本発明の一実施形態において、前記パラメータ化された文字列、前記クエリリクエスト、および前記クエリリクエストに対するクエリ結果識別のためのクエリ結果識別子がマッチングして記録されるクエリテーブルを生成するステップをさらに含んでもよい。このような本発明の実施形態による場合、前記パラメータ化された文字列に含まれているテーブル情報に対応するテーブルが変更されれば、前記クエリテーブルを更新するステップをさらに含んでもよい。
【００２２】
このとき、前記パラメータ化された文字列は、前記クエリ文に含まれた実行値リストが予め定められたパラメータに変換された文字列であることを特徴とする。
【００２３】
上述した目的を達成するための本発明の他の実施形態に係るデータベース管理方法は、ユーザから受信したクエリ文からパラメータ化された文字列を生成するステップと、前記パラメータ化された文字列をサーバに送信するステップと、前記サーバから前記パラメータ化された文字列に対する実行計画識別子を受信するステップと、前記実行計画識別子と前記クエリ文に含まれた実行値リストとから構成されるクエリリクエストを前記サーバに送信するステップと、前記クエリリクエストに対するクエリの結果を前記サーバから受信するステップと、を含む。
【００２４】
このとき、前記実行計画識別子受信ステップの以前に、前記サーバから前記パラメータ化された文字列に対する応答が受信されれば、前記パラメータ化された文字列に対する実行計画を生成するステップと、前記生成された実行計画を前記サーバに送信するステップと、をさらに含んでもよい。
【００２５】
上述した目的を達成するための本発明のさらに他の実施形態に係るデータベース管理システムは、クライアントとのインターフェースを担当するインターフェースモジュールと、クエリ文から生成されたパラメータ化された文字列がメモリに格納されているか否かを判断する判断モジュールと、前記パラメータ化された文字列が前記メモリに格納されていれば、前記メモリに前記パラメータ化された文字列とマッチングして格納されている実行計画識別子を前記クライアントに送信し、前記パラメータ化された文字列が前記メモリに格納されていなければ、前記パラメータ化された文字列の実行計画に対する実行計画識別子を生成して前記クライアントに送信する実行計画識別子管理モジュールと、前記実行計画識別子と前記クエリ文に含まれた実行値リストとから構成されるクエリリクエストが前記クライアントから受信されれば、前記クエリリクエストに対するクエリの結果を取得して前記クライアントに提供するクエリ結果取得モジュールと、を含む。
【００２６】
上述した目的を達成するための本発明のさらに他の実施形態に係るデータベース管理システムは、ユーザから受信したクエリ文からパラメータ化された文字列を生成する文字列生成モジュールと、サーバから前記パラメータ化された文字列に対する実行計画識別子が受信されれば、前記実行計画識別子と前記クエリ文に含まれた実行値リストとから構成されるクエリリクエストを生成するクエリリクエスト生成モジュールと、前記パラメータ化された文字列および前記クエリリクエストを前記サーバに送信し、前記サーバから前記実行計画識別子および前記クエリリクエストに対するクエリの結果を受信するインターフェースモジュールと、を含む。
【発明の効果】
【００２７】
本発明の一実施形態によれば、各クエリ文の実行値リストをパラメータ化することで生成されるパラメータ化された文字列に対して実行計画を生成し、パラメータ化された文字列とパラメータ化された文字列に対する実行計画の識別子とをマッチングして格納するので、各クエリ文とそのクエリ文に対する実行計画の識別子を全部マッチングして格納することに比べて、メモリ資源を効率的に使用することができる。
【００２８】
また、本発明の一実施形態によれば、特定のクエリ文から生成されたパラメータ化された文字列がメモリに格納されている場合、前記クエリ文に対する実行計画を新しく生成する必要がなく、前記メモリに前記パラメータ化された文字列とマッチングして格納されている実行計画を行うことにより、クエリ文に対する結果値を取得することができるので、システムの速度を向上させることができる。
【００２９】
また、本発明の一実施形態によれば、特定のクエリ文から生成されたパラメータ化された文字列と、前記クエリ文の実行値とがメモリに格納されている場合、前記クエリ文に対する実行計画を新しく生成するか、または、生成された実行計画を行う必要なく、前記メモリに前記パラメータ化された文字列および実行値とマッチングして格納されている結果値を前記クエリ文に対する結果値として提供することができるので、システムの速度をさらに向上させることができる。
【図面の簡単な説明】
【００３０】
【図１】本発明の一実施形態に係るデータベース管理システムの構成を示す図である。
【図２】図１に示されたクライアントの細部構成を示すブロック図である。
【図３】図１に示されたサーバの細部構成を示すブロック図である。
【図４】本発明の一実施形態に係るデータベース管理方法を示すフローチャートである。
【発明を実施するための形態】
【００３１】
以下、添付する図面を参照して本発明の実施形態について詳細に説明する。
【００３２】
図１は、本発明の一実施形態に係るデータベース管理システムの構成を示す図である。
【００３３】
図１に示すように、データベース管理システム１００は、クライアント１１０とサーバ１２０を含んでもよく、このようなデータベース管理システム１００は、データベース１４０に接続され、データベース１４０に記録されたデータを更新または削除したり、データベース１４０にデータを追加したりするなど、データベース１４０を統合的に管理する機能を行う。
【００３４】
まず、クライアント１１０は、ユーザからクエリ文を受信し、そのクエリ文に対する実行計画を生成してサーバ１２０に送信する機能を行うもので、図２に示すように、クエリ文分析モジュール１１１と、文字列生成モジュール１１２と、実行計画生成モジュール１１４と、クエリリクエスト生成モジュール１１６と、サーバインターフェースモジュール１１８とを含む。
【００３５】
クエリ文分析モジュール１１１は、ユーザからクエリ文を受信し、受信したクエリ文を解析（Ｐａｒｓｉｎｇ）した後、意味分析（Ｓｅｍａｎｔｉｃ  Ｃｈｅｃｋ）を行うことによってクエリ文を分析する。ここで、クエリ文とは、データベース１４０に格納されている特定のテーブルから特定の条件を満たすデータを取り出すためのデータ取り出しのリクエストが定義されている文字列を意味する。本発明の一実施形態において、このようなクエリ文は、ＳＱＬ（Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）構文を用いて生成される。
【００３６】
例えば、データベース１４０から特定の社員番号に該当する社員の情報を取り出すためのリクエストが定義されたクエリ文をＳＱＬ構文として作成すると、次のようになる。
１）  ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝  ２１０６
【００３７】
上述したクエリ文は、特定の社員番号が２１０６である社員情報の取り出しを定義するＳＥＬＥＣＴ文であり、「＊」は取り出す社員の全ての情報（例えば、社員番号が２１０６に該当するタプルに含まれた全てのカラム）を意味し、「ＥＭＰＬＯＹＥＥ」はそのタプルが記録されているテーブルを意味し、「ＥＭＰＮＯ＝２１０６」は社員番号が「２１０６」であることを意味する。
【００３８】
文字列生成モジュール１１２は、クエリ文分析モジュール１１１によって分析されたクエリ文からパラメータ化された文字列を生成する。本発明の一実施形態において、文字列生成モジュール１１２は、クエリ文分析モジュール１１１によって分析されたクエリ文で定数（Ｃｏｎｓｔａｎｔｓ）またはバインディング変数（Ｖａｒｉａｂｌｅｓ）のような実行値リスト（実行値が複数である可能性があるため、実行値リストと表現した）を予め定められたパラメータに変換することにより、パラメータ化された文字列を生成することができる。
【００３９】
例えば、クエリ文が「ＳＥＬＥＣＴ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝  ２１０６」である場合、実行値リストは「２１０６」であるので、実行値を予め定められたパラメータである「？」に変換することにより、「ＳＥＬＥＣＴ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝？」のようなパラメータ化された文字列を生成することができる。
【００４０】
このように、文字列生成モジュール１１２が特定のクエリ文からパラメータ化された文字列を生成する理由は、従来においては、実行値リストのみが異なってもクエリ文のそれぞれに対して実行計画を生成したので、非常に多くの資源の浪費が発生せざるを得なかったが、上述したように実行値リストを特定のパラメータに変換した一般化した文字列に対して実行計画を生成するようになると、実行値リストのみが異なる各クエリ文に対して１つの実行計画のみを生成すれば済むので、実行計画生成のための資源の浪費を防止することができるためである。
【００４１】
文字列生成モジュール１１２は、生成したパラメータ化された文字列を、インターフェースモジュール１１８を介してサーバ１２０に送信することにより、サーバ１２０がパラメータ化された文字列に対する実行計画の生成が要求されたか否かを判断できるようにする。
【００４２】
次に、実行計画生成モジュール１１４は、後述するサーバ１２０からパラメータ化された文字列に対する応答が受信されると、パラメータ化された文字列に対する実行計画を生成する。ここで、実行計画とは、特定のテーブルから特定の条件に該当するタプルを取り出す方法や取り出す順序などが含まれている資料の構造を意味する。
【００４３】
本発明の一実施形態において、パラメータ化された文字列に対する応答は、サーバ１２０にパラメータ化された文字列が格納されていないと判断される場合、インターフェースモジュール１１８を介してサーバ１２０から送信される。
【００４４】
すなわち、パラメータ化された文字列がサーバ１２０に格納されていることは、パラメータ化された文字列に対しては実行計画が既に生成されたことを意味し、パラメータ化された文字列がサーバ１２０に格納されていない場合に実行計画の生成が必要となる。
【００４５】
本発明の一実施形態において、実行計画生成モジュール１１４は、サーバ１２０からパラメータ化された文字列の送信に対する応答としてＮｕｌｌが受信されると、パラメータ化された文字列に対する実行計画を生成することと判断する。
【００４６】
次に、クエリリクエスト生成モジュール１１６は、サーバ１２０からパラメータ化された文字列の送信に対する応答または実行計画送信に対する応答として、パラメータ化された文字列に対する実行計画識別子がインターフェースモジュール１１８を介して受信されると、サーバ１２０から送信された実行計画識別子とクエリ文分析モジュール１１１を介して受信されたクエリ文に含まれた実行値リストとを用いて、クエリリクエストを生成する。
【００４７】
パラメータ化された文字列に対する実行計画識別子と関連して、パラメータ化された文字列がサーバ１２０に格納されている場合には、パラメータ化された文字列に対する実行計画識別子は、パラメータ化された文字列の送信に対する応答としてサーバ１２０によって直ちに提供されるが、パラメータ化された文字列がサーバ１２０に格納されていない場合には、実行計画生成モジュール１１４がパラメータ化された文字列に対する実行計画を生成してサーバ１２０に送信しなければ、その実行計画に対する実行計画識別子がサーバ１２０により生成され提供されない。
【００４８】
本発明の一実施形態において、クエリリクエスト生成モジュール１１６は、サーバ１２０から送信される実行計画識別子と、クエリ文に含まれている実行値リストとを対（Ｐａｉｒ）形式で生成してもよい。
【００４９】
例えば、クエリ文が「ＳＥＬＥＣＴ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝２１０６」であり、サーバ１２０から「ＳＥＬＥＣＴ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝？」のような一般化した文字列に対する実行計画識別子として「Ｐ」が送信された場合、そのクエリ文に含まれている実行値は「２１０６」であるので、クエリリクエスト生成モジュール１１６は｛Ｐ、２１０６｝のような対形式のクエリリクエストをサーバ１２０に送信する。
【００５０】
このように本発明に係るクエリリクエスト生成モジュール１１６は、実行計画自体をクエリリクエストとして送信する従来の方法に比べて、クエリリクエストに含まれる情報の量を大幅縮小させることができ、膨大な量のデータ照会時に発生するネットワーク負荷を減少させることができる。
【００５１】
次に、インターフェースモジュール１１８は、サーバ１２０とのインターフェース機能を担当するもので、文字列生成モジュール１１２によって生成されたパラメータ化された文字列をサーバ１２０に送信し、サーバ１２０からパラメータ化された文字列の送信に対する応答を受信する。
【００５２】
ここで、パラメータ化された文字列の送信に対する応答は、上述したようにパラメータ化された文字列がサーバ１２０に格納されている場合には、パラメータ化された文字列に対する実行計画識別子であり、パラメータ化された文字列がサーバ１２０に格納されていない場合には、その旨の応答とすることができる。
【００５３】
インターフェースモジュール１１８は、パラメータ化された文字列の送信に対する応答がサーバ１２０から受信されると、これを実行計画生成モジュール１１４に送信し、実行計画識別子が送信されると、クエリリクエスト生成モジュール１１６に実行計画識別子を送信する。
【００５４】
また、インターフェースモジュール１１８は、実行計画生成モジュール１１４によって生成された実行計画をストリーム形式に変換してサーバ１２０に送信し、実行計画生成モジュール１１４によって生成された実行計画に対する実行計画識別子をサーバ１２０から受信してクエリリクエスト生成モジュール１１６に送信する。
【００５５】
また、インターフェースモジュール１１８は、クエリリクエスト生成モジュール１１６によって生成されたクエリリクエストをサーバ１２０に送信し、サーバ１２０からクエリリクエストに対応するクエリの結果を受信してユーザに提供する。
【００５６】
本発明の一実施形態において、各モジュールを含むクライアント１１０は、プログラム化されてユーザ端末（図示せず）上に設けられてもよいが、変形された実施形態においてはサーバ１２０上に設けられてもよい。
【００５７】
再び図１を参照すると、サーバ１２０は、クライアント１１０によって生成された実行計画を格納および実行し、実行計画の実行によって取得されるクエリの結果をクライアント１１０に提供する役割を行う。
【００５８】
このようなサーバ１２０は、図３に示すように判断モジュール１２２と、実行計画識別子管理モジュール１２４と、クエリ結果取得モジュール１２６と、クエリテーブル管理モジュール１２８と、インターフェースモジュール１３０と、メモリ１３２と、ディスク１３４とを含む。
【００５９】
判断モジュール１２２は、クライアント１１０から受信するパラメータ化された文字列がメモリ１３２の管理テーブルに記録されているか否かを判断し、その結果を後述する実行計画識別子管理モジュール１２２に送信する。すなわち、判断モジュール１２２は、クライアント１１０から受信するパラメータ化された文字列が以前に受信された文字列であるか否かを判断する。
【００６０】
本発明の一実施形態において、判断モジュール１２２は、後述するクエリテーブル管理モジュール１２８に生成され、メモリ１３２が格納しているクエリテーブルにパラメータ化された文字列が存在するか否かを判断することができる。
【００６１】
実行計画識別子管理モジュール１２４は、判断モジュール１２２によってパラメータ化された文字列がクエリテーブルに格納されていると判断されれば、クエリテーブル上でパラメータ化された文字列とマッチングして格納されている実行計画識別子を後述するインターフェースモジュール１３０を介してクライアント１１０に送信する。
【００６２】
すなわち、上述したように、パラメータ化された文字列がクエリテーブルに格納されていることは、そのパラメータ化された文字列が以前に受信された文字列であって、そのパラメータ化された文字列に対する実行計画と実行計画識別子とが既に生成されているので、実行計画識別子管理モジュール１２４は、そのパラメータ化された文字列とマッチングして格納されている実行計画識別子をクライアント１１０に提供することを意味する。
【００６３】
一方、実行計画識別子管理モジュール１２４は、判断モジュール１２２によってパラメータ化された文字列がクエリテーブルに格納されていないと判断されれば、その旨の応答を送信する。本発明の一実施形態において、実行計画識別子管理モジュール１２４は、パラメータ化された文字列の送信に対する応答としてＮｕｌｌをクライアント１１０に送信する。
【００６４】
その後、クライアント１１０からパラメータ化された文字列に対する実行計画が受信されると、実行計画識別子管理モジュール１２４は、クライアント１１０から受信したストリーム形式の実行計画をファイルの形式でディスク１３４に格納し、その実行計画に対する実行計画識別子を生成してクライアント１１０に送信する。
【００６５】
本発明の一実施形態において、実行計画識別子管理モジュール１２４は、実行計画が格納されているファイルの識別子を実行計画識別子として決めることができる。
【００６６】
一方、実行計画識別子管理モジュール１２４は、生成された実行計画識別子を後述するクエリテーブル管理モジュール１２８に送信することにより、実行計画識別子をパラメータ化された文字列とマッチングし、クエリテーブル上に記録するようにする。
【００６７】
次に、クエリ結果取得モジュール１２６は、クライアント１１０から送信されるクエリリクエストに対するクエリの結果を取得し、クライアントインターフェースモジュール１３０を介してクライアント１１０に提供する。ここで、クエリリクエストとは、上述したように、パラメータ化された文字列に対する実行計画識別子と、クエリ文に含まれた実行値リストとが対の形式に定義されているテキストを意味し、クエリの結果は１つのタプルまたは複数のタプルの集合であってもよい。
【００６８】
具体的に、クエリ結果取得モジュール１２６は、メモリ１３２に格納されたクエリテーブルにクライアント１１０から受信したクエリリクエストとマッチングするクエリ結果識別子が記録されているか否かを判断し、クエリリクエストとマッチングするクエリ結果識別子がクエリテーブルに記録されている場合、そのクエリ結果識別子に対応するクエリの結果をメモリ１３２またはディスク１３４から取得してクライアント１１０に提供する。
【００６９】
上述したように、クエリテーブルにクエリリクエストとマッチングするクエリ結果識別子が格納されていることは、そのクエリリクエストが以前に入力されたクエリリクエストであって、そのクエリリクエストに対するクエリの結果はメモリ１３２やディスク１３４に既に格納されているので、そのクエリリクエストに対するクエリの結果を取得するためにディスク１３４に格納されている実行計画を復号化したり、復号化された実行計画を実行したりする必要がないことを意味する。
【００７０】
このように、本発明は、同一のクエリリクエストが発生した場合、そのクエリリクエストに対して以前に生成されたクエリの結果を利用することができるので、データを照会する速度を向上させることが可能となる。
【００７１】
一方、クエリリクエストとマッチングするクエリ結果識別子がクエリテーブルに記録されていない場合には、クエリ結果取得モジュール１２６は、クエリリクエストに含まれた実行計画識別子に対応する実行計画がメモリ１３２に格納されているか否かを判断する。
【００７２】
判断結果、メモリ１３２にそのような実行計画が格納されていない場合、クエリ結果取得モジュール１２６は、ディスク１３４からクエリリクエストに含まれた実行計画識別子に該当するストリーム形式の実行計画を読み出し、復号化してメモリ１３２に格納する。その後、クエリリクエストに含まれている実行値リストを用いて復号化された実行計画を実行することにより、データベース１４０からクエリの結果を取得してディスク１３４に格納する。
【００７３】
判断結果、メモリ１３２にその実行計画が格納されている場合、メモリ１３２上に既に格納されている実行計画をクエリリクエストに含まれた実行値リストを用いて実行することにより、データベース１４０からクエリの結果を取得してディスク１３４に格納する。
【００７４】
本発明の一実施形態において、クエリ結果取得モジュール１２６は取得されたクエリの結果をディスク１３４に格納するに当たり、クエリの結果に対するクエリ結果識別子を生成し、生成されたクエリ結果識別子を後述するクエリテーブル管理モジュール１２８に提供することにより、クエリ結果識別子がクエリテーブル上に記録されるようにする。
【００７５】
上述したように、クエリリクエストとマッチングするクエリ結果識別子がクエリテーブルに格納されていないことは、そのクエリリクエストは最初に入力されたクエリリクエストであることを意味するので、そのクエリリクエストに対するクエリの結果は、クエリリクエストに含まれている実行計画識別子に対応する実行計画と、クエリリクエストに含まれている実行値リストとを用いて取得するようになる。
【００７６】
このように、本発明は、クエリリクエストとマッチングするクエリ結果識別子がクエリテーブルに記録されていない場合であっても、クエリリクエストに対するクエリの結果を取得するために新しい実行計画を生成せず、メモリ１３２やディスク１３４に格納されている以前の実行計画をそのまま利用することができるので、データベース管理システム１１０の性能を改善させることが可能となる。
【００７７】
次に、クエリテーブル管理モジュール１２８は、クライアント１１０から送信されるパラメータ化された文字列、パラメータ化された文字列に対して実行計画識別子管理モジュール１２４によって生成された実行計画識別子、クエリ文に含まれている実行値リスト、および、クエリリクエストに対するクエリ結果識別子をマッチングし、メモリ１３２に格納されているクエリテーブル上に記録する。
【００７８】
また、クエリテーブル管理モジュール１２８は、新しいパラメータ化された文字列が受信されるか、又は新しい実行値リストの受信によって新しいクエリ結果識別子が生成される場合、クエリテーブルを更新することができる。
【００７９】
本発明の一実施形態において、クエリテーブル管理モジュール１２８は、パラメータ化された文字列別に｛｛パラメータ化された文字列、実行計画識別子｝、｛１ｓｔ実行値リスト、１ｓｔクエリ結果識別子｝、｛２ｎｄ実行値リスト、２ｎｄクエリ結果識別子｝、…、｛Ｎｓｔ実行値リスト、Ｎｓｔクエリ結果識別子｝｝形式にクエリテーブル上に記録することができる。
【００８０】
一方、クエリテーブル管理モジュール１２８は、データベース１４０上でパラメータ化された文字列と関連付けられているテーブルが、データの追加、削除、または更新などの理由で変更されると、クエリテーブル上でパラメータ化された文字列と関連するデータ、例えば、パラメータ化された文字列が記録されているレコードを削除することができる。
【００８１】
上述したように本発明に係るクエリテーブル管理モジュール１２８は、各クエリ文の実行値リストをパラメータ化することで生成されるパラメータ化された文字列別に実行計画識別子と、実行値リスト及びそれに対するクエリ結果識別子とをマッチングさせて格納するので、メモリ資源を効率的に使用することができる。
【００８２】
次に、インターフェースモジュール１３０は、クライアント１１０とのインターフェース機能を実現するもので、クライアント１１０からパラメータ化された文字列を受信して判断モジュール１２２およびクエリテーブル管理モジュール１２８に送信し、それに対する応答として、パラメータ化された文字列とマッチングする実行計画識別子やパラメータ化された文字列に対する実行計画生成リクエストを実行計画識別子生成モジュール１２４から受信し、クライアント１１０に提供する。
【００８３】
また、インターフェースモジュール１３０は、クライアント１１０からパラメータ化された文字列に対する実行計画を受信して実行計画識別子管理モジュール１２４に送信し、実行計画識別子管理モジュール１２４によって生成された実行計画識別子をクライアント１１０に送信する。
【００８４】
また、インターフェースモジュール１３０は、実行計画識別子と実行値リストとから構成されるクエリリクエストをクライアント１１０から受信してクエリ結果取得モジュール１２６に送信し、クエリ結果取得モジュール１２６によって取得されたクエリの結果をクライアント１１０に提供する。
【００８５】
メモリ１３２には、クエリテーブル管理モジュール１２８によって生成されたクエリテーブルが記録され、クエリ結果取得モジュール１２６によって復号化された実行計画が格納され、クエリ結果取得モジュール１２６が復号化された実行計画を、実行値リストを用いて実行したクエリの結果が格納される。本発明の一実施形態において、メモリ１３２には、実行計画やクエリの結果のうち最近使用されたＮ個の実行計画やクエリの結果のみが格納される。
【００８６】
ディスク１３４には、クライアント１１０から送信された実行計画が格納され、クエリリクエストに対するクエリの結果が格納される。
【００８７】
データベース１１０には、様々なデータがテーブル形式に格納され、各テーブルは１つ以上のタプルから構成され、各タプルは１つ以上のカラムから構成される。例えば、特定の会社の社員に関する情報が格納されたデータベースである場合、テーブルは社員に関する情報の集合を意味し、タプルは各社員に該当する情報を意味し、カラムは該当する社員の社員番号、該当する社員の氏名、該当する社員の肩書、該当する社員の年収などが格納される領域を意味する。
【００８８】
以下では、上述したデータベース管理システム１００が特定のクエリ文を処理する方法について、例を挙げて説明する。
【００８９】
まず、クエリ文分析モジュール１１１が「ＳＥＬＥＣＴ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝  ２１０６」というクエリ文を受信した場合、文字列生成モジュール１１２は、受信されたクエリ文から「ＳＥＬＥＣＴ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝？」のようなパラメータ化された文字列を生成し、判断モジュール１２２に送信する。
【００９０】
その後、判断モジュール１２２は、パラメータ化された文字列がメモリ１３２のクエリテーブル上に記録されているか否かを判断する。パラメータ化された文字列がクエリテーブル上に記録されていないと仮定すれば、実行計画識別子管理モジュール１２４は実行計画生成モジュール１１４にその旨の応答を送信する。
【００９１】
その後、実行計画生成モジュール１１４がパラメータ化された文字列に対する実行計画を生成して実行計画識別子管理モジュール１２４に送信すると、実行計画識別子管理モジュール１２４は、その実行計画をディスク１３４に格納し、その実行計画に実行計画識別子「Ｐ」を生成してクエリリクエスト生成モジュール１１６に送信する。
【００９２】
その後、クエリリクエスト生成モジュール１１６は、実行計画識別子管理モジュール１２４から送信された実行計画識別子「Ｐ」と、クエリ文に含まれている実行値リスト「２１０６」とを用いて、｛Ｐ、２１０６｝のような対形式のクエリリクエストを生成してクエリ結果取得モジュール１２６に送信する。
【００９３】
その後、クエリ結果取得モジュール１２６は、クエリテーブルに受信されたクエリリクエストとマッチングするクエリ結果識別子が存在するか否かを判断する。この例において、クエリ文は最初に入力されたクエリ文であって、これに対するクエリの結果がメモリ１３２やディスク１３４には存在しないので、クエリ結果取得モジュール１２６は、ディスク１３４から実行計画識別子「Ｐ」に該当する実行計画を読み出し、メモリ１３２に復号化して格納した後、復号化された実行計画を、実行値リスト２１０６を用いて実行することでクエリの結果を取得し、取得されたクエリの結果をクライアント１１０に送信する。
【００９４】
その後、クエリ結果取得モジュール１２６は、取得されたクエリの結果にＲ１というクエリ結果識別子を付与し、取得されたクエリの結果をディスク１３４に格納する。
【００９５】
一方、クエリテーブル管理モジュール１２８は、パラメータ化された文字列「ＳＥＬＥＣＴ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝？」と、実行計画識別子「Ｐ」と、実行値リスト「２１０６」と、それに対するクエリ結果識別子「Ｒ１」とを互いにマッチングし、｛ＳＥＬＥＣＴ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ＝？、Ｐ、｛２１０６、Ｒ１｝｝のような形式でクエリテーブル上に記録する。
【００９６】
一方、クエリ文分析モジュール１１１がユーザから「ＳＥＬＥＣＴ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝１００」というクエリ文を受信する場合、文字列生成モジュール１１２は、受信されたクエリ文から「ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝？」のようなパラメータ化された文字列を生成して判断モジュール１２２に送信する。
【００９７】
判断モジュール１２２は、クエリテーブルに「ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝？」のようなパラメータ化された文字列が記録されているか否かを判断し、実行計画識別子管理モジュール１２４は、パラメータ化された文字列がクエリテーブルに記録されているので、パラメータ化された文字列とマッチングする実行計画識別子「Ｐ」をクエリリクエスト生成モジュール１１６に送信する。すなわち、このような場合には、パラメータ化された文字列に対する実行計画が既に生成されているので、別途実行計画を生成する必要はない。
【００９８】
次に、クエリリクエスト生成モジュール１１６は、実行計画識別子「Ｐ」とクエリ文に含まれた実行値リスト「１００」とを用いて、｛Ｐ、１００｝のような対形式のクエリリクエストを生成してクエリ結果取得モジュール１２６に送信する。
【００９９】
クエリ結果取得モジュール１２６は、クエリテーブルに受信されたクエリリクエストとマッチングするクエリ結果識別子が存在するか否かを判断する。判断結果、そのクエリリクエストとマッチングするクエリ結果識別子が存在しないが、既にメモリ１３２に実行計画識別子「Ｐ」に該当する実行計画が格納されているので、ディスク１３４から実行計画識別子「Ｐ」に該当する実行計画を読み込む必要はない。
【０１００】
その後、クエリ結果取得モジュール１２６は、メモリ１３２に格納されている実行計画を、実行値リスト１００を用いて実行することにより、クエリの結果を取得してクライアント１００に送信する。
【０１０１】
その後、クエリ結果取得モジュール１２６は、取得したクエリの結果にＲ２というクエリ結果識別子を付与した後、取得したクエリの結果をディスク１３４に格納する。
【０１０２】
その後、クエリテーブル管理モジュール１２８は、クエリテーブル上に｛１００、Ｒ２｝という内容を追加することにより、クエリテーブルを｛ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ＝？、Ｐ、｛２１０６、Ｒ１｝、｛１００、Ｒ２｝｝のような形式に更新する。
【０１０３】
一方、クエリ文分析モジュール１１１が「ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝  １２０６」というクエリ文を再受信する場合、文字列生成モジュール１１２は、受信されたクエリ文から「ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝？」のようなパラメータ化された文字列を生成し、判断モジュール１２２に送信する。
【０１０４】
判断モジュール１２２は、クエリテーブルに「ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ＥＭＰＬＯＹＥＥ  ＷＨＥＲＥ  ＥＭＰＮＯ  ＝？」のようなパラメータ化された文字列が記録されているか否かを判断し、実行計画識別子管理モジュール１２４は、パラメータ化された文字列がクエリテーブル上に記録されているので、パラメータ化された文字列とマッチングしている実行計画識別子「Ｐ」をクエリリクエスト生成モジュール１１６に送信する。すなわち、このような場合には、パラメータ化された文字列に対する実行計画が既に生成されているので、別途実行計画を生成する必要はない。
【０１０５】
次に、クエリリクエスト生成モジュール１１６は、実行計画識別子「Ｐ」とクエリ文に含まれた実行値リスト「２１０６」とを用いて、｛Ｐ、１２０６｝のような対形式のクエリリクエストを生成してクエリ結果取得モジュール１２６に送信する。
【０１０６】
クエリ結果取得モジュール１２６は、受信されたクエリリクエストとマッチングするクエリ結果識別子がクエリテーブルに存在するか否かを判断する。判断結果、クエリリクエスト｛Ｐ、１２０６｝とマッチングするクエリ結果識別子Ｒ１がクエリテーブル上に記録されているので、クエリ結果取得モジュール１２６は、ディスク１３４からクエリ結果識別子Ｒ１に対応するクエリの結果を読み出してメモリ１３２に格納した後、クエリの結果をクライアント１１０に提供する。
【０１０７】
以下、図４を参照して本発明に係るデータベース管理方法を説明する。
【０１０８】
図４は、本発明の一実施形態に係るデータベース管理方法を示すフローチャートである。まず、クライアントはユーザからクエリ文を受信して分析する（Ｓ４００）。ここで、クエリ文はＳＱＬ構文から作成されてもよく、このようなクエリ文の分析は、クエリ文を解析（Ｐａｒｓｉｎｇ）および意味分析（Ｓｅｍａｎｔｉｃ  Ｃｈｅｃｋ）することを意味する。
【０１０９】
次に、クライアントは、分析したクエリ文からパラメータ化された文字列を生成する（Ｓ４０２）。本発明の一実施形態において、文字列生成モジュール１１２は、クエリ文分析モジュール１１１によって分析されたクエリ文において定数またはバインディング変数のような実行値リストを予め定められたパラメータに変換することにより、パラメータ化された文字列を生成することができる。
【０１１０】
その後、クライアントがパラメータ化された文字列をサーバに送信すると（Ｓ４０４）、サーバはパラメータ化された文字列がクエリテーブル上に記録されているか否かを判断する（Ｓ４０６）。
【０１１１】
判断結果、パラメータ化された文字列がクエリテーブルに記録されていない場合には、クライアントにその旨の応答を送信する（Ｓ４０８）。本発明の一実施形態において、サーバは、パラメータ化された文字列の送信に対する応答としてＮｕｌｌをクライアントに送信してもよい。
【０１１２】
その後、クライアントは、パラメータ化された文字列に対する実行計画を生成し（Ｓ４１０）、生成された実行計画をサーバに送信する（Ｓ４１２）。本発明の一実施形態において、クライアントは、生成された実行計画をストリーム形式に変換してサーバに送信してもよい。
【０１１３】
次に、サーバは、受信した実行計画をディスクに格納した後（Ｓ４１４）、格納された実行計画に対して実行計画識別子を生成する（Ｓ４１５）。本発明の一実施形態において、実行計画識別子の生成時に生成された識別子をパラメータ化された文字列とマッチングさせ、クエリテーブルに記録してもよい。
【０１１４】
その後、サーバは、生成された実行計画識別子をクライアントに送信する（Ｓ４１６）。
【０１１５】
一方、Ｓ４０６における判断結果、パラメータ化された文字列がクエリテーブルに記録されていれば、クエリテーブル上でパラメータ化された文字列とマッチングさせて記録されている実行計画識別子をクライアントに送信する（Ｓ４１６）。
【０１１６】
その後、クライアントは、サーバから実行計画識別子が送信されると、実行計画識別子とクエリ文に含まれている実行値リストとから構成されるクエリリクエストを生成した後（Ｓ４１８）、生成されたクエリリクエストをサーバに送信する（Ｓ４２０）。本発明の一実施形態において、クエリリクエストを生成するとき、クライアントは、サーバから送信される実行計画識別子とクエリ文に含まれている実行値リストとを対形式で生成してもよい。このように本発明では、クエリリクエストに含まれる情報の量を、実行計画そのものをクエリリクエストとして送信する既存方法に比べて、大幅に縮小させることができるので、膨大な量のデータ照会時に発生するネットワーク負荷を減少させることができる。
【０１１７】
次に、サーバは、クライアントからクエリリクエストが受信されると、クエリテーブルにクエリリクエストとマッチングするクエリ結果識別子が存在するか否かを判断する（Ｓ４２２）。判断結果、クエリリクエストとマッチングするクエリ結果識別子が存在する場合、メモリまたはディスク上でクエリ結果識別子に対応するクエリの結果を取得した後（Ｓ４２４）、取得されたクエリの結果をクライアントに送信する（Ｓ４２６）。
【０１１８】
このとき、ディスクからクエリの結果を取得する場合には、取得されたクエリの結果をメモリ上に格納した後、取得されたクエリの結果をクライアントに送信してもよい。
【０１１９】
一方、Ｓ４２２の判断結果、クエリテーブル上にクエリリクエストとマッチングするクエリ結果識別子が存在しない場合、クエリリクエストに含まれた実行計画識別子に対応する実行計画がメモリ上に格納されているか否かを判断する（Ｓ４２８）。
【０１２０】
判断結果、メモリ上にその実行計画識別子に対応する実行計画が格納されていない場合、ディスク上からその実行計画識別子に対応する実行計画を読み出した後、復号化してメモリに格納する（Ｓ４３０）。その後、メモリに格納されている実行計画をクエリリクエストに含まれている実行値リストを用いて実行することにより、クエリの結果を取得した後、ディスクに格納する（Ｓ４３２）。
【０１２１】
取得されたクエリの結果をディスクに格納するとき、そのクエリの結果を識別するためのクエリ結果識別子を生成し、生成されたクエリ結果識別子をクエリテーブル上にクエリリクエストとマッチングさせて記録してもよい。その後、取得されたクエリの結果をクライアントに送信する（Ｓ４２６）。
【０１２２】
一方、Ｓ４２８の判断結果、メモリ上にその実行計画識別子に対応する実行計画が格納されている場合、メモリに格納されている実行計画をクエリリクエストに含まれている実行値リストを用いて実行することにより、クエリの結果を取得した後、取得されたクエリの結果をディスクに格納する（Ｓ４３０）。
【０１２３】
上述したデータベース管理方法は、様々なコンピュータの手段によって行われるプログラム命令形態で実現され、コンピュータで読み取り可能な記録媒体に記録される。このとき、コンピュータで読み取り可能な記録媒体は、プログラム命令、データファイル、データ構造などを単独または組み合わせて含んでいてもよい。一方、記録媒体に記録されるプログラム命令は、本発明のために特別に設計されて構成されたもの又はコンピュータソフトウェアの当業者に公知されて使用可能なものであってもよい。
【０１２４】
コンピュータで読み取り可能な記録媒体としては、ハードディスク、フロッピー（登録商標）ディスクおよび磁気テープのような磁気媒体（Ｍａｇｎｅｔｉｃ  Ｍｅｄｉａ）、ＣＤ−ＲＯＭ、ＤＶＤのような光記録媒体（Ｏｐｔｉｃａｌ  Ｍｅｄｉａ）、フロプティカルディスク（Ｆｌｏｐｔｉｃａｌ  Ｄｉｓｋ）のような磁気−光媒体（Ｍａｇｎｅｔｏ−Ｏｐｔｉｃａｌ  Ｍｅｄｉａ）、およびＲＯＭ、ＲＡＭ、フラッシュメモリ等のようなプログラム命令を格納し、実行するように特別に構成されたハードウェア装置が含まれる。一方、このような記録媒体は、プログラム命令、データ構造などを指定する信号を送信する搬送波を含む光または金属線、導波管などの送信媒体であってもよい。
【０１２５】
また、プログラム命令には、コンパイラによって作製されるような機械語コードだけでなく、インタープリタ等を用いてコンピュータによって実行される高級言語コードを含む。上述したハードウェア装置は、本発明の動作を行うために１つ以上のソフトウェアモジュールとして作動するように構成されてもよく、その逆も同様である。
【０１２６】
一方、本発明が属する技術分野の当業者は、上述した本発明をその技術的思想や必須特徴を変更せず、他の具体的な形態で実施可能であることを理解できるであろう。
【０１２７】
例えば、上述した本発明の実施形態においては、データベース管理システムがクライアントとサーバとから構成されると記載されているが、変形された実施形態においては、クライアントとサーバを物理的に１つのサーバに実現することもでき、クライアントの一部構成要素がサーバに含まれるか又はサーバの一部構成要素がクライアントに含まれるように実現することもできるであろう。
【０１２８】
したがって、上述した本発明の実施形態は、全ての面で例示的なものであり、限定的なものではないことを理解すべきである。本発明の範囲は、前記詳細な説明よりも後述する特許請求範囲によって現れ、特許請求範囲の意味および範囲、またその等価概念から導き出される全ての変更または変形された形態が本発明の範囲に含まれるものと解釈しなければならない。
【図１】
0005600736.tif 000002
【図２】
0005600736.tif 000003
【図３】
0005600736.tif 000004
【図４】
0005600736.tif 000005