(57)【要約】【課題】ユーザが詳細な知識を持つこともなく複雑かつ柔軟なヒント機能を容易に作成することができるデータベース検索システムを提供する。【解決手段】問合せクエリを問合せ言語の文法に従って構文解析した後、データベース管理装置にとって１つの処理単位となるノードによって構成される解析木を作成するとともに、解析木の各単位についてデータベース管理装置側が適用可能なヒント項目を検出し、解析木を木構造の形で表現し、各ノードに対して選択可能なヒントを提示する。これにより、問合せクエリをデータベース管理装置側の処理単位及びヒントの適用単位で構成される解析木として視覚的に把握することができるとともに、各ノードに対して適用可能なヒントが提示されるため、ユーザ側は容易に問合せクエリの単位を把握し、ヒントを柔軟に追加することができる。【選択図】        図８
2008084028.tif 000002
【特許請求の範囲】
【請求項１】
データベース管理装置で管理しているデータベースに対して問合せ装置からの問合せクエリに従って問合せ処理を実施するデータベース検索システムにおいて、
前記問合せ装置からの前記問合せクエリを問合せ言語の文法に従って構文解析する構文解析手段と、
この構文解析手段による構文解析の結果に基づいて前記データベース管理装置の１つの処理単位となるノードによって構成される解析木を作成する解析木作成手段と、
この解析木作成手段が作成した前記解析木の各単位について、前記データベース管理装置側が適用可能なユーザの意図を反映させるヒント項目を検出するヒント検出手段と、
前記解析木作成手段が作成した前記問合せクエリの解析木を前記問合せ装置に表示するとともに、前記解析木の各単位に適用可能なヒント項目についても選択可能な形式で表示する解析木表示手段と、
この解析木表示手段により表示されている前記ヒント項目が前記問合せ装置によって選択されたか否かを判断するヒント選択判断手段と、
このヒント選択判断手段により前記ヒント項目が選択されたと判断した場合、選択された前記ヒント項目をヒント文に変換して前記解析木が記憶した前記問合せクエリの記述位置に基づいて挿入して編集するクエリ編集手段と、
を備え、
前記クエリ編集手段により編集された前記問合せクエリに従って問合せ処理を実施する、
ことを特徴とするデータベース検索システム。
【請求項２】
前記ヒント選択判断手段は、前記解析木表示手段により表示されている前記解析木の前記ノードが順に指定された場合には、指定された前記各ノードに対応する前記ヒント項目が選択されたと判断し、
前記クエリ編集手段は、前記解析木の前記ノードの指定順を実現する前記ヒント項目をヒント文に変換する、
ことを特徴とする請求項１記載のデータベース検索システム。
【請求項３】
前記クエリ編集手段により編集された前記ヒント項目の制約の元で前記解析木から前記問合せクエリに対する実行計画の候補である複数のプラン候補を作成するプラン候補作成手段と、
このプラン候補作成手段により作成された複数の前記プラン候補を選択可能な形式で表示するプラン表示手段と、
前記プラン候補が選択されたと判断した場合、選択された前記プラン候補をヒント文に変換して前記解析木が記憶した前記問合せクエリの記述位置に基づいて挿入して編集するクエリ再編集手段と、
を備えることを特徴とする請求項１または２記載のデータベース検索システム。
【請求項４】
前記クエリ編集手段により編集された前記ヒント項目の制約の元で前記解析木から前記問合せクエリに対する実行計画の候補である複数のプラン候補を作成するプラン候補作成手段と、
このプラン候補作成手段により作成された複数の前記プラン候補から最適な前記プラン候補を切り替えることが可能な条件付ヒントを作成する性能分岐点検出手段と、
前記プラン候補作成手段により作成された複数の前記プラン候補と前記性能分岐点検出手段により作成された前記条件付ヒントとを選択可能な形式で表示するプラン表示手段と、
前記プラン候補または前記条件付ヒントが選択されたと判断した場合、選択された前記プラン候補または前記条件付ヒントをヒント文に変換して前記解析木が記憶した前記問合せクエリの記述位置に基づいて挿入して編集するクエリ再編集手段と、
このクエリ再編集手段により編集された前記条件付ヒントに基づいて前記データベース管理装置で実行する条件付きプランを作成する条件付きプラン作成手段と、
この条件付きプラン作成手段により作成された前記条件付プランに従って各オペレーションを実行し、前記問合せクエリの実行結果を得る条件付きプラン実行手段と、
を備えることを特徴とする請求項１または２記載のデータベース検索システム。
【請求項５】
前記性能分岐点検出手段は、前記解析木から問合せ処理をするプランを構成するオペレーション列を作成する際に、前記各オペレーションに入力されるデータ数の見積り及びその予測精度から見積りの誤差範囲を決定し、見積り誤差範囲内で入力の値を変化することにより得られるプランの候補とそのときの入力の境界値を見つけ出す、
ことを特徴とする請求項４記載のデータベース検索システム。
【請求項６】
前記解析木表示手段は、前記解析木を木構造として表現し、前記問合せクエリ内の記述部分と前記解析木の各節とが対応付けられている、
ことを特徴とする請求項１ないし５のいずれか一記載のデータベース検索システム。
【請求項７】
データベース管理装置で管理しているデータベースに対して問合せ装置からの問合せクエリに従って問合せ処理を実施するデータベース検索方法において、
前記問合せ装置からの前記問合せクエリを問合せ言語の文法に従って構文解析する構文解析工程と、
この構文解析工程による構文解析の結果に基づいて前記データベース管理装置の１つの処理単位となるノードによって構成される解析木を作成する解析木作成工程と、
この解析木作成工程が作成した前記解析木の各単位について、前記データベース管理装置側が適用可能なユーザの意図を反映させるヒント項目を検出するヒント検出工程と、
前記解析木作成工程が作成した前記問合せクエリの解析木を前記問合せ装置に表示するとともに、前記解析木の各単位に適用可能なヒント項目についても選択可能な形式で表示する解析木表示工程と、
この解析木表示工程により表示されている前記ヒント項目が前記問合せ装置によって選択されたか否かを判断するヒント選択判断工程と、
このヒント選択判断工程により前記ヒント項目が選択されたと判断した場合、選択された前記ヒント項目をヒント文に変換して前記解析木が記憶した前記問合せクエリの記述位置に基づいて挿入して編集するクエリ編集工程と、
を含み、
前記クエリ編集工程により編集された前記問合せクエリに従って問合せ処理を実施する、
ことを特徴とするデータベース検索方法。
【請求項８】
前記クエリ編集工程により編集された前記ヒント項目の制約の元で前記解析木から前記問合せクエリに対する実行計画の候補である複数のプラン候補を作成するプラン候補作成工程と、
このプラン候補作成工程により作成された複数の前記プラン候補を選択可能な形式で表示するプラン表示工程と、
前記プラン候補が選択されたと判断した場合、選択された前記プラン候補をヒント文に変換して前記解析木が記憶した前記問合せクエリの記述位置に基づいて挿入して編集するクエリ再編集工程と、
を含むことを特徴とする請求項７記載のデータベース検索方法。
【請求項９】
前記クエリ編集工程により編集された前記ヒント項目の制約の元で前記解析木から前記問合せクエリに対する実行計画の候補である複数のプラン候補を作成するプラン候補作成工程と、
このプラン候補作成工程により作成された複数の前記プラン候補から最適な前記プラン候補を切り替えることが可能な条件付ヒントを作成する性能分岐点検出工程と、
前記プラン候補作成工程により作成された複数の前記プラン候補と前記性能分岐点検出工程により作成された前記条件付ヒントとを選択可能な形式で表示するプラン表示工程と、
前記プラン候補または前記条件付ヒントが選択されたと判断した場合、選択された前記プラン候補または前記条件付ヒントをヒント文に変換して前記解析木が記憶した前記問合せクエリの記述位置に基づいて挿入して編集するクエリ再編集工程と、
このクエリ再編集工程により編集された前記条件付ヒントに基づいて前記データベース管理装置で実行する条件付きプランを作成する条件付きプラン作成工程と、
この条件付きプラン作成工程により作成された前記条件付プランに従って各オペレーションを実行し、前記問合せクエリの実行結果を得る条件付きプラン実行工程と、
を含むことを特徴とする請求項７記載のデータベース検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース検索システムおよびデータベース検索方法に関する。
【背景技術】
【０００２】
問合せクエリに応じてデータベースを検索するデータベース管理装置は、問合せクエリを解析して、効率的な応答性能を実現するための索引作成などの問合せ実行計画（プラン）を作成し、当該プランに基づいてデータベース管理装置内のデータに対して問合せ処理を実施する。
【０００３】
しかしながら、作成されたプランは必ずしも最も効率が良いものとは限らないため、ユーザはデータベース管理装置が作成したプランを参照して問題点を解析する必要がある。
【０００４】
一般に、作成されたプランはデータベース管理装置の装置固有の言語として提供され、データベースに対するオペレーションとその付随情報を複数のカラムとして含むテーブル形式で与えられる場合が多い。このため、プランを解析するにはデータベース管理装置の装置固有の言語の知識を十分に把握する必要があり、また分かりにくいテーブル形式で渡されたプランを解読する必要がある。
【０００５】
そこで、このような問題を解決するため、特許文献１では、データベース管理装置が作成した複雑なプランを木構造の形で表示することによってユーザがすばやくプランを解析することを支援している。
【０００６】
一方、データベース管理装置側では、プランを解析したユーザが検索時間の問題などによってプランを変更したいと考えた場合に、ユーザの意図を反映させる手段としてヒント機能を提供している。このヒント機能は、一般に、問合せ言語で提供された文法やデータベース管理装置が独自に拡張した文法、問合せ言語のコメント文等を利用して提供されている。例えば、ＸＭＬデータに対する問合せ言語であるＸＱｕｅｒｙでは、実装側固有の処理を指定可能とするＰｒａｇｍａ文法が用意されており、このＰｒａｇｍａ文法を使用することでヒント機能が提供可能である。また、ORACLE社（ORACLEは登録商標）が提供するデータベースでは、ＳＱＬ内のコメントを独自拡張し、コメント内で記述可能な幾つかの文法を用意することでプランを変更する手段を提供している。他にもMicrosoft社（Microsoftは登録商標）が提供するデータベースであるSQLServerではＳＱＬ文法を拡張することでヒント機能を実現している。このように、従来より様々な形でプランの変更をユーザにより指定する方法が提供されている。
【０００７】
【特許文献１】特許第２５１０９４５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述したようなヒント機能を提供するデータベース管理装置では、ヒント機能を指定する方法は存在するものの、ヒント機能を容易に作成するための手段が提供されていない。つまり、ユーザは、問合せ言語、データベース固有のプラン及びヒント機能の文法・機能を十分に把握しなければヒント機能を使用することができない。
【０００９】
ヒント機能を容易に作成するための手段が提供されていない原因の１つとしては、問合せクエリに対してユーザ側に提供する情報がプラン情報だけであることが挙げられる。より詳細には、プランではデータベース管理装置側の実行単位であるオペレーションの列が出力されているが、このオペレーションが問合せクエリのどの部分に対応しているかがプラン情報だけでは完全に把握できないためである。また、問合せクエリのどの部分に対してどのようなヒント機能が適用できるかを問合せクエリとプランを見るだけで判断するのが難しく、ユーザ側に詳細な知識が必要とされてしまうためである。
【００１０】
加えて、一般に提供されているヒント機能は、索引使用などの固定的な指示で用意されており、状況に応じて動作を変化させるようなヒント機能は用意されていない。このためストアドファンクションのようなパラメータ化されたクエリでは入力される変数値によって効率的なプランが変化するため、ヒント機能を利用することは困難である。また、ＳＱＬのLike文やＸＱｕｅｒｙのcontains（）関数によって実現される部分マッチ検索は、部分マッチによって該当するデータ件数に対する精度の高い見積もりが難しく効率の良い実行計画を作るのが困難である。すなわち、上述したパラメータ化されたクエリによる検索および部分マッチ検索のいずれにおいても、実際の値に応じて効率の良いプランを生成するようなヒント機能が存在すれば良いが、このようなヒントを提供するには幾つかの問題がある。１つは、そのような見積り精度が低くなるポイントをユーザが見つけ出すことが難しいことである。１つは、状況に応じたプラン生成を指定するようなヒント機能を実現するには複雑なヒントの記述が必要であることである。１つは、そのようなヒントをどこに埋め込むべき場所を決定することが難しいことである。また、上述したような機能を実現したとしてもユーザ側に詳細に把握してもらう必要があり、実際に使用してもらえる可能性は低いと考えられる。
【００１１】
本発明は、上記に鑑みてなされたものであって、ユーザが詳細な知識を持つこともなく複雑かつ柔軟なヒント機能を容易に作成することができるデータベース検索システムおよびデータベース検索方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するために、本発明は、データベース管理装置で管理しているデータベースに対して問合せ装置からの問合せクエリに従って問合せ処理を実施するデータベース検索システムにおいて、前記問合せ装置からの前記問合せクエリを問合せ言語の文法に従って構文解析する構文解析手段と、この構文解析手段による構文解析の結果に基づいて前記データベース管理装置の１つの処理単位となるノードによって構成される解析木を作成する解析木作成手段と、この解析木作成手段が作成した前記解析木の各単位について、前記データベース管理装置側が適用可能なユーザの意図を反映させるヒント項目を検出するヒント検出手段と、前記解析木作成手段が作成した前記問合せクエリの解析木を前記問合せ装置に表示するとともに、前記解析木の各単位に適用可能なヒント項目についても選択可能な形式で表示する解析木表示手段と、この解析木表示手段により表示されている前記ヒント項目が前記問合せ装置によって選択されたか否かを判断するヒント選択判断手段と、このヒント選択判断手段により前記ヒント項目が選択されたと判断した場合、選択された前記ヒント項目をヒント文に変換して前記解析木が記憶した前記問合せクエリの記述位置に基づいて挿入して編集するクエリ編集手段と、を備え、前記クエリ編集手段により編集された前記問合せクエリに従って問合せ処理を実施する。
【００１３】
また、本発明は、データベース管理装置で管理しているデータベースに対して問合せ装置からの問合せクエリに従って問合せ処理を実施するデータベース検索方法において、前記問合せ装置からの前記問合せクエリを問合せ言語の文法に従って構文解析する構文解析工程と、この構文解析工程による構文解析の結果に基づいて前記データベース管理装置の１つの処理単位となるノードによって構成される解析木を作成する解析木作成工程と、この解析木作成工程が作成した前記解析木の各単位について、前記データベース管理装置側が適用可能なユーザの意図を反映させるヒント項目を検出するヒント検出工程と、前記解析木作成工程が作成した前記問合せクエリの解析木を前記問合せ装置に表示するとともに、前記解析木の各単位に適用可能なヒント項目についても選択可能な形式で表示する解析木表示工程と、この解析木表示工程により表示されている前記ヒント項目が前記問合せ装置によって選択されたか否かを判断するヒント選択判断工程と、このヒント選択判断工程により前記ヒント項目が選択されたと判断した場合、選択された前記ヒント項目をヒント文に変換して前記解析木が記憶した前記問合せクエリの記述位置に基づいて挿入して編集するクエリ編集工程と、を含み、前記クエリ編集工程により編集された前記問合せクエリに従って問合せ処理を実施する。
【発明の効果】
【００１４】
本発明によれば、問合せクエリを問合せ言語の文法に従って構文解析した後、データベース管理装置にとって１つの処理単位となるノードによって構成される解析木を作成するとともに、解析木の各単位についてデータベース管理装置側が適用可能なユーザの意図を反映させるヒント項目を検出し、各ノードに対して選択可能なヒントを提示する。これにより、問合せクエリをデータベース管理装置側の処理単位及びヒントの適用単位で構成される解析木として視覚的に把握することができるとともに、各ノードに対して適用可能なヒントが提示されるため、ユーザ側は容易に問合せクエリの単位を把握し、ヒントを柔軟に追加することができる。また、選択されたヒント項目をヒント文に変換して解析木が記憶した問合せクエリの記述位置に基づいて挿入して編集するので、ユーザはヒントを選択するだけでよく、実際にヒント文を問合せクエリに記述する必要がない。
【発明を実施するための最良の形態】
【００１５】
以下に添付図面を参照して、この発明にかかるデータベース検索システムおよびデータベース検索方法の最良な実施の形態を詳細に説明する。
【００１６】
本発明の実施の一形態を図１ないし図２４に基づいて説明する。
【００１７】
［１．システムの構成］
図１は、本発明の実施の一形態にかかるデータベース検索システムのシステム構築例を示す模式図である。データベース検索システムは、図１に示すように、サーバコンピュータ（以下、サーバという）１にＬＡＮ（Local Area Network）等のネットワーク２を介してクライアントコンピュータ（以下、クライアントという）３が複数台接続されたサーバクライアントシステムを想定する。クライアント３は、一般的なパーソナルコンピュータ等である。
【００１８】
図２は、サーバ１およびクライアント３のモジュール構成図である。サーバ１およびクライアント３は、情報処理を行うＣＰＵ（Central Processing Unit）１０１、ＢＩＯＳなどを記憶した読出し専用メモリであるＲＯＭ（Read Only Memory）１０２、各種データを書換え可能に記憶するＲＡＭ（Random Access Memory）１０３、各種データベースとして機能するとともに各種のプログラムを格納するＨＤＤ（Hard Disk Drive）１０４、記憶媒体１１０を用いて情報を保管したり外部に情報を配布したり外部から情報を入手するためのＣＤ−ＲＯＭドライブ等の媒体駆動装置１０５、ネットワーク２を介して外部の他のコンピュータと通信により情報を伝達するための通信制御装置１０６、処理経過や結果等を操作者に表示するＣＲＴ（Cathode Ray Tube）やＬＣＤ（Liquid Crystal Display）等の表示部１０７、並びに操作者がＣＰＵ１０１に命令や情報等を入力するためのキーボードやマウス等のポインティングデバイスである入力部１０８等から構成されており、これらの各部間で送受信されるデータをバスコントローラ１０９が調停して動作する。
【００１９】
このようなサーバ１およびクライアント３では、オペレータが電源を投入するとＣＰＵ１０１がＲＯＭ１０２内のローダーというプログラムを起動させ、ＨＤＤ１０４よりＯＳ（Operating System）というコンピュータのハードウェアとソフトウェアとを管理するプログラムをＲＡＭ１０３に読み込み、このＯＳを起動させる。このようなＯＳは、オペレータの操作に応じてプログラムを起動したり、情報を読み込んだり、保存を行ったりする。ＯＳのうち代表的なものとしては、Ｗｉｎｄｏｗｓ（登録商標）、ＵＮＩＸ（登録商標）等が知られている。これらのＯＳ上で走る動作プログラムをアプリケーションプログラムと呼んでいる。なお、アプリケーションプログラムは、所定のＯＳ上で動作するものに限らず、後述の各種処理の一部の実行をＯＳに肩代わりさせるものであってもよいし、所定のアプリケーションソフトやＯＳなどを構成する一群のプログラムファイルの一部として含まれているものであってもよい。
【００２０】
ここで、サーバ１は、アプリケーションプログラムとして、データベース管理プログラムをＨＤＤ１０４に記憶している。この意味で、ＨＤＤ１０４は、データベース管理プログラムを記憶する記憶媒体として機能する。
【００２１】
一方、クライアント３は、アプリケーションプログラムとして、問合せプログラムをＨＤＤ１０４に記憶している。この意味で、ＨＤＤ１０４は、問合せプログラムを記憶する記憶媒体として機能する。
【００２２】
また、一般的には、サーバ１およびクライアント３のＨＤＤ１０４にインストールされるアプリケーションプログラムは、ＣＤ−ＲＯＭやＤＶＤなどの各種の光ディスク、各種光磁気ディスク、フレキシブルディスクなどの各種磁気ディスク、半導体メモリ等の各種方式のメディア等の記憶媒体１１０に記録され、この記憶媒体１１０に記録された動作プログラムがＨＤＤ１０４にインストールされる。このため、ＣＤ−ＲＯＭ等の光情報記録メディアやＦＤ等の磁気メディア等の可搬性を有する記憶媒体１１０も、アプリケーションプログラムを記憶する記憶媒体となり得る。さらには、アプリケーションプログラムは、例えば通信制御装置１０６を介して外部から取り込まれ、ＨＤＤ１０４にインストールされても良い。
【００２３】
サーバ１は、ＯＳ上で動作するデータベース管理プログラムが起動すると、このデータベース管理プログラムに従い、ＣＰＵ１０１が各種の演算処理を実行して各部を集中的に制御する。一方、クライアント３は、ＯＳ上で動作する問合せプログラムが起動すると、この問合せプログラムに従い、ＣＰＵ１０１が各種の演算処理を実行して各部を集中的に制御する。サーバ１およびクライアント３のＣＰＵ１０１が実行する各種の演算処理のうち、本実施の形態の特長的な処理について以下に説明する。
【００２４】
ここで、図３はデータベース検索システムの機能構成を示す構成図である。図３に示すように、クライアント３は、問合せプログラムに従うことにより、問合せ装置として機能するものであり、問合せクエリテキスト部１１と、問合せクエリ解析木表示編集部１２と、問合せクエリプラン表示編集部１３とを備える。一方、サーバ１は、図３に示すように、データベース管理プログラムに従うことにより、データベース管理装置として機能するものであり、問合せ構文解析部２１と、解析木作成部２２と、選択可能ヒント検出部２３と、プラン候補作成部２４と、性能分岐点検出部２５と、条件付きプラン作成部２６と、条件付きプラン実行部２７とを備える。以下、各機能について説明する。
【００２５】
クライアント３の問合せクエリテキスト部１１は、問合せクエリを表示・記述するものであり、ユーザは最初に問合せクエリテキスト部１１に対してデータベース管理装置であるサーバ１への問合せクエリを、クエリの文法に従って記述する。ここで、図４はＸＭＬデータに対する問合せ言語ＸＱｕｅｒｙで記述されたクエリを例示的に示す模式図である。図４に示す問合せクエリテキスト部１１で記述された問合せクエリは、サーバ１に格納されている特許のＸＭＬ文書のデータベース“patent"内に対して「メインクレームに“データベース”を含み文書内に“ＸＭＬ"を含む特許ＸＭＬ文書をデータベースから取得」することを目的としたクエリである。このようにして記述された問合せクエリは、サーバ１に送られる。
【００２６】
サーバ１の問合せ構文解析部２１は、構文解析手段として機能するものであって、クライアント３から送られた問合せクエリを入力として受け取り、問合せ言語の文法に従って解析し、文法で記述された単位に分解された構文解析木を作成する。ここで、図５は構文解析木を例示的に示す模式図である。図５は、問合せ言語ＸＱｕｅｒｙの文法のＥＢＮＦの一部と、作成した構文解析木を例に挙げている。図５に示すように、構文解析木は、ＸＱｕｅｒｙのＥＢＮＦ文法で記述された単位に分解して木構造で表現される。この構文解析木は文法に従って単純に生成されたものであり、実際のサーバ１（データベース管理装置）での処理単位とは異なる。
【００２７】
サーバ１の問合せ解析木作成部２２は、解析木作成手段として機能するものであって、問合せ構文解析部２１が作成した構文解析木を受け取り、サーバ１（データベース管理装置）にとって意味のある処理単位（すなわち、サーバ１の１つの処理単位となるノードによって構成される単位）に再構築した解析木を作成する。なお、解析木の単位は、サーバ１（データベース管理装置）の内部処理構造によって異なる。ここで、図６は再構築した解析木を示す模式図である。図６では、解析木の一例として図４のクエリに対してノード（１）〜（９）で表現された解析木を挙げている。ここでは解析木の単位として、関数処理、ＸＭＬノード取得処理、定数値等に分解している。図６に示す（１）は特許文書のＸＭＬデータベース“patent"コレクションを指定する関数、（２）は（１）の出力結果から直下にある“patent”ＸＭＬノードを取得する処理、（３）は（２）の直下にある“mainclaim”ＸＭＬノードを取得する処理、（４）は定数値“データベース”、（５）は（２）の下にある全てのＸＭＬノードを取得する処理、（６）は定数値“ＸＭＬ”、（７）は（１）と（２）を合わせた処理、（８）は（３）と（４）を引数とする関数“contains（）”によるフィルタ処理、（９）は（５）と（６）を引数とする関数“contains（）”によるフィルタ処理である。
【００２８】
サーバ１の選択可能ヒント検出部２３は、ヒント検出手段として機能するものであって、問合せ解析木作成部２２が作成した解析木の各単位について、サーバ１（データベース管理装置）側が適用可能なユーザの意図を反映させるヒントの一覧を検出する。ここで、図７は解析木のノードと適用可能なヒントの組合せの一例を示す模式図である。図７では一例として、図６の解析木のノードに適用可能なヒントの関係表を記載している。例えば、関数“contains（）”によるフィルタ処理は、引数がＸＭＬノードと定数値の場合、索引使用及び禁止のヒント「Index」または「Noindex」が適用可能であり、図６では（８）と（９）が該当する。また、ＸＭＬノード取得処理では、ＸＭＬノードの取得方向を指定するヒント「traverseToDown」または「traverseToUp」が適用可能であり、図６では（３）と（５）が該当する。ここで得られた解析木と適用可能なヒント一覧はクライアント３（問合せ装置）に送られる。
【００２９】
クライアント３の問合せクエリ解析木表示編集部１２は、解析木表示手段として機能するものであって、サーバ１（データベース管理装置）から送られてきた解析木と適用可能なヒントを入力として受け取ると、図８に示すように、表示部１０７に解析木を木構造の形で表示するとともに、解析木の各単位に適用可能なヒントについてチェックボックスＣＢを付して表示する。図８では、問合せクエリ解析木表示編集部１２において、サーバ１（データベース管理装置）から送信された図６の解析木と選択可能なヒントが表示された例を挙げる。図８に示す（ａ）は（３）の“mainclaim”ＸＭＬノードを取得する処理に対するヒント、（ｂ）は（５）の全てのＸＭＬノードを取得する処理に対するヒント、（ｃ）は（３）と（４）を引数とする関数“contains（）”によるフィルタ処理に対するヒント、（ｄ）は（５）と（６）を引数とする関数“contains（）”によるフィルタ処理に対するヒントである。
【００３０】
ここで、図９は問合せクエリ解析木表示編集部１２における処理の流れを示すフローチャートである。図９に示すように、まず、ユーザが選択可能なヒントのチェックボックスを入力部１０８を介してチェックすることにより適用可能なヒントが選択されたと判断すると（ステップＳ１１のＹｅｓ：ヒント選択判断手段）、ステップＳ１２に進む。例えば、図８の状態から図１０に示すようにユーザによって解析木のノード（９）に対して索引使用ヒント（ｄ）の「index」に対応するチェックボックスＣＢが入力部１０８を介して選択される。
【００３１】
続いて、ＸＱｕｅｒｙではヒント内で記述した名前空間を解決するための名前空間宣言を挿入し（ステップＳ１２）、選択されたヒントを解析木が記憶した問合せクエリの記述位置に基づいてヒント文に変換して問合せクエリテキスト部１１内の問合せクエリに挿入する（ステップＳ１３：クエリ編集手段）。ここで、図１１はヒント選択によるヒント文挿入例を示す模式図である。図１１は、ＸＱｕｅｒｙにおけるＰｒａｇｍａ文法を利用したヒント機能の例である。図１１では「メインクレームに“データベース”を含み文書内に“ＸＭＬ"を含む特許ＸＭＬ文書を特許データベース“patent”から取得」という問合せクエリに対して、「文書内に“ＸＭＬ"を含む」に該当する「contains（., "ＸＭＬ"）」という式を「（＃ exq：index ＃）｛contains（., "ＸＭＬ"）｝」とＰｒａｇｍａ文法「（＃ exq：index ＃）｛式｝」を用いて囲むことで「contains（., "ＸＭＬ"）」処理時に索引を使用するようにサーバ１（データベース管理装置）にユーザの意図を伝えている。そして、図１１に示すように、チェックされたヒントを反映するために、問合せクエリテキスト部１１内の問合せクエリにヒント文「（＃ exq：index ＃）｛｝」がノード（９）に該当する箇所を囲む形で挿入されている。また、先頭には、名前空間宣言が挿入されている。これにより、ユーザはノード（９）の条件式に対して索引を使用する意図をサーバ１（データベース管理装置）に伝えることが可能となる。
【００３２】
加えて、問合せクエリ解析木表示編集部１２においては、マウス等の入力部１０８を用いて解析木の各ノードから別のノードへカーソルを移動させることにより、問合せクエリの動作順序を指定することが可能である。図１２は、問合せクエリ解析木表示編集部１２における処理の流れを示すフローチャートである。図１２に示すように、ユーザがマウス等の入力部１０８を用いて解析木の各ノードから別のノードへカーソルを移動させることにより、問合せクエリの動作順序が指定されたと判断すると（ステップＳ２１のＹｅｓ：ヒント選択判断手段）、カーソルで移動させた解析木の順に動作するように該当するヒントのチェックボックスをチェックする（ステップＳ２２）。
【００３３】
例えば、図８の状態から図１３に示すように、ユーザが、入力部１０８を用いて解析木の各ノードから別のノードへカーソルを移動させることにより、問合せクエリの動作順序を指定する。図１３においては、解析木のノード（９）から解析木のノード（７）へとカーソルを移動させ、さらに解析木のノード（７）から解析木のノード（８）へとカーソルを移動させている。問合せクエリ解析木表示編集部１２は、そのようなカーソルの移動順を実現するためのヒントとして、最初に解析木のノード（９）を実施するために、解析木のノード（９）の取得に必要となる索引処理を適用するための処理としてヒント（ｄ）の索引使用のヒントのチェックボックスＣＢにチェックを入れる。次に、解析木のノード（９）から解析木のノード（７）への動作を実現するために、解析木のノード（５）に対して下位から上位のＸＭＬノードを取得するために必要となるトラバース処理を適用するための処理として、ヒント（ｂ）の“traverseToUp”ヒントのチェックボックスにチェックを入れる。さらに、解析木のノード（７）から解析木のノード（８）への動作を実現するために、解析木のノード（３）に対して上位から下位のＸＭＬノードを取得するために必要となるトラバース処理を適用するための処理として、ヒント（ａ）の“traverseToDown”ヒントのチェックボックスにチェックを入れる。
【００３４】
続いて、チェックされたヒントを解析木が記憶した問合せクエリの記述位置に基づいてヒント文に変換して問合せクエリテキスト部１１内の問合せクエリに挿入し（ステップＳ２３：クエリ編集手段）、ＸＱｕｅｒｙではヒント内で記述した名前空間を解決するための名前空間宣言を挿入する（ステップＳ２４）。ここで、図１４は問合せクエリの動作順序指定に基づくヒント選択によるヒント文挿入例を示す模式図である。図１４に示すように、チェックされたヒントを反映するために、問合せクエリテキスト部１１内の問合せクエリにヒント文「（＃ exq：index ＃）｛｝」が解析木のノード（９）に該当する箇所を囲む形で挿入される。また、ヒント文「（＃ exq：traverseToUp ＃）｛｝」が解析木のノード（５）に該当する箇所を囲む形で挿入される。また、ヒント文「（＃ exq：traverseToDown ＃）｛｝」が解析木のノード（３）に該当する箇所を囲む形で挿入される。さらに、先頭には、名前空間宣言が挿入されている。これにより、ユーザは、解析木のノード（９）から解析木のノード（２）、解析木のノード（２）から解析木のノード（８）の順序で問合せクエリを処理するような意図をサーバ１（データベース管理装置）に伝えることが可能となる。
【００３５】
これにより、ユーザは表示された解析木のノードの動作順を指定するだけで、意図した順序に問合せクエリを実施するヒント文を追加することができるので、ユーザはどのようなヒントを適用するといった方法だけでなく、どうような順序で処理して欲しいといった直感的な操作イメージをヒント文に反映することができる。
【００３６】
問合せクエリ解析木表示編集部１２は、このようにしてヒントを挿入された問合せクエリを生成すると、解析木の各ノード単位についてどのようなヒントが選択されたかというヒント情報をサーバ１（データベース管理装置）側に送信する。
【００３７】
なお、別の実施例としては、問合せクエリ解析木表示編集部１２は、ヒントが挿入された問合せクエリを再度サーバ１（データベース管理装置）側に送信するようにしても良い。
【００３８】
サーバ１のプラン候補作成部２４は、プラン候補作成手段として機能するものであって、クライアント３から送られたヒント情報と解析木に基づいて、問合せクエリの実行計画（プラン）の候補を生成する。より詳細には、プラン候補作成部２４では、ヒント情報を制約条件の１つとみなして、実行計画（プラン）の候補を生成する。
【００３９】
図１５は、プラン候補作成部２４における処理の流れを示すフローチャートである。図１５に示すように、プラン候補作成部２４は、最初に、解析木の各ノードに対して適用可能なオペレーションを列挙する（ステップＳ１０１）。次に、列挙したオペレーションに対して各ノードが条件を満たすかを順にチェックする（ステップＳ１０２）。
【００４０】
ノードが列挙したオペレーションに対して条件を満たすと判断した場合には（ステップＳ１０２のＹｅｓ）、条件を満たしたオペレーションをプラン候補に追加する（ステップＳ１０３）。なお、プラン候補が存在しない場合は新規に作成する。この時にオペレーション処理に必要なコスト、出力される件数の予測値とその信頼度、及び予測値の取り得る値の範囲等が計算される。
【００４１】
以上のステップＳ１０２〜Ｓ１０３の処理は、解析木の全てのノードについて終了するまで（ステップＳ１０４のＹｅｓ）、繰り返される。
【００４２】
ここで、図１６は解析木のノードと適用可能なオペレーションとの関係を例示的に示す模式図、図１７はプラン候補作成部２４で作成されるプラン候補の一例を示す模式図である。図１６ではノードに対して適用可能なオペレーションとその条件の１例を、図１７では図１１のヒント付き問合せクエリに対して図１６の条件を適用した場合のプラン候補を示す。図１６では関数“contains（）”に対して、ヒントにより索引禁止が存在しない場合に文字索引オペレーション“LexIndex”が適用可能であることを示している。また、ＸＭＬノードに対して上位ノードが取得されていればＸＭＬノードの上位ノードから下位ノードを取得するオペレーション“ToDown”、下位ノードが取得されていればＸＭＬノードの下位ノードから上位ノードを取得するオペレーション“ToUp”が適用可能である。
【００４３】
図１６の条件を図１１のヒント付き問合せクエリに適用した場合、図１７に示すように、最初にノード（９）に対して文字索引オペレーション“LexIndex”が適用可能である。ここでヒント文により指定されているためノード（９）に対する文字索引オペレーション“LexIndex”が必ず適用される。次に、適用可能なオペレーションとしてノード（８）に対する文字索引オペレーション“LexIndex”とノード（９）により下位ノードが取得されたことによりノード（５）に対してオペレーション“ToUp”が適用可能である。この場合、どちらにもヒントが適用されていないため、どちらに対してもプラン候補を新規に作成して処理を続行する。ノード（５）に対してオペレーション“ToUp”を適用した場合は、動作可能なプラン候補は「プラン候補１」のみとなる。一方、ノード（８）に対する文字索引オペレーション“LexIndex”を適用した場合、ノード（５）とノード（３）に対して下位ノードから上位ノードを取得するオペレーション“ToUp”を実行した後、その結果をマージする“Merge”オペレーションを適用する「プラン候補２」と、ノード（３）の下位ノードから上位ノードを取得するオペレーション“ToUp”を実行した後、ノード（５）の上位ノードから下位ノードを取得するオペレーション“ToDown”を実行し、ノード（９）の“LexIndex”の結果とマージする“Merge”オペレーションを適用する「プラン候補３」とに分かれてプラン候補が作成される。
【００４４】
次に、サーバ１の性能分岐点検出部２５の処理について説明する。ここで、図１８は性能分岐点検出部２５における処理の流れを示すフローチャートである。図１８に示すように、性能分岐点検出部２５は、性能分岐点検出手段として機能するものであって、プラン候補作成部２４が挙げたプラン候補から、見積り精度が低いオペレーションに着目する（ステップＳ２０１）。次に、見積りの精度情報から見積りの最大値と最小値を取得し（ステップＳ２０２）、最小値と最大値における各プラン候補のトータルの見積り値を選択し（ステップＳ２０３）、得られたトータルの見積りで最小値、最大値のいずれかでトータルの見積り値が変化した場合、トータルの見積り値が逆転するオペレーションの閾値を計算する（ステップＳ２０４）。その後、閾値を最適なプラン候補が切り替わる点として記憶し、条件付プラン候補として、閾値により最適なプラン候補が変化する条件付ヒントを作成する（ステップＳ２０５）。
【００４５】
以上のステップＳ２０１〜Ｓ２０５の処理は、全てのオペレーションについて終了するまで（ステップＳ２０６のＹｅｓ）、繰り返される。
【００４６】
全てのオペレーションについて、ステップＳ２０１〜Ｓ２０５の処理が終了すると（ステップＳ２０６のＹｅｓ）、得られた条件付ヒントとプラン候補をクライアント３に送信する（ステップＳ２０７）。
【００４７】
ここで、図１９は性能分岐点検出部２５において生成される条件付ヒントとプラン候補の一例を示す模式図である。図１９は、図１７により得られたプラン候補に対して、性能分岐点検出処理を行った結果である。
【００４８】
図１７の分岐の中で、見積り精度である信頼度が０．５以下の分岐点に着目し、それ以外の分岐は最初の見積り値が最も良いプランを残して削除する。図１７では最初の分岐のみが残る。次に、ノード（９）のオペレーションの推定見積り範囲の最大と最小における見積りを計算する。次に、プラン候補１，２の最大値コストにおいて、トータルコストの大小が変化していることを確認する。次に、ノード（９）の見積り閾値を変数Ｘとし、プラン候補１とプラン候補２のトータルコストが逆転するＸの値を計算する。図１９では、ノード（９）の見積りが１６５０を境にプラン候補１，２のトータルコストが逆転している。性能分岐点検出部２５は、この閾値を条件とするヒント文を作成し、クライアント３に送信する。
【００４９】
これにより、正確な見積りが困難であり、実際の値によって最適なプランが異なるような問合せクエリにおいて、データベース管理装置側が内部でそのような見積り値によって大きくプランが変更されるポイントを検出し、ユーザ側に挿入可能な条件ヒント付きで提示することによって、ユーザは性能が大きく変化するポイントを把握し、それに対して条件に応じて実行計画が変化するようなヒントを挿入することができる。
【００５０】
クライアント３の問合せクエリプラン表示編集部１３は、サーバ１（データベース管理装置）から送られてきたプラン候補及び作成可能な条件付ヒントを表示部１０７に表示する（プラン表示手段）。図２０に示すように、条件付ヒントＡにおいては、各条件付プラン候補を選択する際の条件が、チェックボックスＣＢ１を付されて表示されている。さらに、条件付ヒントＡにおいては、条件の比較演算子と閾値欄が編集可能となった条件が、チェックボックスＣＢ２を付された表示されている。なお、比較演算子及び閾値は、デフォルトとしてサーバ１（データベース管理装置）が計算した閾値が記述されている。
【００５１】
ここで、図２１は問合せクエリプラン表示編集部１３における処理の流れを示すフローチャートである。図２１に示すように、まず、ユーザは、閾値によって選択するプランを変更したい場合は、チェックボックス内のいずれかのチェックボックスＣＢ１またはＣＢ２を入力部１０８を介してチェックする。これによりプラン候補または条件付ヒントが選択されたと判断すると（ステップＳ３１のＹｅｓ）、ステップＳ３２に進む。なお、演算子や閾値をユーザ側が設定したい場合は、ユーザが比較演算子と閾値を記述した後、チェックボックスＣＢ２を入力部１０８を介してチェックする。例えば、図２０の状態から図２２に示すようにユーザによって条件の比較演算子と閾値欄が編集可能となった条件に対応するチェックボックスＣＢ２が入力部１０８を介して選択される。
【００５２】
続いて、問合せクエリプラン表示編集部１３は、選択されたプラン候補または条件付ヒントに応じたヒントを各オペレーションに対応する解析木と解析木が記憶した問合せクエリの記述位置に基づいてヒント文に変換して問合せクエリテキスト部１１内の問合せクエリに挿入し（ステップＳ３２：クエリ再編集手段）、ＸＱｕｅｒｙではヒント内で記述した名前空間を解決するための名前空間宣言を挿入する（ステップＳ３３）。ここで、図２３はヒント選択によるヒント文挿入例を示す模式図である。ここでは、問合せクエリプラン表示編集部１３に表示されたプラン候補に対して、“＄＄（ここではノード（８）） ＜ １６５０"の条件のヒントのチェックボックスＣＢ２を選択している。図２３に示すように、チェックされたヒントを反映するために、問合せクエリテキスト部１１内の問合せクエリにヒント文「（＃ if （＄＄ ＜ １６５０） then exq：index else exq：noindex ＃）｛｝）がノード（９）に該当する箇所を囲む形で挿入されている。また、先頭には、名前空間宣言が挿入されている。これにより、ユーザはノード（９）の条件式に対して条件付で索引を使用するかしないかを選択する意図をサーバ１（データベース管理装置）に伝えることが可能となる。
【００５３】
問合せクエリプラン表示編集部１３は、このようにしてヒントを挿入された問合せクエリを生成すると、条件付プラン候補においてどのようなヒントが選択されたかというヒント情報をサーバ１（データベース管理装置）側に送信する。
【００５４】
なお、別の実施例としては、問合せクエリプラン表示編集部１３は、ヒントが挿入された問合せクエリを再度サーバ１（データベース管理装置）側に送信するようにしても良い。
【００５５】
サーバ１（データベース管理装置）の条件付きプラン作成部２６は、条件付きプラン作成手段として機能するものであり、クライアント３から送信された条件ヒント情報に基づいて、最終的にサーバ１で実行する条件付プラン候補を作成する。ここでは、実際に実行した際に得られた時点で、実行するオペレーションを変化させる条件付プランを生成する。条件付プランでは、条件が存在する点で分岐する実行プランを作成する。図２４に図２３の条件ヒント付きクエリにより作成したプランを例に挙げる。図２４では、最初のオペレーション“LexIndex”の出力値に応じて２つのルートのプランを実行する形で作成されている。
【００５６】
なお、別の実施例として、サーバ１は、現在の見積り値と条件ヒント情報に基づいて１つのプランを作成しても良い。
【００５７】
最後に、サーバ１（データベース管理装置）の条件付きプラン実行部２７は、条件付きプラン実行手段として機能するものであり、条件付プランに従って各オペレーションを実行していく。なお、次に実行するオペレーション候補が複数ない場合は、次のオペレーションを実行する。また、次に実行するオペレーション候補が複数存在する場合には、現時点で得られた実際の正確な情報に基づいて条件付候補オペレーションの内の１つが選択されて実行される。そして、残りの候補は無視される。このような処理を全ての条件分岐オペレーションで行い、最後のオペレーションが実行された時点で問合せクエリの実行結果が得られる。
【００５８】
図２４では、最初のオペレーション“LexIndex”を実行し、結果が１６５０件未満なら左の分岐を選択肢し、ノード（５）の“ToUp”オペレーションを実行していく。一方、結果が１６５０件以上は、ノード（８）の“LexIndex“を実行していく。いずれの場合においても最も効率の良いプランを実行することが可能となる。
【００５９】
このように本実施の形態によれば、問合せクエリを問合せ言語の文法に従って構文解析した後、データベース管理装置にとって１つの処理単位となるノードによって構成される解析木を作成するとともに、解析木の各単位についてデータベース管理装置側が適用可能なヒント項目を検出し、解析木を木構造の形で表現し、各ノードに対して選択可能なヒントを提示する。これにより、問合せクエリをデータベース管理装置側の処理単位及びヒントの適用単位で構成される解析木として視覚的に把握することができるとともに、各ノードに対して適用可能なヒントが提示されるため、ユーザ側は容易に問合せクエリの単位を把握し、ヒントを柔軟に追加することができる。また、選択されたヒント項目をヒント文に変換して解析木が記憶した問合せクエリの記述位置に基づいて挿入して編集するので、ユーザはヒントを選択するだけでよく、実際にヒント文を問合せクエリに記述する必要がない。
【００６０】
一般に、ユーザがヒント文により意図する処理をデータベース管理装置に送る方法は、データベース管理装置が作成した実行計画を取得し、ユーザの意図と異なることを確認し、ユーザは自分の意図する動作手順をイメージし、そのイメージの意図を反映するためのヒントが存在するかを確認し、さらにそのヒントを挿入する位置を問合せクエリから探しだしてその場所に記述する必要がある。さらに、ある条件に従ってヒントの種類を変更したい場合は、その条件の記述場所や記述情報を見つけ出して記述する必要が存在する。
【００６１】
これに対し、本実施の形態によれば、ユーザはデータベース管理装置側が問合せクエリをデータベース管理装置側の処理単位及びヒントの適用単位で構成される解析木として視覚的に把握することができ、適用可能なヒントが提示されるため、選択可能なヒントを探し出す必要もなく、ヒントを記述する必要性も省略される。また、ユーザはヒントの種類などを考えることなく、自分の意図する動作手順を解析木に対してマウス等によって指定することで、自動的にユーザの意図を反映するヒントを挿入することが可能となる。この場合、ユーザはヒントの知識を一切必要とせずに自分の意図した動作をデータベース管理装置に送ることが可能となる。さらに、正確な見積りが困難であり、実際の値によって最適なプランが異なるような問合せクエリにおいて、データベース管理装置側が内部でそのような見積り値によって大きくプランが変更されるポイントを検出しユーザ側に挿入可能な条件ヒント付きで提示することによって、ユーザは性能が大きく変化するポイントを把握し、それに対して条件に応じて実行計画が変化するようなヒントを挿入することが可能となる。
【図面の簡単な説明】
【００６２】
【図１】本発明の実施の一形態にかかるデータベース検索システムのシステム構築例を示す模式図である。
【図２】サーバおよびクライアントのモジュール構成図である。
【図３】データベース検索システムの機能構成を示す構成図である。
【図４】ＸＭＬデータに対する問合せ言語ＸＱｕｅｒｙで記述されたクエリを例示的に示す模式図である。
【図５】構文解析木を例示的に示す模式図である。
【図６】再構築した解析木を示す模式図である。
【図７】解析木のノードと適用可能なヒントの組合せの一例を示す模式図である。
【図８】解析木と選択可能なヒントの表示例を示す正面図である。
【図９】問合せクエリ解析木表示編集部における処理の流れを示すフローチャートである。
【図１０】チェックボックスが選択された状態を示す正面図である。
【図１１】ヒント選択によるヒント文挿入例を示す模式図である。
【図１２】問合せクエリ解析木表示編集部における処理の流れを示すフローチャートである。
【図１３】解析木の各ノードから別のノードへカーソルを移動させた状態を示す正面図である。
【図１４】問合せクエリの動作順序指定に基づくヒント選択によるヒント文挿入例を示す模式図である。
【図１５】プラン候補作成部における処理の流れを示すフローチャートである。
【図１６】解析木のノードと適用可能なオペレーションとの関係を例示的に示す模式図である。
【図１７】プラン候補作成部で作成されるプラン候補の一例を示す模式図である。
【図１８】性能分岐点検出部における処理の流れを示すフローチャートである。
【図１９】性能分岐点検出部において生成される条件付ヒントとプラン候補の一例を示す模式図である。
【図２０】プラン候補及び作成可能な条件付ヒントの表示例を示す正面図である。
【図２１】問合せクエリプラン表示編集部における処理の流れを示すフローチャートである。
【図２２】チェックボックスが選択された状態を示す正面図である。
【図２３】ヒント選択によるヒント文挿入例を示す模式図である。
【図２４】図２３の条件ヒント付きクエリにより作成したプランを示す模式図である。
【符号の説明】
【００６３】
１      データベース管理装置
３      問合せ装置
１２    解析木表示手段
１３    プラン表示手段
２１    構文解析手段
２２    解析木作成手段
２３    ヒント検出手段
２４    プラン候補作成手段
２５    性能分岐点検出手段
２６    条件付きプラン作成手段
２７    条件付きプラン実行手段
【図１】
2008084028.tif 000003
【図２】
2008084028.tif 000004
【図３】
2008084028.tif 000005
【図４】
2008084028.tif 000006
【図５】
2008084028.tif 000007
【図６】
2008084028.tif 000008
【図７】
2008084028.tif 000009
【図８】
2008084028.tif 000010
【図９】
2008084028.tif 000011
【図１０】
2008084028.tif 000012
【図１１】
2008084028.tif 000013
【図１２】
2008084028.tif 000014
【図１３】
2008084028.tif 000015
【図１４】
2008084028.tif 000016
【図１５】
2008084028.tif 000017
【図１６】
2008084028.tif 000018
【図１７】
2008084028.tif 000019
【図１８】
2008084028.tif 000020
【図１９】
2008084028.tif 000021
【図２０】
2008084028.tif 000022
【図２１】
2008084028.tif 000023
【図２２】
2008084028.tif 000024
【図２３】
2008084028.tif 000025
【図２４】
2008084028.tif 000026