(57)【特許請求の範囲】
【請求項１】
プロセッサにより実行される、構造化照会言語（SQL）実行計画を最適化するための方法であって、前記SQL実行計画が少なくとも1つの関係テーブルに対応し、N回目の反復中、前記方法が、
（N−1）回目の反復中に前記少なくとも1つの関係テーブルに対して第1の計画木が実行された後に生成された第1の反復パラメータを取得するステップであって、Nが1よりも大きい自然数であり、前記第1の反復パラメータが、前記SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを備える、ステップと、
前記第1の反復パラメータに従って第2の計画木を確立するステップと、
前記第2の計画木と前記第1の計画木との間の差が第1のしきい値よりも大きくないとき、前記第1の計画木または前記第2の計画木を最適なSQL実行計画として決定するステップと
を備える、方法。
【請求項２】
前記第1のしきい値が0であり、それに対応して、前記第2の計画木と前記第1の計画木との間の差が第1のしきい値よりも大きくないとき、前記第1の計画木または前記第2の計画木を最適なSQL実行計画として決定する前記ステップが、前記第2の計画木が前記第1の計画木と同じであるとき、前記第1の計画木または前記第2の計画木を最適なSQL実行計画として決定するステップを備える、請求項1に記載の方法。
【請求項３】
前記第1の反復パラメータが、前記SQL実行計画に対応する少なくとも2つの関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに備える、請求項1または2に記載の方法。
【請求項４】
前記第1の計画木または前記第2の計画木を最適なSQL実行計画として決定する前記ステップの後に、
前記最適なSQL実行計画の状態を確定した状態として記録するステップ
をさらに備える、請求項1から3のいずれか一項に記載の方法。
【請求項５】
前記第1の反復パラメータに従って第2の計画木を確立する前記ステップの後に、
前記第2の計画木を実行するステップと、
前記第2の計画木が実行されたときに生成された第2の反復パラメータを記録するステップであって、前記第2の反復パラメータが、前記SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを備える、ステップと、
前記第2の計画木と前記第1の計画木との間の前記差が前記第1のしきい値よりも大きいとき、前記第2の反復パラメータに従って前記第1の反復パラメータを更新するステップと、
前記N回目の反復中の前記第2の計画木を（N＋1）回目の反復中の第1の計画木として使用するステップと
をさらに備える、請求項1から4のいずれか一項に記載の方法。
【請求項６】
前記第2の反復パラメータが、前記SQL実行計画に対応する少なくとも2つの関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに備える、請求項5に記載の方法。
【請求項７】
前記第1の反復パラメータに従って第2の計画木を確立する前記ステップの後に、
前記第2の計画木を実行するステップと、
前記第2の計画木が実行されたときに生成された第2の反復パラメータを記録するステップであって、前記第2の反復パラメータが、前記SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを備える、ステップと、
前記第2の計画木と前記第1の計画木との間の前記差が前記第1のしきい値よりも大きく、前記第2の反復パラメータが前記第1の反復パラメータと同じであるとき、前記第1の反復パラメータに従って前記第1の計画木とは異なる第2の計画木を確立し、前記第2の計画木を実行し、前記第2の計画木が実行されたときに生成された第2の反復パラメータを記録するステップと
をさらに備える、請求項1から4のいずれか一項に記載の方法。
【請求項８】
前記第1の反復パラメータに従って前記第1の計画木とは異なる第2の計画木を確立した後に、
前記第2の計画木を実行するための実行時間を記録するステップと、
Nが第2のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い前記第2の計画木を前記最適なSQL実行計画として使用するステップと
をさらに備える、請求項7に記載の方法。
【請求項９】
すべてのN回の反復中の実行時間が最も短い前記第2の計画木を前記最適なSQL実行計画として使用する前記ステップの後に、
前記最適なSQL実行計画の状態を確定した状態として記録するステップ
をさらに備える、請求項8に記載の方法。
【請求項１０】
前記第2の反復パラメータに従って前記第1の反復パラメータを更新する前記ステップの前に、
前記第2の計画木を実行するための実行時間を記録するステップと、
Nが第3のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い前記第2の計画木を前記最適なSQL実行計画として使用するステップと
をさらに備える、請求項5に記載の方法。
【請求項１１】
すべてのN回の反復中の実行時間が最も短い前記第2の計画木を前記最適なSQL実行計画として使用する前記ステップの後に、
前記最適なSQL実行計画の状態を確定した状態として記録するステップ
をさらに備える、請求項10に記載の方法。
【請求項１２】
前記第2の反復パラメータに従って前記第1の反復パラメータを更新する前記ステップが、
前記第2の反復パラメータと前記第1の反復パラメータの統合セットを取得し、前記統合セットの結果を前記第1の反復パラメータとして使用するステップ
を備える、請求項5、6、10、または11のいずれか一項に記載の方法。
【請求項１３】
最初の反復が実施されると、あらかじめ記憶された推定反復パラメータに従って最初の計画木を確立するステップであって、前記推定反復パラメータが、前記SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを備える、ステップと、
前記最初の計画木を実行して最初の反復パラメータを取得するステップであって、前記最初の反復パラメータが、前記SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを備える、ステップと、
前記最初の反復パラメータに従って前記推定反復パラメータを更新して前記第1の反復パラメータを取得するステップと
をさらに備える、請求項1から12のいずれか一項に記載の方法。
【請求項１４】
前記最初の反復パラメータが、前記SQL実行計画に対応する少なくとも2つの関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに備える、請求項13に記載の方法。
【請求項１５】
前記最初の反復パラメータに従って前記推定反復パラメータを更新して前記第1の反復パラメータを取得する前記ステップが、
前記最初の反復パラメータと前記推定反復パラメータの統合セットを取得し、前記統合セットの結果を前記第1の反復パラメータとして使用するステップ
を備える、請求項13または14に記載の方法。
【請求項１６】
前記最初の反復が実施される前に、
前記SQL実行計画の状態が確定した状態であるかどうかを照会するステップと
、
前記SQL実行計画の前記状態が前記確定した状態であるとき、前記SQL実行計画を実行するステップと
をさらに備える、請求項13から15のいずれか一項に記載の方法。
【請求項１７】
構造化照会言語（SQL）実行計画を最適化するための装置であって、前記SQL実行計画が少なくとも1つの関係テーブルに対応し、前記装置が、メモリと、前記メモリに結合されたプロセッサとを備え、N回目の反復中、前記プロセッサが、
（N−1）回目の反復中に前記少なくとも1つの関係テーブルに対して第1の計画木が実行された後に生成された第1の反復パラメータを取得することであって、Nが1よりも大きい自然数であり、前記第1の反復パラメータが、前記SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを備える、取得することと、
前記第1の反復パラメータに従って第2の計画木を確立することと、
前記第2の計画木と前記第1の計画木との間の差が第1のしきい値よりも大きくないとき、前記第1の計画木または前記第2の計画木を最適なSQL実行計画として決定することと
を行うように構成される、装置。
【請求項１８】
前記第1のしきい値が0であり、それに対応して、前記第2の計画木と前記第1の計画木との間の差が第1のしきい値よりも大きくないとき、前記第1の計画木または前記第2の計画木を最適なSQL実行計画として前記決定することが、前記第2の計画木が前記第1の計画木と同じであるとき、前記第1の計画木または前記第2の計画木を最適なSQL実行計画として決定することを備える、請求項17に記載の装置。
【請求項１９】
前記第1の反復パラメータが、前記SQL実行計画に対応する少なくとも2つの関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに備える、請求項17または18に記載の装置。
【請求項２０】
前記第1の計画木または前記第2の計画木を最適なSQL実行計画として決定することの後に、前記プロセッサが、
前記最適なSQL実行計画の状態を確定した状態として記録すること
を行うようにさらに構成される、請求項17から19のいずれか一項に記載の装置。
【請求項２１】
前記第1の反復パラメータに従って前記第2の計画木を確立することの後に、前記プロセッサが、
前記第2の計画木を実行することと、
前記第2の計画木が実行されたときに生成された第2の反復パラメータを記録することであって、前記第2の反復パラメータが、前記SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを備える、記録することと、
前記第2の計画木と前記第1の計画木との間の前記差が前記第1のしきい値よりも大きいとき、前記第2の反復パラメータに従って前記第1の反復パラメータを更新することと、
前記N回目の反復中の前記第2の計画木を（N＋1）回目の反復中の第1の計画木として使用することと
を行うようにさらに構成される、請求項17から20のいずれか一項に記載の装置。
【請求項２２】
前記第2の反復パラメータが、前記SQL実行計画に対応する少なくとも2つの関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに備える、請求項21に記載の装置。
【請求項２３】
前記第1の反復パラメータに従って前記第2の計画木を確立することの後に、前記プロセッサが、
前記第2の計画木を実行することと、
前記第2の計画木が実行されたときに生成された第2の反復パラメータを記録することであって、前記第2の反復パラメータが、前記SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを備える、記録することと、
前記第2の計画木と前記第1の計画木との間の前記差が前記第1のしきい値よりも大きく、前記第2の反復パラメータが前記第1の反復パラメータと同じであるとき、前記第1の反復パラメータに従って前記第1の計画木とは異なる第2の計画木を確立し、前記第2の計画木を実行し、前記第2の計画木が実行されたときに生成された第2の反復パラメータを記録することと
を行うようにさらに構成される、請求項17から20のいずれか一項に記載の装置。
【請求項２４】
前記第1の反復パラメータに従って前記第1の計画木とは異なる前記第2の計画木を確立することの後に、前記プロセッサが、
前記第2の計画木を実行するための実行時間を記録することと、
Nが第2のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い前記第2の計画木を前記最適なSQL実行計画として使用することと
を行うようにさらに構成される、請求項23に記載の装置。
【請求項２５】
すべてのN回の反復中の実行時間が最も短い前記第2の計画木を前記最適なSQL実行計画として使用することの後に、前記プロセッサが、
前記最適なSQL実行計画の状態を確定した状態として記録すること
を行うようにさらに構成される、請求項24に記載の装置。
【請求項２６】
前記第2の反復パラメータに従って前記第1の反復パラメータを更新することの前に、前記プロセッサが、
前記第2の計画木を実行するための実行時間を記録することと、
Nが第3のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い前記第2の計画木を前記最適なSQL実行計画として使用することと
を行うようにさらに構成される、請求項21に記載の装置。
【請求項２７】
すべてのN回の反復中の実行時間が最も短い前記第2の計画木を前記最適なSQL実行計画として使用することの後に、前記プロセッサが、
前記最適なSQL実行計画の状態を確定した状態として記録すること
を行うようにさらに構成される、請求項26に記載の装置。
【請求項２８】
前記プロセッサが、
前記第2の反復パラメータと前記第1の反復パラメータの統合セットを取得し、前記統合セットの結果を前記第1の反復パラメータとして使用すること
を行うように構成される、請求項21、22、26、または27のいずれか一項に記載の装置。
【請求項２９】
前記プロセッサが、
最初の反復が実施されると、あらかじめ記憶された推定反復パラメータに従って最初の計画木を確立することであって、前記推定反復パラメータが、前記SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを備える、確立することと、
前記最初の計画木を実行して最初の反復パラメータを取得することであって、前記最初の反復パラメータが、前記SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを備える、取得することと、
前記最初の反復パラメータに従って前記推定反復パラメータを更新して前記第1の反復パラメータを取得することと
を行うようにさらに構成される、請求項17から28のいずれか一項に記載の装置。
【請求項３０】
前記最初の反復パラメータが、前記SQL実行計画に対応する少なくとも2つの関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに備える、請求項29に記載の装置。
【請求項３１】
前記プロセッサが、
前記最初の反復パラメータと前記推定反復パラメータの統合セットを取得し、前記統合セットの結果を前記第1の反復パラメータとして使用すること
を行うように構成される、請求項29または30に記載の装置。
【請求項３２】
前記最初の反復が実施される前に、前記プロセッサが、
前記SQL実行計画の状態が確定した状態であるかどうかを照会することと、
前記SQL実行計画の前記状態が前記確定した状態であるとき、前記SQL実行計画を実行することと
を行うようにさらに構成される、請求項29から31のいずれか一項に記載の装置。
【請求項３３】
プロセッサと、メモリと、バスと、通信インターフェースとを備える、構造化照会言語（SQL）実行計画を最適化するための装置であって、
前記メモリが、コンピュータ実行命令を記憶するように構成され、前記プロセッサが、前記バスを使用することにより前記メモリに接続され、SQL実行計画を最適化するための前記装置が走ると、前記プロセッサが、前記メモリに記憶された前記コンピュータ実行命令を実行し、その結果、前記装置が、請求項1から16のいずれか一項による前記SQL実行計画を最適化するための前記方法を実施する、
装置。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、その全体が参照により本明細書に組み込まれる、2016年2月19に中国特許庁に出願された、「METHOD AND APPARATUS FOR DETERMINING SQL EXECUTION PLAN」と題する、中国特許出願第201610095091．0号の優先権を主張する。
【０００２】
本発明は、コンピュータ技術の分野に関し、詳細には、SQL実行計画を決定するための方法および装置に関する。
【背景技術】
【０００３】
SQL（Structured Query Language、構造化照会言語）文を実行するためには、一般に、3つのフェーズ：字句解析および構文解析のフェーズ、SQL実行計画を決定するためのフェーズ、ならびにSQL実行計画を実行するためのフェーズを必要とする。
【０００４】
具体的には、SQL文は、ユーザによって求められる結果を参照する。たとえば、SQL文は、北京に住んでいるすべてのクライアントを照会している場合がある。SQL文は、SQL文をどのように実行するかをサーバに伝えない。したがって、サーバがQuery（照会）コマンドを受信した後、かつ、字句解析および構文解析のフェーズにおいてQueryコマンドが構文的に正しいと判断された後、Parse Tree（解析木）が形成される。サーバは、すでに収集された関係する統計情報を求めてサーバのデータベースを検索し、Parse Treeを参照してSQL文のための好ましいSQL実行計画を決定する。SQL実行計画は、Plan Tree（計画木）の方式で取得される場合がある。Plan Tree上のノードは、複数の基本演算、たとえば、複数のテーブルを横断すること、および入れ子接続またはHash（ハッシュ）接続を実施することなどの基本演算を含む。最後に、サーバは取得されたPlan Treeに従ってSQL実行計画を実行し、出力結果はSQL文によって表される結果である。
【０００５】
SQL文の実行効率は、ある程度まで、効率的なSQL実行計画を決定することができるかどうかに依存することを学ぶことができる。しかしながら、従来技術では、データベース内の統計情報は、一般に、サンプリング値に基づいて取得される固有値、たとえば、関係テーブル内の関係タプル（RelTuples）および関係テーブル内のフィールド内の一意の個別値（Distinct値）の数などの固有値である。サンプリングによって取得されたこれらの固有値には、一般に、誤りが存在し、時間的にヒステリシスが存在する。したがって、上記の統計情報に基づいてサーバによって決定されるSQL実行計画は、一般に、最適な実行計画ではない。
【発明の概要】
【０００６】
本発明の実施形態は、SQL実行計画の決定を最適化し、SQL実行計画の実行効率を改善するために、SQL実行計画を決定するための方法および装置を提供する。
【課題を解決するための手段】
【０００７】
上記の目的を達成するために、本発明の実施形態において以下の技術的解決策が使用される。
【０００８】
本発明の実施形態の第1の態様は、構造化照会言語SQL実行計画を決定するための方法を提供し、SQL実行計画は少なくとも1つの関係テーブルに対応し、N回目の反復中、方法は、（N−1）回目の反復中に少なくとも1つの関係テーブルに対して第1の計画木が実行された後に生成された第1の反復パラメータを取得することであって、Nが1よりも大きい自然数である、取得することと、第1の反復パラメータに従って第2の計画木を確立することと、第2の計画木と第1の計画木との間の差が第1のしきい値よりも大きくないとき、第1の計画木または第2の計画木をSQL実行計画として決定することとを含む。
【０００９】
第1の態様を参照して、第1の態様の第1の可能な実装方式では、しきい値は0であり、それに対応して、第2の計画木と第1の計画木との間の差が第1のしきい値よりも大きくないとき、第1の計画木または第2の計画木をSQL実行計画として決定することは、第2の計画木が第1の計画木と同じであるとき、第1の計画木または第2の計画木をSQL実行計画として決定することを含む。
【００１０】
本発明の実施形態を実装することによって得られる有益な効果は、本発明の実施形態では、最適化されたSQL実行計画が反復実行によって取得されることである。各反復プロセスの間、前の反復プロセスの間に確立された（本発明の実施形態の中では第1の計画木と呼ばれる）計画木は、現在の反復プロセスの間に確立された（本発明の実施形態の中では第2の計画木と呼ばれる）計画木と比較される必要がある。加えて、第2の計画木は、前の反復プロセスの間に更新された（本発明の実施形態の中では第1の反復パラメータと呼ばれる）反復パラメータに従って確立され、すなわち、各反復プロセスの間に確立される第2の計画木は、第1の計画木を実行することによって更新された第1の反復パラメータに基づいて確立される。したがって、反復が複数回実施された後、最終的に取得された計画木は、データベース内のすでに収集された推定反復パラメータに依存しないが、SQL文のための比較的正確なSQL実行計画を取得し、SQL実行計画の実行効率を改善するために、計画木は、反復プロセスの間に計画木が実際に実行されるたびに記録される反復パラメータに従って確立される。
【００１１】
第1の態様、または第1の態様の第1の可能な実装方式を参照して、第1の態様の第2の可能な実装方式では、第1の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００１２】
第1の態様、または第1の態様の第1から第2の可能な実装方式を参照して、第1の態様の第3の可能な実装方式では、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、第1の反復パラメータは、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに含む。
【００１３】
第1の態様、または第1の態様の第1から第3の可能な実装方式を参照して、第1の態様の第4の可能な実装方式では、第1の計画木または第2の計画木をSQL実行計画として決定することの後に、方法は、SQL実行計画の状態を確定した状態として記録することをさらに含む。
【００１４】
第1の態様、または第1の態様の第1から第4の可能な実装方式のうちの任意の1つを参照して、第1の態様の第5の可能な実装方式では、第1の反復パラメータに従って第2の計画木を確立することの後に、方法は、第2の計画木を実行することと、第2の計画木が実行されたときに生成された第2の反復パラメータを記録することとをさらに含む。
【００１５】
本発明の実施形態を実装することによって得られる有益な効果は、第2の計画木が実際に実行されたときに更新された第1の反復パラメータが取得されるので、更新された第1の反復パラメータを使用することによって確立される第2の計画木はより正確であることである。
【００１６】
第1の態様の第5の可能な実装方式を参照して、第1の態様の第6の可能な実装方式では、第2の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００１７】
第1の態様の第5または第6の可能な実装方式を参照して、第1の態様の第7の可能な実装方式では、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、第2の反復パラメータは、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに含む。
【００１８】
第1の態様の第5から第7の可能な実装方式のうちの任意の1つを参照して、第1の態様の第8の可能な実装方式では、方法は、第2の計画木と第1の計画木との間の差が第1のしきい値よりも大きいとき、第2の反復パラメータに従って第1の反復パラメータを更新することと、N回目の反復中の第2の計画木を（N＋1）回目の反復中の第1の計画木として使用することとをさらに含む。
【００１９】
第1の態様の第8の可能な実装方式を参照して、第1の態様の第9の可能な実装方式では、第2の反復パラメータに従って第1の反復パラメータを更新することの前に、方法は、第2の反復パラメータが第1の反復パラメータと同じであるとき、第1の反復パラメータに従って第1の計画木とは異なる第2の計画木を確立することをさらに含む。
【００２０】
第1の態様の第9の可能な実装方式を参照して、第1の態様の第10の可能な実装方式では、第1の反復パラメータに従って第1の計画木とは異なる第2の計画木を確立することの後に、方法は、第2の計画木を実行するための実行時間を記録することと、Nが第2のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用することとをさらに含む。
【００２１】
第1の態様の第10の可能な実装方式を参照して、第1の態様の第11の可能な実装方式では、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用することの後に、方法は、SQL実行計画の状態を確定した状態として記録することをさらに含む。
【００２２】
第1の態様の第8の可能な実装方式を参照して、第1の態様の第12の可能な実装方式では、第2の反復パラメータに従って第1の反復パラメータを更新することの前に、方法は、第2の計画木を実行するための実行時間を記録することと、Nが第3のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用することとをさらに含む。
【００２３】
第1の態様の第12の可能な実装方式を参照して、第1の態様の第13の可能な実装方式では、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用することの後に、方法は、SQL実行計画の状態を確定した状態として記録することをさらに含む。
【００２４】
本発明の実施形態を実装することによって得られる有益な効果は、反復プロセスの間にそれに対して変形がすでに実施されたSQL実行計画の場合、前の反復中に取得された計画木と同じ計画木は、反復によって決して取得されなくてもよいことである。したがって、無限ループを回避するために、反復の数Nがしきい値よりも大きいとき、過去のN回の反復プロセスの間の実行時間が最も短い第2の計画木が最適な計画木であり、次いで、第2の計画木はSQL実行計画として使用される。
【００２５】
第1の態様の第7から第13の可能な実装方式のうちの任意の1つを参照して、第1の態様の第14の可能な実装方式では、第2の反復パラメータに従って第1の反復パラメータを更新することは、第2の反復パラメータと第1の反復パラメータの統合セットを取得することと、統合セットの結果を第1の反復パラメータとして使用することとを含む。
【００２６】
第1の態様、または第1の態様の第1から第14の可能な実装方式のうちの任意の1つを参照して、第1の態様の第15の可能な実装方式では、方法は、最初の反復が実施されると、あらかじめ記憶すされた推定反復パラメータに従って最初の計画木を確立することと、最初の計画木を実行して最初の反復パラメータを取得することと、最初の反復パラメータに従って推定反復パラメータを更新して第1の反復パラメータを取得することとをさらに含む。
【００２７】
第1の態様の第15の可能な実装方式を参照して、第1の態様の第16の可能な実装方式では、推定反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００２８】
第1の態様の第15または第16の可能な実装方式を参照して、第1の態様の第17の可能な実装方式では、最初の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００２９】
第1の態様の第15から第17の可能な実装方式のうちの任意の1つを参照して、第1の態様の第18の可能な実装方式では、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、最初の反復パラメータは、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに含む。
【００３０】
第1の態様の第15から第18の可能な実装方式のうちの任意の1つを参照して、第1の態様の第19の可能な実装方式では、最初の反復パラメータに従って推定反復パラメータを更新して第1の反復パラメータを取得することは、最初の反復パラメータと推定反復パラメータの統合セットを取得することと、統合セットの結果を第1の反復パラメータとして使用することとを含む。
【００３１】
第1の態様の第15から第19の可能な実装方式のうちの任意の1つを参照して、第1の態様の第20の可能な実装方式では、最初の反復が実施される前に、方法は、SQL実行計画の状態が確定した状態であるかどうかを照会することと、SQL実行計画の状態が確定した状態であるとき、SQL実行計画を実行することとをさらに含む。
【００３２】
本発明のこの実施形態を実装することによって得られる有益な効果は、最適化されたSQL実行計画がすでにサーバに記憶された後に再実行される必要があるとき、SQL実行計画は繰り返し決定される必要がなく、それによりサーバの実行効率が改善されることである。
【００３３】
第1の態様、または第1の態様の第2から第20の可能な実装方式のうちの任意の1つを参照して、第1の態様の第21の可能な実装方式では、SQL実行計画はフィルタ基準をさらに含み、SQL実行計画がフィルタ基準をさらに含むとき、第1の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の、フィルタ基準に準拠する関係タプルを含む。
【００３４】
第1の態様、または第1の態様の第2から第21の可能な実装方式のうちの任意の1つを参照して、第1の態様の第22の可能な実装方式では、第1の反復パラメータは、SQL実行計画に対応する任意の関係テーブル内のフィールド内の一意の個別値の数、および／または関係テーブル内の実現値の数が第2のしきい値を超える列のセット（MCV）をさらに含む。
【００３５】
本発明の実施形態を実装することによって得られる有益な効果は、本発明の実施形態において取得される第2の計画木が、データベースにすでに収集された推定反復パラメータに依存しないが、反復プロセスの間に更新される第1の反復パラメータに従って確立され、さらに、第2の計画木が第1の計画木と同じであるとき、第2の計画木はSQL実行計画として使用され、その結果、比較的正確なSQL実行計画を決定することができ、それにより、SQL実行計画の実行効率が改善されることである。
【００３６】
本発明の実施形態の第2の態様は、構造化照会言語SQL実行計画を決定するための装置を提供し、SQL実行計画は少なくとも1つの関係テーブルに対応し、装置は、メモリと、メモリに結合されたプロセッサとを含み、N回目の反復中、プロセッサは、（N−1）回目の反復中に少なくとも1つの関係テーブルに対して第1の計画木が実行された後に生成された第1の反復パラメータを取得することであって、Nが1よりも大きい自然数である、取得することと、第1の反復パラメータに従って第2の計画木を確立することと、第2の計画木と第1の計画木との間の差が第1のしきい値よりも大きくないとき、第1の計画木または第2の計画木をSQL実行計画として決定することとを行うように構成される。
【００３７】
第2の態様を参照して、第2の態様の第1の可能な実装方式では、第1のしきい値は0であり、それに対応して、プロセッサは、第2の計画木が第1の計画木と同じであるとき、第1の計画木または第2の計画木をSQL実行計画として決定することを行うように構成される。
【００３８】
第2の態様、または第2の態様の第1の可能な実装方式を参照して、第2の態様の第2の可能な実装方式では、第1の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００３９】
第2の態様、または第2の態様の第1から第2の可能な実装方式を参照して、第2の態様の第3の可能な実装方式では、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、第1の反復パラメータは、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに含む。
【００４０】
第2の態様、または第2の態様の第1から第3の可能な実装方式を参照して、第2の態様の第4の可能な実装方式では、第1の計画木または第2の計画木をSQL実行計画として決定することの後に、プロセッサは、SQL実行計画の状態を確定した状態として記録することを行うようにさらに構成される。
【００４１】
第2の態様、または第2の態様の第1から第4の可能な実装方式のうちの任意の1つを参照して、第2の態様の第5の可能な実装方式では、第1の反復パラメータに従って第2の計画木を確立することの後に、プロセッサは、第2の計画木を実行することと、第2の計画木が実行されたときに生成された第2の反復パラメータを記録することとを行うようにさらに構成される。
【００４２】
第2の態様の第5の可能な実装方式を参照して、第2の態様の第6の可能な実装方式では、第2の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００４３】
第2の態様の第5または第6の可能な実装方式を参照して、第2の態様の第7の可能な実装方式では、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、第2の反復パラメータは、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに含む。
【００４４】
第2の態様の第5から第7の可能な実装方式のうちの任意の1つを参照して、第2の態様の第8の可能な実装方式では、プロセッサは、第2の計画木と第1の計画木との間の差が第1のしきい値よりも大きいとき、第2の反復パラメータに従って第1の反復パラメータを更新することと、N回目の反復中の第2の計画木を（N＋1）回目の反復中の第1の計画木として使用することとを行うようにさらに構成される。
【００４５】
第2の態様の第8の可能な実装方式を参照して、第2の態様の第9の可能な実装方式では、第2の反復パラメータに従って第1の反復パラメータを更新することの前に、プロセッサは、第2の反復パラメータが第1の反復パラメータと同じであるとき、第1の反復パラメータに従って第1の計画木とは異なる第2の計画木を確立することを行うようにさらに構成される。
【００４６】
第2の態様の第9の可能な実装方式を参照して、第2の態様の第10の可能な実装方式では、第1の反復パラメータに従って第1の計画木とは異なる第2の計画木を確立することの後に、プロセッサは、第2の計画木を実行するための実行時間を記録することと、Nが第2のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用することとを行うようにさらに構成される。
【００４７】
第2の態様の第10の可能な実装方式を参照して、第2の態様の第11の可能な実装方式では、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用することの後に、プロセッサは、SQL実行計画の状態を確定した状態として記録することを行うようにさらに構成される。
【００４８】
第2の態様の第8の可能な実装方式を参照して、第2の態様の第12の可能な実装方式では、第2の反復パラメータに従って第1の反復パラメータを更新することの前に、プロセッサは、第2の計画木を実行するための実行時間を記録することと、Nが第3のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用することとを行うようにさらに構成される。
【００４９】
第2の態様の第12の可能な実装方式を参照して、第2の態様の第13の可能な実装方式では、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用することの後に、プロセッサは、SQL実行計画の状態を確定した状態として記録することを行うようにさらに構成される。
【００５０】
第2の態様の第7から第13の可能な実装方式のうちの任意の1つを参照して、第2の態様の第14の可能な実装方式では、プロセッサは、具体的に、第2の反復パラメータと第1の反復パラメータの統合セットを取得することと、統合セットの結果を第1の反復パラメータとして使用することとを行うように構成される。
【００５１】
第2の態様、または第2の態様の第1から第14の可能な実装方式のうちの任意の1つを参照して、第2の態様の第15の可能な実装方式では、プロセッサは、最初の反復が実施されると、あらかじめ記憶すされた推定反復パラメータに従って最初の計画木を確立することと、最初の計画木を実行して最初の反復パラメータを取得することと、最初の反復パラメータに従って推定反復パラメータを更新して第1の反復パラメータを取得することとを行うようにさらに構成される。
【００５２】
第2の態様の第15の可能な実装方式を参照して、第2の態様の第16の可能な実装方式では、推定反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００５３】
第2の態様の第15または第16の可能な実装方式を参照して、第2の態様の第17の可能な実装方式では、最初の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００５４】
第2の態様の第15から第17の可能な実装方式のうちの任意の1つを参照して、第2の態様の第18の可能な実装方式では、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、最初の反復パラメータは、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに含む。
【００５５】
第2の態様の第15から第18の可能な実装方式のうちの任意の1つを参照して、第2の態様の第19の可能な実装方式では、プロセッサは、具体的に、最初の反復パラメータと推定反復パラメータの統合セットを取得することと、統合セットの結果を第1の反復パラメータとして使用することとを行うように構成される。
【００５６】
第2の態様の第15から第19の可能な実装方式のうちの任意の1つを参照して、第2の態様の第20の可能な実装方式では、最初の反復が実施される前に、プロセッサは、SQL実行計画の状態が確定した状態であるかどうかを照会することと、SQL実行計画の状態が確定した状態であるとき、SQL実行計画を実行することとを行うようにさらに構成される。
【００５７】
第2の態様、または第2の態様の第2から第20の可能な実装方式のうちの任意の1つを参照して、第2の態様の第21の可能な実装方式では、SQL実行計画はフィルタ基準をさらに含み、SQL実行計画がフィルタ基準をさらに含むとき、第1の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の、フィルタ基準に準拠する関係タプルを含む。
【００５８】
第2の態様、または第2の態様の第2から第21の可能な実装方式のうちの任意の1つを参照して、第2の態様の第22の可能な実装方式では、第1の反復パラメータは、SQL実行計画に対応する任意の関係テーブル内のフィールド内の一意の個別値の数、および／または関係テーブル内の実現値の数が第2のしきい値を超える列のセット（MCV）をさらに含む。
【００５９】
本発明の実施形態の第3の態様は、構造化照会言語SQL実行計画を決定するための装置を提供し、SQL実行計画は少なくとも1つの関係テーブルに対応し、装置は、取得ユニットと、確立ユニットと、決定ユニットとを含み、N回目の反復中、取得ユニットは、（N−1）回目の反復中に少なくとも1つの関係テーブルに対して第1の計画木が実行された後に生成された第1の反復パラメータを取得することであって、Nが1よりも大きい自然数である、取得することを行うように構成され、確立ユニットは、第1の反復パラメータに従って第2の計画木を確立することを行うように構成され、決定ユニットは、第2の計画木と第1の計画木との間の差が第1のしきい値よりも大きくないとき、第1の計画木または第2の計画木をSQL実行計画として決定することを行うように構成される。
【００６０】
第3の態様を参照して、第3の態様の第1の可能な実装方式では、第1のしきい値は0であり、それに対応して、決定ユニットは、具体的に、第2の計画木が第1の計画木と同じであるとき、第1の計画木または第2の計画木をSQL実行計画として決定することを行うように構成される。
【００６１】
第3の態様、または第3の態様の第1の可能な実装方式を参照して、第3の態様の第2の可能な実装方式では、第1の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００６２】
第3の態様、または第3の態様の第1から第2の可能な実装方式を参照して、第3の態様の第3の可能な実装方式では、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、第1の反復パラメータは、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに含む。
【００６３】
第3の態様、または第3の態様の第1から第3の可能な実装方式を参照して、第3の態様の第4の可能な実装方式では、第1の計画木または第2の計画木をSQL実行計画として決定することの後に、装置は、SQL実行計画の状態を確定した状態として記録することを行うように構成された記録ユニットをさらに含む。
【００６４】
第3の態様、または第3の態様の第1から第4の可能な実装方式のうちの任意の1つを参照して、第3の態様の第5の可能な実装方式では、第1の反復パラメータに従って第2の計画木を確立することの後に、装置は、第2の計画木を実行することを行うように構成された実行ユニットをさらに含み、記録ユニットは、第2の計画木が実行されたときに生成された第2の反復パラメータを記録することを行うようにさらに構成される。
【００６５】
第3の態様の第5の可能な実装方式を参照して、第3の態様の第6の可能な実装方式では、第2の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００６６】
第3の態様の第5または第6の可能な実装方式を参照して、第3の態様の第7の可能な実装方式では、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、第2の反復パラメータは、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに含む。
【００６７】
第3の態様の第5から第7の可能な実装方式のうちの任意の1つを参照して、第3の態様の第8の可能な実装方式では、装置は、第2の計画木と第1の計画木との間の差が第1のしきい値よりも大きいとき、第2の反復パラメータに従って第1の反復パラメータを更新することと、N回目の反復中の第2の計画木を（N＋1）回目の反復中の第1の計画木として使用することとを行うように構成された更新ユニットをさらに含む。
【００６８】
第3の態様の第8の可能な実装方式を参照して、第3の態様の第9の可能な実装方式では、第2の反復パラメータに従って第1の反復パラメータが更新される前に、確立ユニットは、第2の反復パラメータが第1の反復パラメータと同じであるとき、第1の反復パラメータに従って第1の計画木とは異なる第2の計画木を確立することを行うようにさらに構成される。
【００６９】
第3の態様の第9の可能な実装方式を参照して、第3の態様の第10の可能な実装方式では、第1の反復パラメータに従って第1の計画木とは異なる第2の計画木が確立された後に、記録ユニットは、第2の計画木を実行するための実行時間を記録することとを行うようにさらに構成され、決定ユニットは、Nが第2のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用することを行うようにさらに構成される。
【００７０】
第3の態様の第10の可能な実装方式を参照して、第3の態様の第11の可能な実装方式では、すべてのN回の反復中の実行時間が最も短い第2の計画木がSQL実行計画として使用された後に、記録ユニットは、SQL実行計画の状態を確定した状態として記録することを行うようにさらに構成される。
【００７１】
第3の態様の第8の可能な実装方式を参照して、第3の態様の第12の可能な実装方式では、第2の反復パラメータに従って第1の反復パラメータが更新される前に、記録ユニットは、第2の計画木を実行するための実行時間を記録することを行うようにさらに構成され、決定ユニットは、Nが第3のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用することを行うようにさらに構成される。
【００７２】
第3の態様の第12の可能な実装方式を参照して、第3の態様の第13の可能な実装方式では、すべてのN回の反復中の実行時間が最も短い第2の計画木がSQL実行計画として使用された後に、記録ユニットは、SQL実行計画の状態を確定した状態として記録することを行うようにさらに構成される。
【００７３】
第3の態様の第7から第13の可能な実装方式のうちの任意の1つを参照して、第3の態様の第14の可能な実装方式では、更新ユニットは、具体的に、第2の反復パラメータと第1の反復パラメータの統合セットを取得することと、統合セットの結果を第1の反復パラメータとして使用することとを行うように構成される。
【００７４】
第3の態様、または第3の態様の第1から第14の可能な実装方式のうちの任意の1つを参照して、第3の態様の第15の可能な実装方式では、確立ユニットは、最初の反復が実施されると、あらかじめ記憶すされた推定反復パラメータに従って最初の計画木を確立することを行うようにさらに構成され、実行ユニットは、最初の計画木を実行して最初の反復パラメータを取得することを行うようにさらに構成され、更新ユニットは、最初の反復パラメータに従って推定反復パラメータを更新して第1の反復パラメータを取得することを行うようにさらに構成される。
【００７５】
第3の態様の第15の可能な実装方式を参照して、第3の態様の第16の可能な実装方式では、推定反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００７６】
第3の態様の第15または第16の可能な実装方式を参照して、第3の態様の第17の可能な実装方式では、最初の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【００７７】
第3の態様の第15から第17の可能な実装方式のうちの任意の1つを参照して、第3の態様の第18の可能な実装方式では、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、最初の反復パラメータは、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに含む。
【００７８】
第3の態様の第15から第18の可能な実装方式のうちの任意の1つを参照して、第3の態様の第19の可能な実装方式では、更新ユニットは、具体的に、最初の反復パラメータと推定反復パラメータの統合セットを取得することと、統合セットの結果を第1の反復パラメータとして使用することとを行うように構成される。
【００７９】
第3の態様の第15から第19の可能な実装方式のうちの任意の1つを参照して、第3の態様の第20の可能な実装方式では、最初の反復が実施される前に、装置は、SQL実行計画の状態が確定した状態であるかどうかを照会することを行うように構成された照会ユニットをさらに含み、決定ユニットは、SQL実行計画の状態が確定した状態であるとき、SQL実行計画を実行することを行うようにさらに構成される。
【００８０】
第3の態様、または第3の態様の第2から第20の可能な実装方式のうちの任意の1つを参照して、第3の態様の第21の可能な実装方式では、SQL実行計画はフィルタ基準をさらに含み、SQL実行計画がフィルタ基準をさらに含むとき、第1の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の、フィルタ基準に準拠する関係タプルを含む。
【００８１】
第3の態様、または第3の態様の第2から第21の可能な実装方式のうちの任意の1つを参照して、第3の態様の第22の可能な実装方式では、第1の反復パラメータは、SQL実行計画に対応する任意の関係テーブル内のフィールド内の一意の個別値の数、および／または関係テーブル内の実現値の数が第2のしきい値を超える列のセット（MCV）をさらに含む。
【００８２】
第4の態様によれば、プロセッサと、メモリと、バスと、通信インターフェースとを含む、構造化照会言語（SQL）実行計画を決定するための装置が提供され、メモリは、コンピュータ実行命令を記憶するように構成され、プロセッサは、バスを使用することによりメモリに接続され、決定装置が走ると、プロセッサは、メモリに記憶されたコンピュータ実行命令を実行し、その結果、決定装置は、本発明の実施形態における第1の態様、または第1の態様の第1からの第22の可能な実装方式のうちの任意の1つに従って、SQL実行計画を決定するための方法を実施する。
【００８３】
第5の態様によれば、第4の態様によるSQL実行計画を決定するための装置によって使用されるコンピュータソフトウェア命令を記憶するように構成されたコンピュータ記憶媒体が提供され、コンピュータ記憶媒体は、第4の態様におけるSQL実行計画を決定するための装置を実行するために設計されたプログラムを含む。
【００８４】
本発明では、SQL実行計画を決定するための装置の名前は、デバイスに限定されない。実際の実装形態では、デバイスは別の名前で現れる場合がある。デバイスの機能が本発明におけるデバイスの機能と同様である場合、そのデバイスは、本発明の特許請求の範囲および本発明に等価な技術の範囲内に入るべきである。
【００８５】
加えて、第2の態様から第5の態様における実装方式のうちの任意の1つによってもたらされる技術的効果については、第1の態様における様々な可能な実装方式によってもたらされる技術的効果を参照されたい。本明細書では詳細は再び記載されない。
【００８６】
本発明の実施形態または従来技術における技術的解決策をより明確に記載するために、以下で、実施形態または従来技術を記載するために必要な添付図面を簡単に紹介する。
【図面の簡単な説明】
【００８７】
【図１】本発明の一実施形態による、SQL実行計画を決定するための方法の概略フローチャートである。
【図２Ａ】本発明の一実施形態による、SQL実行計画を決定するための別の方法の概略フローチャートである。
【図２Ｂ】本発明の一実施形態による、SQL実行計画を決定するための別の方法の概略フローチャートである。
【図３Ａ】本発明の一実施形態による、SQL実行計画を決定するための別の方法の概略フローチャートである。
【図３Ｂ】本発明の一実施形態による、SQL実行計画を決定するための別の方法の概略フローチャートである。
【図４】本発明の一実施形態による、SQL実行計画を決定するための装置の概略構造図である。
【図５】本発明の一実施形態による、SQL実行計画を決定するための別の装置の概略構造図である。
【図６】本発明の一実施形態による、SQL実行計画を決定するための別の装置の概略構造図である。
【図７】本発明の一実施形態による、SQL実行計画を決定するための別の装置の概略構造図である。
【図８】本発明の一実施形態による、コンピュータデバイスの概略構造図である。
【発明を実施するための形態】
【００８８】
以下で、本発明の実施形態における添付図面を参照して、本発明の実施形態における技術的解決策を明確かつ完全に記載する。明らかに、記載される実施形態は、本発明の実施形態のうちのいくつかにすぎず、すべてではない。
【００８９】
加えて、「第1の」および「第2の」という用語は、説明の目的のためにすぎず、相対的な重要度の指示もしくは暗示、または示された技術的特徴の数の暗黙の指示として理解されるべきではない。したがって、「第1の」または「第2の」によって限定される特徴は、明示的または暗黙的に、特徴のうちの1つまたは複数を含んでよい。本発明の説明では、「複数の」は、別段に規定されていない限り、2つまたは3つ以上を意味する。
【００９０】
本発明の実施形態において提供されるSQL実行計画を決定するための方法は、具体的には、SQL実行計画を決定するためのフェーズ内で使用される場合がある。解決策の主要な原理は、最適なSQL実行計画を取得するために、反復方法を使用して、計画木が実際に実行されるたびに生成される反復パラメータに基づいて、計画木を確立することである。
【００９１】
具体的には、従来技術において、サーバはSQL文を受信する。一般に、SQL実行計画が決定されると、計画木は、サーバのデータベースにあらかじめ記憶された推定反復パラメータ（すなわち、サンプリング方法または反復方法を使用することによって取得される固有値）に従って直ちに確立され、次いで、計画木はSQL実行計画として使用される。しかしながら、推定反復パラメータは不正確な場合があるので、決定されたSQL実行計画は不正確な場合がある。
【００９２】
したがって、本発明の実施形態において提供されるSQL実行計画を決定するための方法では、計画木は、反復方法を使用することにより、周期的に確立および実行される場合があり、前の反復プロセスにおいてサンプリング方法または推定方法を使用することによって取得される固有値を更新するために、実際の計画木実行プロセスの間に生成された反復パラメータが記録される。さらに、次の反復プロセスでは、2つの隣接する反復プロセスにおいて確立された計画木が同じになるまで、計画木は、更新された反復パラメータを使用することによって再確立され、計画木はSQL実行計画として使用される。
【００９３】
各反復プロセスの間、前の反復プロセスの間に確立された（本発明の実施形態の中では第1の計画木と呼ばれる）計画木は、現在の反復プロセスの間に確立された（本発明の実施形態の中では第2の計画木と呼ばれる）計画木と比較される必要がある。加えて、第2の計画木は、前の反復プロセスの間に更新された（本発明の実施形態の中では第1の反復パラメータと呼ばれる）反復パラメータに従って確立され、すなわち、各反復プロセスの間に確立される第2の計画木は、第1の計画木を実行することによって更新された第1の反復パラメータに基づいて確立される。したがって、反復が複数回実施された後、最終的に取得された計画木は、データベース内のすでに収集された推定反復パラメータに依存しないが、比較的正確なSQL実行計画を取得し、SQL実行計画の実行効率を改善するために、計画木は、反復プロセスの間に計画木が実際に実行されるたびに記録される反復パラメータに従って確立される。
【００９４】
本発明の実施形態において提供されるSQL実行計画を決定するための方法を詳細に記載するために、以下で、本発明の実施形態に関与する場合があるいくつかの専門用語を説明する。
【００９５】
最初に、本発明の実施形態に関与する反復プロセスの明確な説明のために、前の反復が（N−1）回目の反復であり、現在の反復がN回目の反復であると仮定する。次いで、（N−1）回目の反復中に確立される計画木が第1の計画木であり、N回目の反復中に確立される計画木が第2の計画木であり、ここで、Nは1よりも大きい自然数である。
【００９６】
SQL実行計画は、データベース内の少なくとも1つの関係テーブルに対応する。SQL実行計画はM個の関係テーブルに対応すると仮定し、ここで、Mは1よりも大きい自然数である。
【００９７】
第1の反復パラメータは、具体的に、第1の固有値および／または第2の固有値、すなわち、第1の固有値または第2の固有値のうちの少なくとも1つを含む場合があると仮定する。第1の固有値は、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを示すために使用され、第2の固有値は、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算を実施することによって取得される結果セット内の関係タプルを示すために使用される。本発明の実施形態では、第1の固有値はN（i）によって表され、第2の固有値はN（i，j，k）によって表され、N（i）は第iの関係テーブルの関係タプルであり、N（i，j，k）は、第iの関係テーブル、第jの関係テーブル、および第kの関係テーブルのシーケンス内で結合演算（すなわち、結合）が実施された後に取得される結果セットの関係タプルである。
【００９８】
さらに、サーバによるSQL実行計画の実行は、SQL実行計画のフィルタ基準を決定することをさらに含む場合がある。たとえば、フィルタ基準は、180センチメートルよりも高いすべての少年を数えることである。この場合、第1の固有値は、第iの関係テーブル内の、フィルタ基準を満たす関係タプルを示すためにさらに使用される場合がある。
【００９９】
同様に、本発明の実施形態に関与する第2の反復パラメータも、具体的に、第1の固有値および／または第2の固有値を含む。違いは、第1の反復パラメータが（N−1）回目の反復中に更新される反復パラメータを指すこと、および第2の反復パラメータがN回目の反復中に第2の計画木が実行されたときに生成される反復パラメータを指すことである。第1の反復パラメータを更新する方式は、本発明の実施形態において詳細に記載される。
【０１００】
さらに、固有値は、関係テーブル内のフィールド内の一意の個別値（すなわち、Distinct値）の数、および／または関係テーブル内の実現値の数が第2のしきい値を超える列のセット（すなわち、MCV、最大共通値）をさらに含む場合がある。
【０１０１】
本発明の実施形態では、変形はVariationによって表される場合がある。具体的には、N回目の反復中に確立された第2の計画木が（N−1）回目の反復中に確立された第1の計画木とは異なるが、第2の計画木が実行されたときに生成された第2の反復パラメータが、第1の計画木が実行されたときに生成された第1の反復パラメータと同じである場合、現在のSQL実行計画に対して変形が実施される必要があると考えられ、その結果、より良いSQL実行計画をさらに取得することができる。
【０１０２】
図1に示されたように、本発明の一実施形態は、SQL実行計画を決定するための方法を提供する。反復プロセスの間、2回目から最後の反復プロセスは同じなので、説明のための一例として、本明細書ではN回目の反復プロセスが使用される。方法は以下のステップを含む。
【０１０３】
101．第1の計画木が実行されたときに生成された第1の反復パラメータを取得する。
【０１０４】
反復プロセスの間に確立された計画木と、反復プロセスの最後に生成された第1の反復パラメータの両方を保存することができ、N回目の反復プロセスの間、（N−1）回目の反復中に確立された第1の計画木、および上記の第1の反復パラメータを取得することができる。
【０１０５】
102．第1の反復パラメータに従って第2の計画木を確立する。
【０１０６】
たとえば、N＝2であるとき、第1の反復が完了したときに取得された第1の反復パラメータに従って、第2の計画木を確立することができる。
【０１０７】
103．第2の計画木を実行し、第2の計画木が実行されたときに生成された第2の反復パラメータを記録する。
【０１０８】
具体的には、ステップ103では、ステップ102において確立された第2の計画木が実行され、第2の計画木が実行されたときに生成された第2の反復パラメータが記録される。
【０１０９】
同様に、第2の反復パラメータもN（i）および／またはN（i，j，k）を含む。
【０１１０】
104．第2の計画木が第1の計画木と同じであるかどうかを判定するために、N回目の反復中に確立された第2の計画木を（N−1）回目の反復中に確立された第1の計画木と比較する。
【０１１１】
N＝2であるとき、上記の（N−1）回目の反復は、1回目の反復中に確立された最初の計画木であることに留意されたい。
【０１１２】
たとえば、ステップ104では、第2の計画木が第1の計画木と同じであるかどうかを判定するために、N回目の反復中に確立された第2の計画木が、（N−1）回目の反復中に確立された第1の計画木と比較されることを理解されたい。いくつかの実施形態では、ステップ104は、第2の計画木と第1の計画木との間の差がしきい値よりも大きくないかどうかを判定するために、N回目の反復中に確立された第2の計画木および（N−1）回目の反復中に確立された第1の計画木をしきい値と比較することをさらに含む。しきい値は、あらかじめ設定されるか、もしくはトレーニングによって取得された固定値であり得るか、またはシステム内で常に更新される動的な値であり得る。このことは限定されない。たとえば、異なるステップの数が1よりも大きくないかどうかを判定するために、第2の計画木を実行するためのステップを第1の計画木を実行するためのステップと比較すること、または、異なるステップの割合が99％よりも大きくないかどうかを判定するために、第2の計画木を実行するためのステップを第1の計画木を実行するためのステップと比較すること。このことは限定されない。後続のステップでは、いかなる説明も、第1の計画木と第2の計画木を比較して第1の計画木が第2の計画木と同じまたは同様であるかどうかを判定することが、ステップ104の説明と同じ意味を有することを参照し、詳細は本明細所では再び記載されない。一般に、しきい値が0ではないとき、取得されたSQL実行計画は、準最適な実行計画である。しかしながら、最適な実行計画を決定するプロセスと比較すると、準最適な実行計画を決定するプロセスでは、より多くの演算時間およびリソースが節約されることを理解されたい。いくつかの実施形態では、たとえば、演算時間およびリソースに対する要求が比較的高いアプリケーションシナリオでは、準最適な実行計画が使用される。
【０１１３】
105．N回目の反復中に確立された第2の計画木が（N−1）回目の反復中に確立された第1の計画木とは異なる場合、第2の反復パラメータを使用することにより第1の反復パラメータを更新する。
【０１１４】
具体的には、第1の反復パラメータとは異なり、第2の反復パラメータ内にある第1の固有値および／または第2の固有値を第1の反復パラメータに追加することができ、すなわち、更新された第1の反復パラメータを取得するために、第1の反復パラメータと第2の反復パラメータの統合セットが取得され、その結果、（N＋1）回目の反復中、更新された第1の反復パラメータを使用することにより、第2の計画木が再確立される。更新された第1の反復パラメータは、第2の計画木が実際に実行されたときの第1の固有値および／または第2の固有値であるので、更新された第1の反復パラメータを使用することによって確立された第2の計画木はより正確である。
【０１１５】
106．第2の計画木を使用することにより第1の計画木を更新し、反復の数を1だけ増やす。
【０１１６】
この場合、反復プロセスの間に生成された第2の計画木が、前の反復プロセスの間に生成された第1の計画木と同じになるまで、この反復プロセスの間に生成された第2の計画木は、次の反復プロセスの間の第1の計画木として使用される。
【０１１７】
加えて、ステップ101から106の繰り返される実行を容易にするために、反復の数が1だけ増やされる場合がある。
【０１１８】
107．N回目の反復中に確立された第2の計画木が（N−1）回目の反復中に確立された第1の計画木と同じである場合、第2の計画木をSQL実行計画として使用する。
【０１１９】
具体的には、ステップ107では、N回目の反復中に確立された第2の計画木が（N−1）回目の反復中に確立された第1の計画木と同じであるとき、それは、N回の反復後、すべての第1の固有値および第2の固有値が第1の反復パラメータに含まれることを示す。したがって、この場合、第1の反復パラメータに従って生成された第2の計画木は最適であり、第2の計画木はSQL実行計画として使用することができる。
【０１２０】
この場合、第2の計画木と第2の計画木を実行するための関係するSQL文との間の対応関係を保存することができる。SQL文が再び受信されると、サーバは、第2の計画木、すなわち、対応する記憶装置からのSQL実行計画を直ちに取得することができる。
【０１２１】
いくつかの実施形態では、ステップ104と同様に、ステップ107は、N回目の反復中に確立された第2の計画木および（N−1）回目の反復中に確立された第1の計画木がしきい値よりも大きくない場合、第2の計画木または第1の計画木がSQL実行計画として使用されることを含む。この実施形態では、第1の計画木と第2の計画木の両方が準最適な計画木であり、第1の計画木または第2の計画木のいずれかをSQL実行計画として選択することができることを理解されたい。
【０１２２】
いくつかの実施形態では、またはいくつかの実施形態において例として使用されたいくつかの反復サイクルでは、ステップ103、ステップ105、およびステップ106はオプションのステップであることを理解されたい。
【０１２３】
加えて、場合によっては、第2の計画木の実行時間は、各反復サイクル内で記録することができる。反復の数があらかじめ決定されたしきい値を超えたとき、すなわち、反復アルゴリズムが時間しきい値内に収束しなかったとき、すべての反復サイクルの中で実行時間が最も短い上記の第2の計画木が、SQL実行計画として選択される。
【０１２４】
場合によっては、第2の計画木がSQL実行計画として使用された後、SQL実行計画の状態はサーバ内で確定した状態に設定され、すなわち、最適化されたSQL実行計画が決定される。後続のステップでは、SQL実行計画の状態が確定した状態であるとき、その間にSQL実行計画が決定されるプロセスは繰り返される必要がなく、それにより、サーバの実行効率が改善される。
【０１２５】
さらに、図1に示されたSQL実行計画を決定するための方法に基づいて、本発明の一実施形態は、SQL実行計画を決定するための方法をさらに提供する。図2Aおよび図2Bに示されたように、方法は以下のステップを含む。
【０１２６】
201．SQL実行計画の状態が確定した状態であるかどうかを照会する。
【０１２７】
具体的には、SQL実行計画に対応する関係テーブルの識別子がSQL文内で搬送され、たとえば、受信されたSQL文が、select count（＊） from dbaであり、すなわち、dba関係テーブルのラインの数を求めて、その識別子がdbaである関係テーブルを検索する。
【０１２８】
時間期間内にサーバにより同じSQL文が繰り返し実行される場合があるので、SQL文に関係するSQL実行計画が初めて生成されると、SQL実行計画とSQL文との間の対応関係を保存することができる。このようにして、SQL文が再び受信されると、照会により、SQL文に対応するSQL実行計画が存在するかどうか、すなわち、SQL実行計画の状態が確定した状態であるかどうかを見つけることができる。
【０１２９】
たとえば、変数Optimizationを設定することができ、受信されたSQL文に対応するSQL実行計画が記憶されているかどうかを示すために使用される。
【０１３０】
この場合、サーバは、SQL文に対応する変数Optimizationが1であるかどうかを照会することができ、Optimization＝1である場合、それは、受信されたSQL文に対応するSQL実行計画が記憶されていることを示し、サーバは、対応する記憶装置からSQL実行計画を直ちに取得することができる。
【０１３１】
これに反して、Optimization≠1、すなわち、SQL実行計画の状態が確定していない状態である場合、それは、受信されたSQL文に対応するSQL実行計画が記憶されていない、すなわち、そのSQL文が初めて実行されることを示し、この場合、以下のステップ202〜213が実施される。
【０１３２】
202．SQL実行計画が確定していない状態である場合、後続の反復プロセスの間に使用されるべき変数を初期化する。
【０１３３】
ステップ202では、Optimization≠1であれば、この場合、反復中に使用されるべき変数を初期化することができる。たとえば、反復の数Nが1に設定され、Optimizationが0に設定され、Variation（変形）が0に設定される。
【０１３４】
203．最初の反復が実施されると、あらかじめ記憶された推定反復パラメータに従って最初の計画木を確立する。
【０１３５】
ステップ202の初期化演算が完了すると、第1の反復プロセスが開始される。この場合、統計情報に記憶された推定反復パラメータに従って、最初の計画木を確立することができる。
【０１３６】
1回目の反復中に計画木は確立されないので、実際の反復パラメータは、計画木が実行されている間のプロセスから収集することができない。したがって、この場合、従来技術に従い、すなわち、統計情報に記憶された推定反復パラメータを使用することにより、最初の計画木T0が確立される。
【０１３７】
204．最初の計画木を実行して、最初の計画木が実行されたときに生成された最初の反復パラメータを取得し、最初の反復パラメータを使用することにより推定反復パラメータを更新する。
【０１３８】
従来技術との違いは、ステップ204では、サーバがステップ203において確立された最初の計画木を実行することができ、最初の計画木が実行されたときに生成された最初の反復パラメータ、すなわち、N（i）および／またはN（i，j，k）が記録されることである。このようにして、ステップ203の推定反復パラメータは、最初の計画木が実行されたときに生成された最初の反復パラメータで更新することができる。
【０１３９】
たとえば、ステップ201のSQL文が2つの関係テーブルの識別子、すなわち、t1およびt2を搬送すると仮定する。ステップ203では、最初の計画木を確立するための推定反復パラメータは、具体的に、N（t1）、N（t2）、およびN（t2，t1）を含む。しかしながら、ステップ204では、最初の計画木が実行されたときに生成された最初の反復パラメータは、N（t1）、N（t2）、およびN（t1，t2）を含む場合がある。この場合、最初の反復パラメータ内にあり、推定反復パラメータとは異なる反復パラメータは、推定反復パラメータに更新され得るし、すなわち、更新された推定反復パラメータは、N（t1）、N（t2）、N（t1，t2）、およびN（t2，t1）であり、更新された推定反復パラメータを使用することにより、後続の（N−1）回目の反復プロセスの間に第2の計画木を確立するために、更新された推定反復パラメータは、上記の第1の反復パラメータとして使用される。
【０１４０】
さらに、2回目から最後の反復プロセスについては、以下のステップ205〜213を参照されたい。具体的には、説明のための例として、本明細書ではN回目の反復プロセスが使用される。
【０１４１】
205．N回目の反復中、（N−1）回目の反復中に確立された第1の計画木を取得する。
【０１４２】
各反復プロセスの間に確立された計画木は保存することができるので、N回目の反復中、（N−1）回目の反復中に確立された第1の計画木を取得することができる。
【０１４３】
206．SQL実行計画に対して変形が実施される必要があるかどうかを判定する。
【０１４４】
すなわち、第1の反復パラメータが第2の反復パラメータと同じであるかどうかが判定される。第1の反復パラメータが第2の反復パラメータと同じである場合、SQL実行計画に対して変形が実施される必要があり、第1の反復パラメータが第2の反復パラメータとは異なる場合、SQL実行計画に対して変形が実施される必要がない。このステップでは、説明のための例として、本明細書ではN＞1．N＝2が使用されることを理解されたい。ステップ203および204の1回目の反復プロセスの後、2回目の反復中、SQL実行計画に対して変形が実施される必要があるかどうか、すなわち、Variationが1に等しいかどうかを最初に判定することができる。
【０１４５】
Variation≠1である場合、ステップ207が実施され、Variation＝1である場合、ステップ208が実施される。
【０１４６】
207．SQL実行計画に対して変形が実施される必要がない場合、（N−1）回目の反復中に更新された第1の反復パラメータに従って第2の計画木を確立する。
【０１４７】
具体的には、第1の計画木が実行されたときに生成された第1の反復パラメータが、第2の計画木が実行されたときに生成された第2の反復パラメータとは異なる場合、第1の反復パラメータは、第2の反復パラメータを使用することによって更新される。第2の反復パラメータ内で、第1の反復パラメータとは異なる第1の固有値および／または第2の固有値を第1の反復パラメータに追加することができ、更新された第1の反復パラメータが取得され、すなわち、第1の反復パラメータと第2の反復パラメータの統合セットが取得され、統合セットの結果は、更新された第1の反復パラメータとして使用される。
【０１４８】
すなわち、Variation≠1、SQL実行計画に対して変形が実施される必要がない場合、（N−1）回目の反復中に更新された第1の反復パラメータに従って、第2の計画木が確立される。
【０１４９】
たとえば、N＝2であるとき、Variation≠1である場合、1回目の反復中に更新された第1の反復パラメータ（すなわち、ステップ204において取得された第1の反復パラメータ）に従って、第2の計画木が確立される。
【０１５０】
208．SQL実行計画に対して変形が実施される必要がある場合、（N−1）回目の反復中に更新された第1の反復パラメータに従って、上記の第1の計画木とは異なる第2の計画木を確立する。
【０１５１】
具体的には、Variation＝1、すなわち、SQL実行計画に対して変形が実施される必要がある場合、（N−1）回目の反復中に更新された第1の反復パラメータに従って、第2の計画木も確立することができる。しかしながら、ステップ207との違いは、確立された第2の計画木が（N−1）回目の反復中に確立された第1の計画木とは異なることである。
【０１５２】
たとえば、1回目の反復中に確立された計画木は最初の計画木である。次いで、N＝3であるとき、Variation＝1である場合、第2の計画木は、2回目の反復中に更新された第1の反復パラメータを使用することによって確立され、第2の計画木が2回目の反復中に確立された第1の計画木とは異なることが保証される。
【０１５３】
サーバは第1の反復パラメータに従って第2の計画木を確立することができることを理解されたい。この場合、第2の計画木は、第1の反復パラメータの要件を満たす最適な計画木としてサーバによって考えられるが、実際に最適な計画木ではない場合がある。SQL実行計画に対して変形が実施される必要があるとき、サーバは、最適な計画木としてサーバによって考えられる上記の第2の計画木（すなわち、第1の計画木と同じである第2の計画木）を生成することを禁止され得るが、第1の計画木とは異なる別の第2の計画木を生成することができる。
【０１５４】
209．第2の計画木を実行し、第2の計画木が実行されたときに生成された第2の反復パラメータを記録する。
【０１５５】
具体的には、ステップ209では、ステップ207またはステップ208において確立された第2の計画木が実行され、第2の計画木が実行されたときに生成された第2の反復パラメータが記録される。
【０１５６】
同様に、第2の反復パラメータもN（i）および／またはN（i，j，k）を含む。
【０１５７】
210．第2の計画木が第1の計画木と同じであるかどうかを判定するために、N回目の反復中に確立された第2の計画木を（N−1）回目の反復中に確立された第1の計画木と比較する。
【０１５８】
N＝2であるとき、上記の（N−1）回目の反復において、すなわち、1回目の反復中に確立された第1の計画木は、ステップ203において確立された最初の計画木である。
【０１５９】
211．N回目の反復中に確立された第2の計画木が（N−1）回目の反復中に確立された第1の計画木とは異なる場合、第1の反復パラメータが第2の反復パラメータと同じであるかどうかを判定するために、すなわち、SQL実行計画に対して変形が実施される必要があるかどうかを判定するために、第1の計画木が実行されたときに生成された第1の反復パラメータを第2の計画木が実行されたときに生成された第2の反復パラメータと比較し、ステップ206が実施され、N回目の反復中に確立された第2の計画木が（N−1）回目の反復中に確立された第1の計画木と同じであるときのみ、ステップ212が実施される。
【０１６０】
212．N回目の反復中に確立された第2の計画木が（N−1）回目の反復中に確立された第1の計画木と同じである場合、第2の計画木をSQL実行計画として使用する。
【０１６１】
具体的には、ステップ214では、N回目の反復中に確立された第2の計画木が（N−1）回目の反復中に確立された第1の計画木と同じであるとき、それは、N回の反復後、すべての第1の固有値および第2の固有値が第1の反復パラメータに含まれることを示す。したがって、この場合、第1の反復パラメータに従って生成された第2の計画木は最適であり、第2の計画木はSQL実行計画として使用することができる。
【０１６２】
加えて、第2の計画木とSQL文との間の対応関係が保存され、変数Optimizationが1に設定される。このようにして、SQL文が再び受信されると、Optimization＝1と判定された場合、それは、受信されたSQL文に対応するSQL実行計画が記憶されていることを示し、その結果、サーバは、対応する記憶装置からSQL実行計画を直ちに取得することができる。
【０１６３】
加えて、ステップ201およびステップ212に基づいて、ステップ301〜303をさらに追加することができる。たとえば、図3Aおよび図3Bに示されたように、ステップ301〜303は以下の通りである。
【０１６４】
301．N回目の反復中に第2の計画木を実行するための実行時間を記録する。
【０１６５】
302．反復の数Nが第1のしきい値よりも大きいかどうか、かつSQL実行計画に対して変形が実施される必要があるかどうかを判定する。
【０１６６】
303．反復の数Nがしきい値よりも大きい、かつSQL実行計画に対して変形が実施される必要がある場合、すべてのN回の反復中に実行時間が最も短い第2の計画木をSQL実行計画として使用する。
【０１６７】
具体的には、ステップ209では、すなわち、第2の計画木が実行されると、第2の計画木の実行中に費やされた実行時間を記録することができる。
【０１６８】
さらに、ステップ209の後、ステップ210の前に、ステップ302が実施され、すなわち、現在の反復の数Nがしきい値よりも大きいかどうか、かつSQL実行計画に対して変形が実施される必要があるかどうかが判定される。
【０１６９】
具体的には、反復の数Nがしきい値よりも大きく、かつSQL実行計画に対して変形が実施される必要がある場合、すなわち、Nがしきい値よりも大きく、かつVariation＝1である場合、ステップ303が実施され、すなわち、ステップ301において記録された、N回の反復プロセスの間の実行時間が最も短い第2の計画木が、ステップ201におけるSQL実行計画として使用される。
【０１７０】
このようにして、反復プロセスの間にそれに対して変形がすでに実施されたSQL実行計画の場合、前の反復中に取得された計画木と同じ計画木は、反復によって決して取得されなくてもよい。したがって、無限ループを回避するために、反復の数Nがしきい値よりも大きいとき、過去のN回の反復プロセスの間の実行時間が最も短い第2の計画木が最適な計画木であり、次いで、第2の計画木はSQL実行計画として使用される。
【０１７１】
それに対応して、ステップ302において、現在の反復の数Nがしきい値よりも小さく、かつ／またはSQL実行計画に対して変形が実施される必要がないと判定されれば、この場合、反復の数Nがしきい値よりも大きくなり、かつSQL実行計画に対して変形が実施される必要がなくなるまで、ステップ210〜212に従って反復が引き続き実施される。
【０１７２】
加えて、各々の反復中に第2の計画木を実行するための実行時間が記録されるとき、たとえば、N回目の反復プロセスの間に第2の計画木を実行するための実行時間がT1であるとき、この場合、（N−1）回目の反復プロセスの間に第2の計画木を実行するための実行時間T2をT1と比較することができる。T1がT2よりも小さい場合、比較的短い実行時間T1、および比較的短い実行時間T1に対応する第2の計画木が保存される。このようにして、保存された第2の計画木は、N回目の反復プロセスの間の実行時間が最も短い第2の計画木であり、各々の反復中に第2の計画木を実行するための実行時間、および対応する第2の計画木は記録される必要がなく、それにより、記憶リソースが節約される。
【０１７３】
本発明のこの実施形態は、SQL実行計画を決定するための方法を提供する。一例としてN回目の反復プロセスが使用される。最初に、（N−1）回目の反復中に更新された第1の反復パラメータが取得され、たとえば、第1の反復パラメータは、第1の固有値および／または第2の固有値を含むと仮定し、第1の固有値は、第iの関係テーブルの関係タプルを示すために使用され、第2の固有値は、少なくとも2つの関係テーブルに対して結合演算が実行された後に取得される結果セット内の関係タプルを示すために使用され、次いで、第1の反復パラメータを使用することにより第2の計画木が確立され、第2の計画木が第1の計画木と同じであるとき、SQL実行計画として第2の計画木が使用される。解決策において最終的に取得された第2の計画木は、データベースにすでに収集された推定反復パラメータに依存しないが、反復プロセスの間に更新される第1の反復パラメータに従って確立され、さらに、第2の計画木が第1の計画木と同じであるとき、第2の計画木はSQL実行計画として使用され、その結果、比較的正確なSQL実行計画を決定することができ、それにより、SQL実行計画の実行効率が改善される。
【０１７４】
図4は、本発明の一実施形態による、SQL実行計画を決定するための装置の概略構造図である。本発明のこの実施形態において提供されるSQL実行計画を決定するための装置は、図1〜図3Bに示された本発明の実施形態に実装された方法を実装するために使用することができる。説明しやすいように、本発明の実施形態に関係する部分のみが示される。実行される詳細な技術的解決策については、図1〜図3Bに示された本発明の実施形態を参照されたい。詳細は再び記載されない。
【０１７５】
具体的には、図4に示されたように、SQL実行計画を決定するための装置は、取得ユニット01と、確立ユニット02と、決定ユニット03とを含む。装置はN回目の反復において使用され、ここで、
取得ユニット01は、（N−1）回目の反復中に少なくとも1つの関係テーブルに対して第1の計画木が実行された後に生成された第1の反復パラメータを取得するように構成され、Nは1よりも大きい自然数であり、
確立ユニット02は、第1の反復パラメータに従って第2の計画木を確立するように構成され、
決定ユニット03は、第2の計画木と第1の計画木との間の差が第1のしきい値よりも大きくないとき、第1の計画木または第2の計画木をSQL実行計画として決定するように構成される。
【０１７６】
たとえば、第1のしきい値は0であり、それに対応して、第2の計画木と第1の計画木との間の差が第1のしきい値よりも大きくないとき、第1の計画木または第2の計画木をSQL実行計画として決定することは、第2の計画木が第1の計画木と同じであるとき、第1の計画木または第2の計画木をSQL実行計画として決定することを含む。
【０１７７】
たとえば、第1の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【０１７８】
たとえば、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、第1の反復パラメータは、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに含む。
【０１７９】
さらに、図5に示されたように、装置は、
第2の計画木を実行するように構成された実行ユニット04と、
第2の計画木が実行されたときに生成された第2の反復パラメータを記録するように構成された記録ユニット05と
をさらに含む。
【０１８０】
たとえば、記録ユニット05は、SQL実行計画の状態を確定した状態として記録するようにさらに構成される。
【０１８１】
たとえば、第2の反復パラメータは、SQL実行計画に対応する任意の1つまたは複数の関係テーブル内の関係タプルを含む。
【０１８２】
たとえば、SQL実行計画が少なくとも2つの関係テーブルに対応するとき、第2の反復パラメータは、少なくとも2つの関係テーブルの中の任意の1つまたは複数の関係テーブルに対して結合演算が実施された後に取得される結果セット内の関係タプルをさらに含む。
【０１８３】
さらに、図6に示されたように、装置は、
第2の計画木と第1の計画木との間の差が第1のしきい値よりも大きいとき、第2の反復パラメータに従って第1の反復パラメータを更新し、N回目の反復中の第2の計画木を（N＋1）回目の反復中の第1の計画木として使用するよう構成された更新ユニット06
をさらに含む。
【０１８４】
さらに、確立ユニット02は、具体的に、第2の反復パラメータが第1の反復パラメータと同じであるとき、第1の反復パラメータに従って第1の計画木とは異なる第2の計画木を確立するように構成される。
【０１８５】
さらに、記録ユニット05は、第2の計画木を実行するための実行時間を記録するようにさらに構成される。
【０１８６】
決定ユニット03は、反復の数Nが第2のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用するようにさらに構成される。
【０１８７】
決定ユニット03は、反復の数Nが第3のしきい値よりも大きいとき、すべてのN回の反復中の実行時間が最も短い第2の計画木をSQL実行計画として使用するようにさらに構成される。
【０１８８】
さらに、記録ユニット05は、SQL実行計画の状態を確定した状態として記録するようにさらに構成される。
【０１８９】
さらに、確立ユニット02は、最初の反復が実施されると、あらかじめ記憶された推定反復パラメータに従って最初の計画木を確立するようにさらに構成される。
【０１９０】
実行ユニット04は、最初の計画木を実行して、最初の計画木が実行されたときに生成された最初の反復パラメータを取得するようにさらに構成される。
【０１９１】
更新ユニット06は、最初の反復パラメータを使用することにより推定反復パラメータを更新して第1の反復パラメータを取得するようにさらに構成される。
【０１９２】
さらに、図7に示されたように、装置は、照会ユニット07をさらに含む。
【０１９３】
照会ユニット07は、SQL実行計画の状態が確定した状態であるかどうかを照会するように構成される。
【０１９４】
決定ユニット03は、SQL実行計画の状態が確定した状態であるとき、SQL実行計画を実行するようにさらに構成される。
【０１９５】
さらに、更新ユニット06は、具体的に、第2の反復パラメータと第1の反復パラメータの統合セットを取得し、統合セットの結果を第1の反復パラメータとして使用するように構成される。
【０１９６】
図8に示されたように、図4〜図7に示されたSQL実行計画を決定するための装置は、図8のコンピュータデバイス（またはコンピュータシステム）を使用することによって取得することができる。
【０１９７】
図8は、本発明の一実施形態による、コンピュータデバイス100の概略図である。コンピュータデバイス100は、少なくとも1つのプロセッサ11と、通信バス12と、メモリ13と、少なくとも1つの通信インターフェース14とを含む。
【０１９８】
メモリ13は、コンピュータ実行命令を記憶するように構成される。プロセッサ11は、バス12を使用することによりメモリ13に接続される。SQL実行計画を決定するための装置が走ると、プロセッサ11は、メモリ13に記憶されたコンピュータ実行命令を実行し、その結果、SQL実行計画を決定するための装置は、図1〜図3Bのうちの任意の1つのSQL実行計画を決定するための方法を実施する。
【０１９９】
上記の取得ユニット01、確立ユニット02、決定ユニット03、実行ユニット04、記録ユニット05、更新ユニット06、および照会ユニット07の固有の機能は、メモリ13に記憶されたコンピュータ実行命令を起動することにより、コンピュータデバイス100内のプロセッサ11によって実装することができる。
【０２００】
プロセッサ11は、汎用中央処理装置（CPU）、マイクロプロセッサ、特定用途向け集積回路（application−specific integrated circuit、ASIC）、または本発明の解決策のプログラム実行を制御するように構成された1つもしくは複数の集積回路であり得る。
【０２０１】
通信バス12は、上記の構成要素の間で情報を転送するための経路を含む場合がある。通信インターフェース14は、トランシーバタイプの任意の装置を使用することにより、別のデバイス、またはイーサネット（登録商標）、無線アクセスネットワーク（RAN）、もしくはワイヤレスローカルエリアネットワーク（Wireless Local Area Network、WLAN）などの通信ネットワークと通信するように構成される。
【０２０２】
メモリ13は、読取り専用メモリ（read−only memory、ROM）もしくは静的な情報および命令を記憶することができる別のタイプのスタティックストレージデバイス、または、ランダムアクセスメモリ（random access memory、RAM）もしくは情報および命令を記憶することができる別のタイプのダイナミックストレージデバイスであり得るか、あるいは、電気的消去可能プログラマブル読取り専用メモリ（Electrically Erasable Programmable Read−Only Memory、EEPROM）、コンパクトディスク読取り専用メモリ（Compact Disc Read−Only Memory、CD−ROM）、別のコンパクトディスクストレージデバイス、（コンパクトディスク、レーザディスク、光ディスク、デジタル多用途ディスク、もしくはBlu−ray（登録商標）ディスクなどの）光ディスクストレージデバイス、ディスクストレージ媒体、別のディスクストレージデバイス、または、命令もしくはデータ構造の形態で期待されるプログラムコードを搬送もしくは記憶するために使用することができ、コンピュータによってアクセスすることができる任意の他の媒体であり得る。このことは本明細書では限定されない。メモリ13は、単独で存在する場合があり、バスを使用することによりプロセッサに接続される。メモリ13は、プロセッサに統合される場合もある。
【０２０３】
メモリ13は、本発明の解決策を実行するために使用されるアプリケーションプログラムコードを記憶するように構成され、アプリケーションプログラムコードは、プロセッサ11の制御下で実行される。プロセッサ11は、メモリ13に記憶されたアプリケーションプログラムコードを実行するように構成される。
【０２０４】
特定の実装形態において、一実施形態では、プロセッサ11は、図8のCPU0およびCPU1などの、1つまたは複数のCPUを含む場合がある。
【０２０５】
特定の実装形態において、一実施形態では、コンピュータデバイス100は、複数のプロセッサ、たとえば、図8のプロセッサ11およびプロセッサ18を含む場合がある。プロセッサの各々は、シングルコア（single−CPU）プロセッサであり得るか、またはマルチコア（multi−CPU）プロセッサであり得る。本明細書内のプロセッサは、データ（たとえば、コンピュータプログラム命令）を処理するために使用される、1つまたは複数のデバイス、回路、および／または処理コアを指す場合がある。
【０２０６】
特定の実装形態において、一実施形態では、コンピュータデバイス100は、出力デバイス15と、入力デバイス16とをさらに含む場合がある。出力デバイス15はプロセッサ11と通信し、複数の方式で情報を表示することができる。たとえば、出力デバイス15は、液晶ディスプレイ（liquid crystal display、LCD）、発光ダイオード（light emitting diode、LED）ディスプレイデバイス、陰極線管（cathode-ray tube、CRT）ディスプレイデバイス、またはプロジェクタ（projector）であり得る。入力デバイス16はプロセッサ11と通信し、複数の方式でユーザから入力を受け取ることができる。たとえば、入力デバイス16は、マウス、キーボード、タッチスクリーンデバイス、またはセンサデバイスであり得る。
【０２０７】
上記のコンピュータデバイス100は、汎用コンピュータデバイスまたは専用コンピュータデバイスであり得る。特定の実装形態において、コンピュータデバイス100は、デスクトップコンピュータ、ポータブルコンピュータ、ネットワークサーバ、携帯情報端末（Personal Digital Assistant、PDA）、モバイルフォン、タブレットコンピュータ、ワイヤレス端末デバイス、通信デバイス、内蔵デバイス、または図8の構造と同様の構造を有するデバイスであり得る。本発明のこの実施形態は、コンピュータデバイス100のタイプに対して制限を課さない。
【０２０８】
本発明のこの実施形態は、SQL実行計画を決定するための方法を提供する。一例としてN回目の反復プロセスが使用される。最初に、（N−1）回目の反復中に更新された第1の反復パラメータが取得され、たとえば、第1の反復パラメータは、第1の固有値および／または第2の固有値を含み、第1の固有値は、第iの関係テーブルの関係タプルを示すために使用され、第2の固有値は、少なくとも2つの関係テーブルに対して結合演算が実行された後に取得される結果セット内の関係タプルを示すために使用され、次いで、第1の反復パラメータを使用することにより第2の計画木が確立され、第2の計画木が第1の計画木と同じであるとき、SQL実行計画として第2の計画木が使用される。解決策において最終的に取得された第2の計画木は、データベースにすでに収集された推定反復パラメータに依存しないが、反復プロセスの間に更新される第1の反復パラメータに従って確立され、さらに、第2の計画木が第1の計画木と同じであるとき、第2の計画木はSQL実行計画として使用され、その結果、比較的正確なSQL実行計画を決定することができ、それにより、SQL実行計画の実行効率が改善される。
【０２０９】
便利かつ簡単な説明の目的で、上記の機能モジュールの分割が説明用の例と捉えられることを、当業者なら明確に理解することができる。実際の用途では、上記の機能は、様々な機能モジュールに割り振られ、要件に応じて実装することができ、すなわち、装置の内部構造は、上述された機能のうちのすべてまたは一部を実装するために、様々な機能モジュールに分割される。上記のシステム、装置、およびユニットの詳細な動作プロセスについては、上記の方法実施形態の中の対応するプロセスを参照し、詳細は本明細書において記載されない。
【０２１０】
本出願において提供されたいくつかの実施形態では、開示されたシステム、装置、および方法は、他の方式で実装される場合があることを理解されたい。たとえば、記載された装置実施形態は一例にすぎない。たとえば、モジュール分割またはユニット分割は論理的な機能分割にすぎず、実際の実装形態では他の分割もあり得る。たとえば、複数のユニットまたは構成要素は、組み合わされるか、もしくは別のシステムの中に統合される場合があり、または、いくつかの特徴は、無視されるか、もしくは実施されない場合がある。加えて、表示または説明された相互結合または直接結合または通信結合は、いくつかのインターフェースを使用することによって実装される場合がある。装置またはユニットの間の間接結合または通信結合は、電子式、機械式、または他の形態で実装される場合がある。
【０２１１】
別々の部分として記載されたユニットは物理的に別々であってもなくてもよく、ユニットとして表示された部分は、物理的なユニットであってもなくてもよく、1つの場所に位置してもよく、または複数のネットワークユニット上に分散されてもよい。ユニットのうちのいくつかまたはすべては、実施形態の解決策の目的を達成するために、実際の必要に応じて選択される場合がある。
【０２１２】
加えて、本発明の実施形態における機能ユニットは、1つの処理ユニットに統合される場合があるか、またはユニットの各々は物理的に単独で存在する場合があるか、もしくは2つ以上のユニットが1つのユニットに統合される。統合されたユニットは、ハードウェアの形態で実装される場合があるか、またはソフトウェア機能ユニットの形態で実装される場合がある。
【０２１３】
統合されたユニットがソフトウェア機能ユニットの形態で実装され、独立した製品として販売または使用されると、統合されたユニットは、コンピュータ可読記憶媒体に記憶される場合がある。そのような理解に基づいて、本質的もしくは部分的に従来技術に寄与する本発明の技術的解決策、または技術的解決策のうちのすべてもしくは一部は、ソフトウェア製品の形態で実装される場合がある。ソフトウェア製品は記憶媒体に記憶され、本発明の実施形態において記載された方法のステップのうちのすべてまたは一部を実施するように、（パーソナルコンピュータ、サーバ、もしくはネットワークデバイスであり得る）コンピュータデバイス、またはプロセッサ（processor）に命令するためのいくつかの命令を含む。上記の記憶媒体には、USBフラッシュドライブ、リムーバブルハードディスク、読取り専用メモリ（ROM、Read−Only Memory）、ランダムアクセスメモリ（RAM、Random Access Memory）、磁気ディスク、または光ディスクなどの、プログラムコードを記憶することができる任意の媒体が含まれる。
【０２１４】
上記の説明は、本発明の特定の実装方式にすぎず、本発明の保護範囲を限定するものではない。本発明において開示された技術的範囲内で、当業者が容易に考え付くいかなる変形または置換も、本発明の保護範囲内に入るべきである。したがって、本発明の保護範囲は、特許請求の範囲の保護範囲に従うべきである。
【符号の説明】
【０２１５】
01  取得ユニット
02  確立ユニット
03  決定ユニット
04  実行ユニット
05  記録ユニット
06  更新ユニット
07  照会ユニット
11  プロセッサ
12  通信バス
13  メモリ
14  通信インターフェース
15  出力デバイス
16  入力デバイス
18  プロセッサ
100  コンピュータデバイス
【図１】
0006415708.tif 000002
【図２Ａ】
0006415708.tif 000003
【図２Ｂ】
0006415708.tif 000004
【図３Ａ】
0006415708.tif 000005
【図３Ｂ】
0006415708.tif 000006
【図４】
0006415708.tif 000007
【図５】
0006415708.tif 000008
【図６】
0006415708.tif 000009
【図７】
0006415708.tif 000010
【図８】
0006415708.tif 000011