(58)【調査した分野】(Int.Cl.,DB名)
前記生成ステップにおいて、前記コンピュータは、前記第1バケット及び前記第2バケットのそれぞれに含まれるデータの最大値及び最小値を、それぞれのバケットに含まれるデータが取り得る値の最大値及び最小値に設定する、
請求項3に記載のヒストグラム生成方法。
前記生成ステップにおいて、前記コンピュータは、前記第1バケットの最大値を前記中間結果ヒストグラムに含まれるデータにおける最大値に設定するとともに、前記第2バケットの最小値を前記中間結果ヒストグラムに含まれるデータの最小値に設定する、
請求項4に記載のヒストグラム生成方法。
前記生成ステップにおいて、前記コンピュータは、前記ヒストグラムに含まれるデータの最大値が正の値である場合には、正の値を有するデータに対応する1以上のバケットである第1バケットにおける最大値を前記ヒストグラムに含まれるデータにおける最大値に設定するとともに、負の値を有するデータに対応する1以上のバケットである第2バケットにおける最小値を前記ヒストグラムに含まれるデータの最小値に設定する、
請求項1から5のいずれか1項に記載のヒストグラム生成方法。
前記生成ステップにおいて、前記コンピュータは、前記ヒストグラムに含まれるデータの最大値が負の値である場合には、当該データの最大値を前記ヒストグラムに含まれるデータにおける最小値に設定するとともに、当該データの最小値を前記ヒストグラムに含まれるデータの最大値に設定する、
請求項1から6のいずれか1項に記載のヒストグラム生成方法。
前記生成ステップにおいて、前記コンピュータは、特定された前記カラムに対応するデータに、正の値を示すデータと負の値を示すデータとが含まれている場合に、前記カラムに対応するデータにおける型変換前の最大値と、型変換前の最小値との比率と、前記カラムに対応する全てのデータの数とに基づいて、正の値を有するデータに対応する1以上のバケットである第1バケット及び負の値を有するデータに対応する1以上のバケットである第2バケットのそれぞれに含まれるデータの数を推定し、推定したデータの数を示す情報を含む前記第1バケット及び前記第2バケットを生成する、
請求項3から7のいずれか1項に記載のヒストグラム生成方法。
前記生成ステップにおいて、前記コンピュータは、前記問合せ文に含まれる前記カラムに対応する絞り込み条件によって絞り込まれた後のデータの数を、生成された前記中間結果ヒストグラムに基づいて推定し、前記記憶部に記憶されているヒストグラムに含まれる複数のバケットのそれぞれに対応するデータの数を、推定したデータの数と、前記絞り込み条件によって絞り込まれる前のデータの数とに基づいて更新することにより、前記問合せ文が実行された後の前記カラムのヒストグラムをさらに生成する、
請求項1から8のいずれか1項に記載のヒストグラム生成方法。
【発明の概要】
【発明が解決しようとする課題】
【0004】
ヒストグラムは、テーブルに含まれる複数のカラムのそれぞれに対応して、1以上のバケットを含んでいる。バケットは、データ区間における、データの数とデータが示す値の数とを示す情報を含む。データベースシステムは、ヒストグラムに対して、問合せ文における演算処理を適用することにより、演算処理後のヒストグラム(中間ヒストグラム)を作成し、クエリの中間結果のサイズを推定することができる。
【0005】
しかしながら、問合せ文においてカラムに対して型変換が発生した場合には、型変換後のデータと、ヒストグラムとが対応しなくなる。このため、ヒストグラムを用いた中間結果のサイズの推定結果が、実際の演算処理における中間結果のサイズと乖離してしまうという問題が発生する。そして、中間結果のサイズの推定結果が、実際の演算処理における中間結果のサイズと乖離した状態でクエリの処理を継続すると、データベースシステムにおいて利用可能なリソースがなくなり、処理が終了しなくなるおそれがある。
【0006】
そこで、本発明はこれらの点に鑑みてなされたものであり、型変換後のデータに対応するヒストグラムを生成することができるヒストグラム生成方法、ヒストグラム生成装置及びヒストグラム生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の第1の態様に係るヒストグラム生成方法は、コンピュータが実行する、データベースシステムにおいて実行される問合せ文において、異なる種類の型に型変換が行われるカラムを特定する特定ステップと、特定された前記カラムに対応する前記型変換が行われる前のデータの度数分布を示し、予め記憶部に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、前記問合せ文の中間結果に含まれる、前記カラムに対応する前記型変換が行われた後のデータの中間結果ヒストグラムとして生成する生成ステップと、を含む。
【0008】
前記特定ステップにおいて、前記コンピュータは、前記問合せ文において、数値に対応する型から文字列に対応する型への型変換が行われるカラムを特定し、前記生成ステップにおいて、前記コンピュータは、特定された前記カラムに対応する前記型変換が行われる前のデータに、桁数が異なるデータが含まれている場合に、前記カラムに対応する全てのデータの型変換前の最大値と最小値とを含むデータ区間における、前記データの数と、前記データが示す値の数とを示す情報を含むバケットを生成し、生成されたバケットに基づいて前記中間結果ヒストグラムを生成してもよい。
【0009】
前記特定ステップにおいて、前記コンピュータは、前記問合せ文において、数値に対応する型から文字列に対応する型への型変換が行われるカラムを特定し、前記生成ステップにおいて、前記コンピュータは、特定された前記カラムに対応する前記型変換が行われる前のデータに、正の値を示すデータと負の値を示すデータとが含まれている場合に、正の値を有する全てのデータに対応する第1バケットを生成するとともに、負の値を有する全てのデータに対応する第2バケットを生成してもよい。
【0010】
前記生成ステップにおいて、前記コンピュータは、前記第1バケット及び前記第2バケットのそれぞれに含まれるデータの最大値及び最小値を、それぞれのバケットに含まれるデータが取り得る値の最大値及び最小値に設定してもよい。
【0011】
前記生成ステップにおいて、前記コンピュータは、前記第1バケットの最大値を前記中間結果ヒストグラムに含まれるデータにおける最大値に設定するとともに、前記第2バケットの最小値を前記中間結果ヒストグラムに含まれるデータの最小値に設定してもよい。
【0012】
前記生成ステップにおいて、前記コンピュータは、前記ヒストグラムに含まれるデータの最大値が正の値である場合には、正の値を有するデータに対応する1以上のバケットである第1バケットにおける最大値を前記ヒストグラムに含まれるデータにおける最大値に設定するとともに、負の値を有するデータに対応する1以上のバケットである第2バケットにおける最小値を前記ヒストグラムに含まれるデータの最小値に設定してもよい。
【0013】
前記生成ステップにおいて、前記コンピュータは、前記ヒストグラムに含まれるデータの最大値が負の値である場合には、当該データの最大値を前記ヒストグラムに含まれるデータにおける最小値に設定するとともに、当該データの最小値を前記ヒストグラムに含まれるデータの最大値に設定してもよい。
【0014】
前記生成ステップにおいて、前記コンピュータは、特定された前記カラムに対応するデータに、正の値を示すデータと負の値を示すデータとが含まれている場合に、前記カラムに対応するデータにおける型変換前の最大値と、型変換前の最小値との比率と、前記カラムに対応する全てのデータの数とに基づいて、正の値を有するデータに対応する1以上のバケットである第1バケット及び負の値を有するデータに対応する1以上のバケットである第2バケットのそれぞれに含まれるデータの数を推定し、推定したデータの数を示す情報を含む前記第1バケット及び前記第2バケットを生成してもよい。
【0015】
前記生成ステップにおいて、前記コンピュータは、前記問合せ文に含まれる前記カラムに対応する絞り込み条件によって絞り込まれた後のデータの数を、生成された前記中間結果ヒストグラムに基づいて推定し、前記記憶部に記憶されているヒストグラムに含まれる複数のバケットのそれぞれに対応するデータの数を、推定したデータの数と、前記絞り込み条件によって絞り込まれる前のデータの数とに基づいて更新することにより、前記問合せ文が実行された後の前記カラムのヒストグラムをさらに生成してもよい。
【0016】
本発明の第2の態様に係るヒストグラム生成装置は、データベースシステムにおいて実行される問合せ文において、異なる種類の型に型変換が行われるカラムを特定する特定部と、特定された前記カラムに対応する前記型変換が行われる前のデータの度数分布を示し、予め記憶部に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、前記問合せ文の中間結果に含まれる、前記カラムに対応する前記型変換が行われた後のデータの中間結果ヒストグラムとして生成する生成部と、を備える。
【0017】
本発明の第3の態様に係るヒストグラム生成プログラムは、コンピュータを、データベースシステムにおいて実行される問合せ文において、異なる種類の型に型変換が行われるカラムを特定する特定部、及び、特定された前記カラムに対応する前記型変換が行われる前のデータの度数分布を示し、予め記憶部に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、前記問合せ文の中間結果に含まれる、前記カラムに対応する前記型変換が行われた後のデータの中間結果ヒストグラムとして生成する生成部、として機能させる。
【発明の効果】
【0018】
本発明によれば、型変換後のデータに対応するヒストグラムを生成することができるという効果を奏する。
【発明を実施するための形態】
【0020】
[データベースシステム1の概要]
図1は、本実施形態に係るデータベースシステム1の概要を示す図である。データベースシステム1は、ユーザ端末2から取得した問合せ文を実行するシステムである。ここで、問合せ文は、データベースを操作するための文字列であり、SQL(Structured Query Language)で記述された命令文である。以下の説明において問合せ文をクエリという。
【0021】
データベースシステム1は、互いに通信可能な1以上のコンピュータによって構成されており、ヒストグラム生成装置として機能する。データベースシステム1は、LANやインターネット等の通信ネットワークを介してユーザ端末2と通信可能に接続されている。
【0022】
データベースシステム1は、ユーザ端末2から、クエリを取得する(
図1の(1))。データベースシステム1は、取得したクエリを解析して型変換が行われるカラムを特定し(
図1の(2))、特定したカラムの型変換前のヒストグラムに基づいて、型変換後のカラムに対応するバケットを生成する(
図1の(3))。ここで、バケットは、カラムに対応するデータの度数分布を示すヒストグラムに含まれている情報である。バケットは、データ区間におけるデータの数を示す情報と、データが示す値の数を示す情報とを含んでいる。
【0023】
データベースシステム1は、生成したバケットに基づいて、クエリの中間結果に対応するヒストグラムである中間結果ヒストグラムを生成する(
図1の(4))。ここで、データベースシステム1は、特定したカラムに対応し、型変換が行われる前のヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、中間結果ヒストグラムとして生成する。このようにすることで、データベースシステム1は、型変換後のデータに対応するヒストグラムを生成することができる。
【0024】
データベースシステム1は、中間結果ヒストグラムに基づいてクエリの処理コストを算出し(
図1の(5))、処理コストに基づいてクエリを実行する(
図1の(6))。中間結果ヒストグラムが、クエリに対応する処理に対応したものとなることから、データベースシステム1は、クエリの処理コストを精度良く計算することができる。
以下、データベースシステム1の構成について説明する。
【0025】
[データベースシステム1の構成例]
図2は、本実施形態に係るデータベースシステム1の構成を示す図である。
データベースシステム1は、記憶部11と、制御部12とを備える。
【0026】
記憶部11は、例えば、ROM(Read Only Memory)及びRAM(Random Access Memory)等である。記憶部11は、データベースシステム1を機能させるための各種プログラムを記憶する。記憶部11は、データベースシステム1の制御部12を、後述する取得部121、特定部122、生成部123、コスト算出部124、及び実行部125として機能させるデータベース管理プログラムを記憶する。ここで、データベース管理プログラムは、制御部12を、取得部121、特定部122、及び生成部123として機能させるヒストグラム生成プログラムと、制御部12を、コスト算出部124及び実行部125として機能させるクエリ実行プログラムとを含んでいてもよい。
【0027】
また、記憶部11は、データベース111を記憶する。データベース111には、1以上のテーブルが格納されている。また、1以上のテーブルのそれぞれには、1以上のカラムが含まれている。1以上のカラムのそれぞれには、カラムに対応するデータの度数分布を示すヒストグラムが設けられている。
【0028】
図3は、本実施形態に係るヒストグラムの一例を示す図である。
図3に示す例は、所定のテーブルに含まれるカラム「A」に対応するヒストグラムである。
図3に示すように、ヒストグラムには、カラムに対応するデータの最小値と最大値とを示す情報が含まれているとともに、1以上のバケットが含まれている。
図3に示す例では、2つのバケット「A1」及び「A2」が含まれていることが確認できる。
【0029】
バケットには、バウンドと、レコード数と、ドメイン数とが含まれている。バウンドは、データが取り得る範囲を示す情報である。レコード数は、データの個数である。ドメイン数は、値の種類の個数である。なお、
図3に示す例では、バケットにデータを示しているが、このデータは、バウンド数、レコード数、及びドメイン数を説明するために示したものであり、実際には含まれていないものとする。
【0030】
制御部12は、例えばCPU(Central Processing Unit)である。制御部12は、記憶部11に記憶されている各種プログラムを実行することにより、データベースシステム1に係る機能を制御する。制御部12は、データベース管理プログラムを実行することにより、取得部121、特定部122、生成部123、コスト算出部124、及び実行部125として機能する。
【0031】
取得部121は、データベース111に対応するクエリをユーザ端末2から取得する。
特定部122は、取得部121が取得したクエリを解析し、異なる種類の型に型変換が行われるカラムを特定する。具体的には、特定部122は、クエリを示す文字列において、型変換を示す演算であるキャスト演算に対応する文字列を特定することにより、異なる種類の型に型変換が行われるカラムを特定する。ここで、異なる種類の型とは、データの大小関係の並び順が異なる型をいう。特定部122は、例えば、数値に対応する型から文字列に対応する型への型変換が行われるカラムを特定する。
【0032】
生成部123は、異なる種類の型に型変換が行われるカラムに対応して記憶部11に記憶されている、型変換が行われる前のヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、クエリの中間結果に含まれる当該カラムの中間結果ヒストグラムとして生成する。
【0033】
具体的には、まず、生成部123は、中間結果ヒストグラムとして、型変換が行われる前のヒストグラムと同じヒストグラムを生成する。続いて、生成部123は、カラムに対応するデータに桁数が異なるデータが含まれる場合に実行する桁違い対応処理と、カラムに対応するデータに負の値のデータが含まれる場合に実行する負値対応処理とを実行することにより、中間結果ヒストグラムに含まれるバケットを更新する。以下、桁違い対応処理及び負値対応処理の詳細について説明する。
【0034】
[桁違い対応処理]
生成部123は、特定されたカラムに対応するデータに、桁数が異なるデータが含まれているか否かを判定する。例えば、生成部123は、中間結果ヒストグラムとして生成されているヒストグラムに含まれる最大値及び最小値を示す情報に基づいて、特定されたカラムに対応するデータに、桁数が異なるデータが含まれているか否かを判定する。
【0035】
生成部123は、桁数が異なるデータが含まれていると判定すると、桁違い対応処理を実行し、中間結果ヒストグラムとして生成されているヒストグラムのバケットを変更する。
【0036】
生成部123は、特定されたカラムに対応する全てのデータの型変換前の最大値と最小値とを含むデータ区間における、データの数と、データが示す値の数とを示す情報を含むバケットを生成する。そして、生成部123は、予め中間結果ヒストグラムとして生成されているヒストグラムに含まれているバケットを消去する。このようにすることで、生成部123は、ヒストグラムの粒度が荒くなるものの、型変換後のデータに対応するヒストグラムを生成することができる。
【0037】
なお、生成部123は、特定されたカラムに対応するデータに、正の値を示すデータと負の値を示すデータとが含まれている場合には、正の値を有する全てのデータに対応する第1バケットを生成するとともに、負の値を有する全てのデータに対応する第2バケットを生成する。
【0038】
例えば、生成部123は、中間結果ヒストグラムとして生成されているヒストグラムに含まれる最大値及び最小値を示す情報に基づいて、特定されたカラムに対応するデータに、正の値を示すデータと負の値を示すデータとが含まれているか否かを判定する。
【0039】
生成部123は、正の値を示すデータと負の値を示すデータとが含まれていると判定すると、第1バケットを生成するとともに、第2バケットを生成する。例えば、中間結果ヒストグラムとして生成されているヒストグラムに、複数のバケットが含まれている場合には、生成部123は、複数のバケットのうち、正の値を有するデータに対応するバケットを集約して第1バケットを生成する。また、生成部123は、複数のバケットのうち、負の値を有するデータに対応するバケットを集約して第2バケットを生成する。ここで、生成部123は、複数のバケットのうち、正のデータと負のデータとの双方を含むバケットが存在する場合には、当該バケットを、第1バケット及び第2バケットに分解するものとする。
【0040】
そして、生成部123は、第1バケット及び第2バケットそれぞれに含まれるデータのバウンド、レコード数、ドメイン数を更新する。例えば、生成部123は、第1バケット及び第2バケットそれぞれに含まれるデータの最大値及び最小値を、それぞれのバケットに含まれるデータが取り得る値の最大値及び最小値に設定し、これらのバケットのバウンドを設定する。例えば、数値型から文字列型に型変換される前の正のデータ(数値型のデータ)の最小値が4、最大値が500である場合、文字列型に型変換された後の第1バケットの最小値は10、最大値は99となる。また、数値型から文字列型に型変換される前の負のデータ(数値型のデータ)の最小値が−500、最大値が−4である場合、文字列型に型変換された後の第2バケットの最小値は−99、最大値は−10となる。
【0041】
また、生成部123は、正の値を有する全てのデータに対応する第1バケットの最大値を、中間結果ヒストグラムに含まれるデータにおける最大値に設定する。また、生成部123は、負の値を有する全てのデータに対応する第2バケットの最小値を、中間結果ヒストグラムに含まれるデータにおける最小値に設定する。例えば、型変換前の正のデータ(数値型のデータ)の最小値が4、最大値が500であり、型変換前の負のデータ(数値型のデータ)の最小値が−500、最大値が−4である場合、中間結果ヒストグラムに含まれるデータにおける最小値は−99、最大値は99となる。
【0042】
また、生成部123は、複数のバケットのうち、正の値を有するデータに対応するバケットを集約する場合に、正の値を有するデータに対応する全てのバケットのレコード数及びドメイン数の合計を算出することにより、第1バケットのレコード数及びドメイン数を設定する。また、生成部123は、複数のバケットのうち、負の値を有するデータに対応するバケットを集約する場合に、負の値を有するデータに対応する全てのバケットのレコード数及びドメイン数の合計を算出することにより、第2バケットのレコード数及びドメイン数を設定する。
【0043】
なお、生成部123は、正の値を示すデータと負の値を示すデータとが含まれていた場合に、型変換前のデータの最大値と、型変換前の最小値との比率と、更新前のバケットの全てのドメイン数(データの数)とに基づいて、第1バケット及び第2バケットのそれぞれのドメイン数を推定し、推定したドメイン数を示す情報を含む第1バケット及び第2バケットを生成してもよい。
【0044】
例えば、更新前のバケットに、100個のデータが含まれており、当該バケットの最大値が9、最小値が−3であったとする。この場合、最大値と最小値との比率は、3対1である。したがって、更新前のバケットから生成された第1バケット及び第2バケットのそれぞれのドメイン数を、当該比率に基づいて推定すると、第1バケットのドメイン数は75個であり、第2バケットのドメイン数は25個である。このようにすることで、生成部123は、第1バケット及び第2バケットのドメイン数を簡易的に推定することができる。
【0045】
[負値対応処理]
生成部123は、特定されたカラムに対応するデータに、負の値を示すデータを含むか否かを判定する。生成部123は、負の値を示すデータを含むと判定すると、負値対応処理を実行し、中間結果ヒストグラムとして生成されているヒストグラムのバケットを変更する。
【0046】
まず、生成部123は、正の値を示すデータと負の値を示すデータとを含むバケットが存在していると判定すると、当該バケットを、正の値を有する第1バケットと、負の値を有する第2バケットとに分解する。
【0047】
続いて、生成部123は、既に生成されている中間結果ヒストグラムに含まれるデータの最大値が正の値であるか否かを判定する。生成部123は、中間結果ヒストグラムに含まれるデータの最大値が正の値である場合には、正の値を有するデータに対応する1以上の第1バケットにおける最大値を中間結果ヒストグラムに含まれるデータにおける最大値に更新する。また、生成部123は、中間結果ヒストグラムに含まれるデータの最小値が負の値である場合には、負の値を有するデータに対応する1以上の第2バケットにおける最大値を中間結果ヒストグラムに含まれるデータの最小値に更新する。
【0048】
また、生成部123は、中間結果ヒストグラムに含まれるデータの最大値が負の値である場合には、当該データの最大値をヒストグラムに含まれるデータにおける最小値に設定するとともに、当該データの最小値をヒストグラムに含まれるデータの最大値に設定する。
【0049】
また、生成部123は、第2バケットにおける最小値と最大値とを入れ替える。例えば、生成部123は、桁違い対応処理を実行したことによって、第2バケットの最小値が−99、最大値が−10となっている場合に、これらの最小値と最大値とを入れ替えて、第2バケットの最小値を−10、最大値を−99とする。
【0050】
また、生成部123は、中間結果ヒストグラムが、桁違い対応処理によって更新されておらず、型変換前のヒストグラムと同じ状態であり、第2バケットが複数存在する場合に、複数の第2バケットの並び順を逆順にする。
【0051】
[絞り込み条件が適用された後のドメイン数の推定]
生成部123は、クエリに含まれる、型変換が行われるカラムに対応する絞り込み条件によって絞り込まれた後のドメイン数(データの数)を、生成した中間結果ヒストグラムに基づいて推定する。
【0052】
クエリにおいて型変換が行われたカラムは、クエリ実行中の絞り込み処理が終了した後に再び型変換が行われる前の型のデータとして保持される。したがって、絞り込み処理が終了した後の当該データのヒストグラムは、型変換が行われる前の型のデータに対応するヒストグラム、すなわち、予め記憶部11に記憶されているヒストグラムに対応している必要がある。
【0053】
そこで、生成部123は、記憶部11に記憶されている、当該カラムに対応する型変換前のヒストグラムに含まれる複数のバケットのそれぞれに対応するデータの数を、中間結果ヒストグラムに基づいて推定したデータの数と、絞り込み条件によって絞り込まれる前のデータの数とに基づいて更新することにより、絞り込み処理が終了した後の当該カラムのヒストグラムをさらに生成する。
【0054】
コスト算出部124は、生成部123が生成した中間結果ヒストグラムに基づいてクエリの処理コストを算出する。例えば、コスト算出部124は、生成部123が生成した中間結果ヒストグラムに基づいてクエリが実行された場合における中間データのサイズを推定する。
【0055】
実行部125は、コスト算出部124が算出した処理コストに基づいてクエリを実行する。具体的には、まず、実行部125は、クエリに対応する全ての演算処理のヒストグラムの作成及びコスト推定が完了すると、推定した処理コストに基づいてクエリ最適化を含む実行計画の最適化を行う。そして、実行部125は、最適化された実行計画に基づいてクエリを実行する。
【0056】
[データベースシステム1における処理の流れ]
続いて、データベースシステム1における処理の流れについて説明する。
図4は、本実施形態に係るデータベースシステム1における処理の流れを示すフローチャートである。
【0057】
まず、データベース111に対応するクエリをユーザ端末2から取得する(S10)。
続いて、特定部122は、取得されたクエリに基づいて、型変換が行われるカラムを特定する(S20)。
【0058】
続いて、生成部123は、中間結果ヒストグラムとして、型変換が行われる前のヒストグラムと同じヒストグラムを生成する(S30)。
続いて、生成部123は、特定したカラムのデータが桁違いのデータを含んでいるか否かを判定する(S40)。生成部123は、桁違いのデータを含んでいると判定すると、S50に処理を移し、桁違い対応処理を実行する。桁違い対応処理の詳細については後述する。生成部123は、桁違いのデータを含んでいないと判定すると、S60に処理を移す。
【0059】
続いて、生成部123は、特定したカラムのデータが負の値のデータを含んでいるか否かを判定する(S60)。生成部123は、負の値のデータを含んでいると判定すると、S70に処理を移し、負値対応処理を実行する。負値対応処理の詳細については後述する。生成部123は、負の値のデータを含んでいないと判定すると、S80に処理を移す。
【0060】
続いて、生成部123は、カラムの型を修正する(S80)。続いて、生成部123は、特定部122が特定した全てのカラムの型を修正したか否かを判定する(S90)。生成部123は、全てのカラムの型を修正したと判定すると、S100に処理を移し、全てのカラムの型を修正していないと判定すると、S30に処理を移す。
【0061】
続いて、コスト算出部124、生成部123が生成した中間結果ヒストグラムに基づいてクエリの処理コストを算出する(S100)。
続いて、生成部123は、型戻し処理を実行する(S110)。型戻し処理の詳細については後述する。
続いて、実行部125は、コスト算出部124が算出した処理コストに基づいてクエリを実行する(S120)。
【0062】
[桁違い対応処理における処理の流れ]
続いて、桁違い対応処理における処理の流れについて説明する。
図5は、本実施形態に係る桁違い対応処理における処理の流れを示すフローチャートである。
【0063】
まず、生成部123は、特定部122が特定したカラムに対応するヒストグラムにおいて、正の値及び負の値に対応するバケット、すなわち、正の値のデータ及び負の値のデータを含むバケットがあるか否かを判定する(S51)。
【0064】
生成部123は、正の値及び負の値に対応するバケットがあると判定すると、S52に処理を移し、当該バケットを正の値のデータに対応する第1バケット、及び負の値のデータに対応する第2バケットに分解する。生成部123は、正の値及び負の値に対応するバケットがないと判定すると、S53に処理を移す。
【0065】
続いて、生成部123は、正の値のデータを第1バケットに集約し(S53)、負の値のデータを第2バケットに集約する(S54)。
続いて、生成部123は、カラムの最大値及び最小値を更新する(S55)。具体的には、生成部123は、第1バケットの最大値を、カラムの最大値に設定し、第2バケットの最大値を、カラムの最小値に設定する。
【0066】
[負値対応処理における処理の流れ]
続いて、負値対応処理における処理の流れについて説明する。
図6は、本実施形態に係る負値対応処理における処理の流れを示すフローチャートである。
【0067】
まず、生成部123は、特定部122が特定したカラムに対応するヒストグラムにおいて、正の値及び負の値に対応するバケット、すなわち、正の値のデータ及び負の値のデータを含むバケットがあるか否かを判定する(S71)。
【0068】
生成部123は、正の値及び負の値に対応するバケットがあると判定すると、S72に処理を移し、当該バケットを正の値のデータに対応する第1バケット、及び負の値のデータに対応する第2バケットに分解する。生成部123は、正の値及び負の値に対応するバケットがないと判定すると、S73に処理を移す。
【0069】
続いて、生成部123は、特定部122が特定したカラムに対応するデータに、正の値のデータが存在するか否かを判定する(S73)。生成部123は、正の値のデータが存在すると判定すると、S74に処理を移し、型変換前の負の値のデータの最大値を、カラムのデータの最小値に設定する。生成部123は、正の値のデータが存在しないと判定すると、S75に処理を移し、カラムに対応するデータの最大値と、最小値とを入れ替える。
【0070】
続いて、生成部123は、負の値のデータに対応する第2バケットの最大値と最小値とを入れ替える(S76)。
続いて、生成部123は、第2バケットが複数存在する場合に、複数の第2バケットの順序を逆順化する(S77)。
【0071】
[型戻し処理における処理の流れ]
続いて、型戻し処理における処理の流れについて説明する。
図7は、本実施形態に係る型戻し処理における処理の流れを示すフローチャートである。
【0072】
まず、生成部123は、クエリに含まれる条件式に型変換処理が含まれるか否かを判定する(S111)。生成部123は、条件式に型変換処理が含まれていない場合には、S112に処理を移し、条件式に対応する処理を、型変換前のヒストグラムに適用することにより、ヒストグラムを更新する。
【0073】
生成部123は、条件式に型変換処理が含まれている場合には、型変換対象のカラムに対して型変換を実行する(S113)。
続いて、生成部123は、型変換後のカラムに対して条件式が示す演算を実行する(S114)。
【0074】
続いて、生成部123は、演算の実行前後のデータ数に基づいて、カラムに対応するデータの選択率を算出し(S115)、当該選択率に基づいて、型変換前のヒストグラムを更新する(S116)。
【0075】
続いて、生成部123は、未処理の条件式が存在するか否かを判定する(S117)。生成部123は、未処理の条件式が存在する場合には、S111に処理を移し、未処理の条件式が存在しない場合には、本フローチャートの処理を終了する。
【0076】
[本実施形態における効果]
以上のとおり、本実施形態に係るデータベースシステム1は、取得したクエリにおいて、異なる種類の型に型変換が行われるカラムに対応する型変換が行われる前のデータの度数分布を示し、予め記憶部11に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、クエリの中間結果に含まれるカラムの中間結果ヒストグラムとして生成する。これにより、データベースシステム1は、粒度が粗いものの、型変換に対応してヒストグラムやバケットの最大値及び最小値を変換することによって、型変換後のデータに対応する中間結果ヒストグラムを生成し、当該中間結果ヒストグラムに基づいてクエリの処理コストを精度良く算出することができる。
【0077】
また、データベースシステム1は、中間結果ヒストグラムに基づいてクエリの処理コストを算出した後に型戻し処理を実行し、絞り込み条件が適用された後のカラムのヒストグラムをさらに生成する。このようにすることで、データベースシステム1は、絞り込み処理が行われた後に発生する処理に対応する処理コストの推定精度を向上させることができる。
【0078】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更又は改良を加えることが可能であることが当業者に明らかである。例えば、上述の複数の実施形態を組み合わせてもよい。また、特に、装置の分散・統合の具体的な実施形態は以上に図示するものに限られず、その全部又は一部について、種々の付加等に応じて、又は、機能負荷に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。