(57)【要約】【課題】型変換後のデータに対応するヒストグラムを生成する。【解決手段】データベースシステム１は、問合せ文において、異なる種類の型に型変換が行われるカラムを特定する特定部１２２と、特定されたカラムに対応する型変換が行われる前のデータに桁数が異なるデータが含まれる場合に、型変換が行われる前のカラムのデータの度数分布を示し、予め記憶部１１に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、問合せ文の中間結果に含まれる、当該カラムに対応する型変換が行われた後のデータの中間結果ヒストグラムとして生成する生成部１２３とを備える。【選択図】図２
2018206074.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが実行する、
データベースシステムにおいて実行される問合せ文において、異なる種類の型に型変換が行われるカラムを特定する特定ステップと、
特定された前記カラムに対応する前記型変換が行われる前のデータの度数分布を示し、予め記憶部に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、前記問合せ文の中間結果に含まれる、前記カラムに対応する前記型変換が行われた後のデータの中間結果ヒストグラムとして生成する生成ステップと、
を含むヒストグラム生成方法。
【請求項２】
前記特定ステップにおいて、前記コンピュータは、前記問合せ文において、数値に対応する型から文字列に対応する型への型変換が行われるカラムを特定し、
前記生成ステップにおいて、前記コンピュータは、特定された前記カラムに対応する前記型変換が行われる前のデータに、桁数が異なるデータが含まれている場合に、前記カラムに対応する全てのデータの型変換前の最大値と最小値とを含むデータ区間における、前記データの数と、前記データが示す値の数とを示す情報を含むバケットを生成し、生成されたバケットに基づいて前記中間結果ヒストグラムを生成する、
請求項１に記載のヒストグラム生成方法。
【請求項３】
前記特定ステップにおいて、前記コンピュータは、前記問合せ文において、数値に対応する型から文字列に対応する型への型変換が行われるカラムを特定し、
前記生成ステップにおいて、前記コンピュータは、特定された前記カラムに対応する前記型変換が行われる前のデータに、正の値を示すデータと負の値を示すデータとが含まれている場合に、正の値を有する全てのデータに対応する第１バケットを生成するとともに、負の値を有する全てのデータに対応する第２バケットを生成する、
請求項１又は２に記載のヒストグラム生成方法。
【請求項４】
前記生成ステップにおいて、前記コンピュータは、前記第１バケット及び前記第２バケットのそれぞれに含まれるデータの最大値及び最小値を、それぞれのバケットに含まれるデータが取り得る値の最大値及び最小値に設定する、
請求項３に記載のヒストグラム生成方法。
【請求項５】
前記生成ステップにおいて、前記コンピュータは、前記第１バケットの最大値を前記中間結果ヒストグラムに含まれるデータにおける最大値に設定するとともに、前記第２バケットの最小値を前記中間結果ヒストグラムに含まれるデータの最小値に設定する、
請求項４に記載のヒストグラム生成方法。
【請求項６】
前記生成ステップにおいて、前記コンピュータは、前記ヒストグラムに含まれるデータの最大値が正の値である場合には、正の値を有するデータに対応する１以上のバケットである第１バケットにおける最大値を前記ヒストグラムに含まれるデータにおける最大値に設定するとともに、負の値を有するデータに対応する１以上のバケットである第２バケットにおける最小値を前記ヒストグラムに含まれるデータの最小値に設定する、
請求項１から５のいずれか１項に記載のヒストグラム生成方法。
【請求項７】
前記生成ステップにおいて、前記コンピュータは、前記ヒストグラムに含まれるデータの最大値が負の値である場合には、当該データの最大値を前記ヒストグラムに含まれるデータにおける最小値に設定するとともに、当該データの最小値を前記ヒストグラムに含まれるデータの最大値に設定する、
請求項１から６のいずれか１項に記載のヒストグラム生成方法。
【請求項８】
前記生成ステップにおいて、前記コンピュータは、特定された前記カラムに対応するデータに、正の値を示すデータと負の値を示すデータとが含まれている場合に、前記カラムに対応するデータにおける型変換前の最大値と、型変換前の最小値との比率と、前記カラムに対応する全てのデータの数とに基づいて、正の値を有するデータに対応する１以上のバケットである第１バケット及び負の値を有するデータに対応する１以上のバケットである第２バケットのそれぞれに含まれるデータの数を推定し、推定したデータの数を示す情報を含む前記第１バケット及び前記第２バケットを生成する、
請求項３から７のいずれか１項に記載のヒストグラム生成方法。
【請求項９】
前記生成ステップにおいて、前記コンピュータは、前記問合せ文に含まれる前記カラムに対応する絞り込み条件によって絞り込まれた後のデータの数を、生成された前記中間結果ヒストグラムに基づいて推定し、前記記憶部に記憶されているヒストグラムに含まれる複数のバケットのそれぞれに対応するデータの数を、推定したデータの数と、前記絞り込み条件によって絞り込まれる前のデータの数とに基づいて更新することにより、前記問合せ文が実行された後の前記カラムのヒストグラムをさらに生成する、
請求項１から８のいずれか１項に記載のヒストグラム生成方法。
【請求項１０】
データベースシステムにおいて実行される問合せ文において、異なる種類の型に型変換が行われるカラムを特定する特定部と、
特定された前記カラムに対応する前記型変換が行われる前のデータの度数分布を示し、予め記憶部に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、前記問合せ文の中間結果に含まれる、前記カラムに対応する前記型変換が行われた後のデータの中間結果ヒストグラムとして生成する生成部と、
を備えるヒストグラム生成装置。
【請求項１１】
コンピュータを、
データベースシステムにおいて実行される問合せ文において、異なる種類の型に型変換が行われるカラムを特定する特定部、及び、
特定された前記カラムに対応する前記型変換が行われる前のデータの度数分布を示し、予め記憶部に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、前記問合せ文の中間結果に含まれる、前記カラムに対応する前記型変換が行われた後のデータの中間結果ヒストグラムとして生成する生成部、
として機能させるヒストグラム生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースに格納されているテーブルに含まれるデータの分布を示すヒストグラムを生成するヒストグラム生成方法、ヒストグラム生成装置及びヒストグラム生成プログラムに関する。
【背景技術】
【０００２】
データベースシステムでは、データベースを操作する問合せ文の最適化等の実行計画の作成において、問合せ文の処理コストを利用することにより、問合せ文に対応する処理の実行時間を短縮することができる。従来、処理コストの推定に、データベースに格納されているテーブルに含まれるデータの分布を示すヒストグラムを利用する手法が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−０９５５６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ヒストグラムは、テーブルに含まれる複数のカラムのそれぞれに対応して、１以上のバケットを含んでいる。バケットは、データ区間における、データの数とデータが示す値の数とを示す情報を含む。データベースシステムは、ヒストグラムに対して、問合せ文における演算処理を適用することにより、演算処理後のヒストグラム（中間ヒストグラム）を作成し、クエリの中間結果のサイズを推定することができる。
【０００５】
しかしながら、問合せ文においてカラムに対して型変換が発生した場合には、型変換後のデータと、ヒストグラムとが対応しなくなる。このため、ヒストグラムを用いた中間結果のサイズの推定結果が、実際の演算処理における中間結果のサイズと乖離してしまうという問題が発生する。そして、中間結果のサイズの推定結果が、実際の演算処理における中間結果のサイズと乖離した状態でクエリの処理を継続すると、データベースシステムにおいて利用可能なリソースがなくなり、処理が終了しなくなるおそれがある。
【０００６】
そこで、本発明はこれらの点に鑑みてなされたものであり、型変換後のデータに対応するヒストグラムを生成することができるヒストグラム生成方法、ヒストグラム生成装置及びヒストグラム生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の第１の態様に係るヒストグラム生成方法は、コンピュータが実行する、データベースシステムにおいて実行される問合せ文において、異なる種類の型に型変換が行われるカラムを特定する特定ステップと、特定された前記カラムに対応する前記型変換が行われる前のデータの度数分布を示し、予め記憶部に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、前記問合せ文の中間結果に含まれる、前記カラムに対応する前記型変換が行われた後のデータの中間結果ヒストグラムとして生成する生成ステップと、を含む。
【０００８】
前記特定ステップにおいて、前記コンピュータは、前記問合せ文において、数値に対応する型から文字列に対応する型への型変換が行われるカラムを特定し、前記生成ステップにおいて、前記コンピュータは、特定された前記カラムに対応する前記型変換が行われる前のデータに、桁数が異なるデータが含まれている場合に、前記カラムに対応する全てのデータの型変換前の最大値と最小値とを含むデータ区間における、前記データの数と、前記データが示す値の数とを示す情報を含むバケットを生成し、生成されたバケットに基づいて前記中間結果ヒストグラムを生成してもよい。
【０００９】
前記特定ステップにおいて、前記コンピュータは、前記問合せ文において、数値に対応する型から文字列に対応する型への型変換が行われるカラムを特定し、前記生成ステップにおいて、前記コンピュータは、特定された前記カラムに対応する前記型変換が行われる前のデータに、正の値を示すデータと負の値を示すデータとが含まれている場合に、正の値を有する全てのデータに対応する第１バケットを生成するとともに、負の値を有する全てのデータに対応する第２バケットを生成してもよい。
【００１０】
前記生成ステップにおいて、前記コンピュータは、前記第１バケット及び前記第２バケットのそれぞれに含まれるデータの最大値及び最小値を、それぞれのバケットに含まれるデータが取り得る値の最大値及び最小値に設定してもよい。
【００１１】
前記生成ステップにおいて、前記コンピュータは、前記第１バケットの最大値を前記中間結果ヒストグラムに含まれるデータにおける最大値に設定するとともに、前記第２バケットの最小値を前記中間結果ヒストグラムに含まれるデータの最小値に設定してもよい。
【００１２】
前記生成ステップにおいて、前記コンピュータは、前記ヒストグラムに含まれるデータの最大値が正の値である場合には、正の値を有するデータに対応する１以上のバケットである第１バケットにおける最大値を前記ヒストグラムに含まれるデータにおける最大値に設定するとともに、負の値を有するデータに対応する１以上のバケットである第２バケットにおける最小値を前記ヒストグラムに含まれるデータの最小値に設定してもよい。
【００１３】
前記生成ステップにおいて、前記コンピュータは、前記ヒストグラムに含まれるデータの最大値が負の値である場合には、当該データの最大値を前記ヒストグラムに含まれるデータにおける最小値に設定するとともに、当該データの最小値を前記ヒストグラムに含まれるデータの最大値に設定してもよい。
【００１４】
前記生成ステップにおいて、前記コンピュータは、特定された前記カラムに対応するデータに、正の値を示すデータと負の値を示すデータとが含まれている場合に、前記カラムに対応するデータにおける型変換前の最大値と、型変換前の最小値との比率と、前記カラムに対応する全てのデータの数とに基づいて、正の値を有するデータに対応する１以上のバケットである第１バケット及び負の値を有するデータに対応する１以上のバケットである第２バケットのそれぞれに含まれるデータの数を推定し、推定したデータの数を示す情報を含む前記第１バケット及び前記第２バケットを生成してもよい。
【００１５】
前記生成ステップにおいて、前記コンピュータは、前記問合せ文に含まれる前記カラムに対応する絞り込み条件によって絞り込まれた後のデータの数を、生成された前記中間結果ヒストグラムに基づいて推定し、前記記憶部に記憶されているヒストグラムに含まれる複数のバケットのそれぞれに対応するデータの数を、推定したデータの数と、前記絞り込み条件によって絞り込まれる前のデータの数とに基づいて更新することにより、前記問合せ文が実行された後の前記カラムのヒストグラムをさらに生成してもよい。
【００１６】
本発明の第２の態様に係るヒストグラム生成装置は、データベースシステムにおいて実行される問合せ文において、異なる種類の型に型変換が行われるカラムを特定する特定部と、特定された前記カラムに対応する前記型変換が行われる前のデータの度数分布を示し、予め記憶部に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、前記問合せ文の中間結果に含まれる、前記カラムに対応する前記型変換が行われた後のデータの中間結果ヒストグラムとして生成する生成部と、を備える。
【００１７】
本発明の第３の態様に係るヒストグラム生成プログラムは、コンピュータを、データベースシステムにおいて実行される問合せ文において、異なる種類の型に型変換が行われるカラムを特定する特定部、及び、特定された前記カラムに対応する前記型変換が行われる前のデータの度数分布を示し、予め記憶部に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、前記問合せ文の中間結果に含まれる、前記カラムに対応する前記型変換が行われた後のデータの中間結果ヒストグラムとして生成する生成部、として機能させる。
【発明の効果】
【００１８】
本発明によれば、型変換後のデータに対応するヒストグラムを生成することができるという効果を奏する。
【図面の簡単な説明】
【００１９】
【図１】本実施形態に係るデータベースシステムの概要を示す図である。
【図２】本実施形態に係るデータベースシステムの構成を示す図である。
【図３】本実施形態に係るヒストグラムの一例を示す図である。
【図４】本実施形態に係るデータベースシステムにおける処理の流れを示すフローチャートである。
【図５】本実施形態に係る桁違い対応処理における処理の流れを示すフローチャートである。
【図６】本実施形態に係る負値対応処理における処理の流れを示すフローチャートである。
【図７】本実施形態に係る型戻し処理における処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００２０】
［データベースシステム１の概要］
図１は、本実施形態に係るデータベースシステム１の概要を示す図である。データベースシステム１は、ユーザ端末２から取得した問合せ文を実行するシステムである。ここで、問合せ文は、データベースを操作するための文字列であり、ＳＱＬ（Structured Query Language）で記述された命令文である。以下の説明において問合せ文をクエリという。
【００２１】
データベースシステム１は、互いに通信可能な１以上のコンピュータによって構成されており、ヒストグラム生成装置として機能する。データベースシステム１は、ＬＡＮやインターネット等の通信ネットワークを介してユーザ端末２と通信可能に接続されている。
【００２２】
データベースシステム１は、ユーザ端末２から、クエリを取得する（図１の（１））。データベースシステム１は、取得したクエリを解析して型変換が行われるカラムを特定し（図１の（２））、特定したカラムの型変換前のヒストグラムに基づいて、型変換後のカラムに対応するバケットを生成する（図１の（３））。ここで、バケットは、カラムに対応するデータの度数分布を示すヒストグラムに含まれている情報である。バケットは、データ区間におけるデータの数を示す情報と、データが示す値の数を示す情報とを含んでいる。
【００２３】
データベースシステム１は、生成したバケットに基づいて、クエリの中間結果に対応するヒストグラムである中間結果ヒストグラムを生成する（図１の（４））。ここで、データベースシステム１は、特定したカラムに対応し、型変換が行われる前のヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、中間結果ヒストグラムとして生成する。このようにすることで、データベースシステム１は、型変換後のデータに対応するヒストグラムを生成することができる。
【００２４】
データベースシステム１は、中間結果ヒストグラムに基づいてクエリの処理コストを算出し（図１の（５））、処理コストに基づいてクエリを実行する（図１の（６））。中間結果ヒストグラムが、クエリに対応する処理に対応したものとなることから、データベースシステム１は、クエリの処理コストを精度良く計算することができる。
以下、データベースシステム１の構成について説明する。
【００２５】
［データベースシステム１の構成例］
図２は、本実施形態に係るデータベースシステム１の構成を示す図である。
データベースシステム１は、記憶部１１と、制御部１２とを備える。
【００２６】
記憶部１１は、例えば、ＲＯＭ（Read Only Memory）及びＲＡＭ（Random Access Memory）等である。記憶部１１は、データベースシステム１を機能させるための各種プログラムを記憶する。記憶部１１は、データベースシステム１の制御部１２を、後述する取得部１２１、特定部１２２、生成部１２３、コスト算出部１２４、及び実行部１２５として機能させるデータベース管理プログラムを記憶する。ここで、データベース管理プログラムは、制御部１２を、取得部１２１、特定部１２２、及び生成部１２３として機能させるヒストグラム生成プログラムと、制御部１２を、コスト算出部１２４及び実行部１２５として機能させるクエリ実行プログラムとを含んでいてもよい。
【００２７】
また、記憶部１１は、データベース１１１を記憶する。データベース１１１には、１以上のテーブルが格納されている。また、１以上のテーブルのそれぞれには、１以上のカラムが含まれている。１以上のカラムのそれぞれには、カラムに対応するデータの度数分布を示すヒストグラムが設けられている。
【００２８】
図３は、本実施形態に係るヒストグラムの一例を示す図である。図３に示す例は、所定のテーブルに含まれるカラム「Ａ」に対応するヒストグラムである。図３に示すように、ヒストグラムには、カラムに対応するデータの最小値と最大値とを示す情報が含まれているとともに、１以上のバケットが含まれている。図３に示す例では、２つのバケット「Ａ１」及び「Ａ２」が含まれていることが確認できる。
【００２９】
バケットには、バウンドと、レコード数と、ドメイン数とが含まれている。バウンドは、データが取り得る範囲を示す情報である。レコード数は、データの個数である。ドメイン数は、値の種類の個数である。なお、図３に示す例では、バケットにデータを示しているが、このデータは、バウンド数、レコード数、及びドメイン数を説明するために示したものであり、実際には含まれていないものとする。
【００３０】
制御部１２は、例えばＣＰＵ（Central Processing Unit）である。制御部１２は、記憶部１１に記憶されている各種プログラムを実行することにより、データベースシステム１に係る機能を制御する。制御部１２は、データベース管理プログラムを実行することにより、取得部１２１、特定部１２２、生成部１２３、コスト算出部１２４、及び実行部１２５として機能する。
【００３１】
取得部１２１は、データベース１１１に対応するクエリをユーザ端末２から取得する。
特定部１２２は、取得部１２１が取得したクエリを解析し、異なる種類の型に型変換が行われるカラムを特定する。具体的には、特定部１２２は、クエリを示す文字列において、型変換を示す演算であるキャスト演算に対応する文字列を特定することにより、異なる種類の型に型変換が行われるカラムを特定する。ここで、異なる種類の型とは、データの大小関係の並び順が異なる型をいう。特定部１２２は、例えば、数値に対応する型から文字列に対応する型への型変換が行われるカラムを特定する。
【００３２】
生成部１２３は、異なる種類の型に型変換が行われるカラムに対応して記憶部１１に記憶されている、型変換が行われる前のヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、クエリの中間結果に含まれる当該カラムの中間結果ヒストグラムとして生成する。
【００３３】
具体的には、まず、生成部１２３は、中間結果ヒストグラムとして、型変換が行われる前のヒストグラムと同じヒストグラムを生成する。続いて、生成部１２３は、カラムに対応するデータに桁数が異なるデータが含まれる場合に実行する桁違い対応処理と、カラムに対応するデータに負の値のデータが含まれる場合に実行する負値対応処理とを実行することにより、中間結果ヒストグラムに含まれるバケットを更新する。以下、桁違い対応処理及び負値対応処理の詳細について説明する。
【００３４】
［桁違い対応処理］
生成部１２３は、特定されたカラムに対応するデータに、桁数が異なるデータが含まれているか否かを判定する。例えば、生成部１２３は、中間結果ヒストグラムとして生成されているヒストグラムに含まれる最大値及び最小値を示す情報に基づいて、特定されたカラムに対応するデータに、桁数が異なるデータが含まれているか否かを判定する。
【００３５】
生成部１２３は、桁数が異なるデータが含まれていると判定すると、桁違い対応処理を実行し、中間結果ヒストグラムとして生成されているヒストグラムのバケットを変更する。
【００３６】
生成部１２３は、特定されたカラムに対応する全てのデータの型変換前の最大値と最小値とを含むデータ区間における、データの数と、データが示す値の数とを示す情報を含むバケットを生成する。そして、生成部１２３は、予め中間結果ヒストグラムとして生成されているヒストグラムに含まれているバケットを消去する。このようにすることで、生成部１２３は、ヒストグラムの粒度が荒くなるものの、型変換後のデータに対応するヒストグラムを生成することができる。
【００３７】
なお、生成部１２３は、特定されたカラムに対応するデータに、正の値を示すデータと負の値を示すデータとが含まれている場合には、正の値を有する全てのデータに対応する第１バケットを生成するとともに、負の値を有する全てのデータに対応する第２バケットを生成する。
【００３８】
例えば、生成部１２３は、中間結果ヒストグラムとして生成されているヒストグラムに含まれる最大値及び最小値を示す情報に基づいて、特定されたカラムに対応するデータに、正の値を示すデータと負の値を示すデータとが含まれているか否かを判定する。
【００３９】
生成部１２３は、正の値を示すデータと負の値を示すデータとが含まれていると判定すると、第１バケットを生成するとともに、第２バケットを生成する。例えば、中間結果ヒストグラムとして生成されているヒストグラムに、複数のバケットが含まれている場合には、生成部１２３は、複数のバケットのうち、正の値を有するデータに対応するバケットを集約して第１バケットを生成する。また、生成部１２３は、複数のバケットのうち、負の値を有するデータに対応するバケットを集約して第２バケットを生成する。ここで、生成部１２３は、複数のバケットのうち、正のデータと負のデータとの双方を含むバケットが存在する場合には、当該バケットを、第１バケット及び第２バケットに分解するものとする。
【００４０】
そして、生成部１２３は、第１バケット及び第２バケットそれぞれに含まれるデータのバウンド、レコード数、ドメイン数を更新する。例えば、生成部１２３は、第１バケット及び第２バケットそれぞれに含まれるデータの最大値及び最小値を、それぞれのバケットに含まれるデータが取り得る値の最大値及び最小値に設定し、これらのバケットのバウンドを設定する。例えば、数値型から文字列型に型変換される前の正のデータ（数値型のデータ）の最小値が４、最大値が５００である場合、文字列型に型変換された後の第１バケットの最小値は１０、最大値は９９となる。また、数値型から文字列型に型変換される前の負のデータ（数値型のデータ）の最小値が−５００、最大値が−４である場合、文字列型に型変換された後の第２バケットの最小値は−９９、最大値は−１０となる。
【００４１】
また、生成部１２３は、正の値を有する全てのデータに対応する第１バケットの最大値を、中間結果ヒストグラムに含まれるデータにおける最大値に設定する。また、生成部１２３は、負の値を有する全てのデータに対応する第２バケットの最小値を、中間結果ヒストグラムに含まれるデータにおける最小値に設定する。例えば、型変換前の正のデータ（数値型のデータ）の最小値が４、最大値が５００であり、型変換前の負のデータ（数値型のデータ）の最小値が−５００、最大値が−４である場合、中間結果ヒストグラムに含まれるデータにおける最小値は−９９、最大値は９９となる。
【００４２】
また、生成部１２３は、複数のバケットのうち、正の値を有するデータに対応するバケットを集約する場合に、正の値を有するデータに対応する全てのバケットのレコード数及びドメイン数の合計を算出することにより、第１バケットのレコード数及びドメイン数を設定する。また、生成部１２３は、複数のバケットのうち、負の値を有するデータに対応するバケットを集約する場合に、負の値を有するデータに対応する全てのバケットのレコード数及びドメイン数の合計を算出することにより、第２バケットのレコード数及びドメイン数を設定する。
【００４３】
なお、生成部１２３は、正の値を示すデータと負の値を示すデータとが含まれていた場合に、型変換前のデータの最大値と、型変換前の最小値との比率と、更新前のバケットの全てのドメイン数（データの数）とに基づいて、第１バケット及び第２バケットのそれぞれのドメイン数を推定し、推定したドメイン数を示す情報を含む第１バケット及び第２バケットを生成してもよい。
【００４４】
例えば、更新前のバケットに、１００個のデータが含まれており、当該バケットの最大値が９、最小値が−３であったとする。この場合、最大値と最小値との比率は、３対１である。したがって、更新前のバケットから生成された第１バケット及び第２バケットのそれぞれのドメイン数を、当該比率に基づいて推定すると、第１バケットのドメイン数は７５個であり、第２バケットのドメイン数は２５個である。このようにすることで、生成部１２３は、第１バケット及び第２バケットのドメイン数を簡易的に推定することができる。
【００４５】
［負値対応処理］
生成部１２３は、特定されたカラムに対応するデータに、負の値を示すデータを含むか否かを判定する。生成部１２３は、負の値を示すデータを含むと判定すると、負値対応処理を実行し、中間結果ヒストグラムとして生成されているヒストグラムのバケットを変更する。
【００４６】
まず、生成部１２３は、正の値を示すデータと負の値を示すデータとを含むバケットが存在していると判定すると、当該バケットを、正の値を有する第１バケットと、負の値を有する第２バケットとに分解する。
【００４７】
続いて、生成部１２３は、既に生成されている中間結果ヒストグラムに含まれるデータの最大値が正の値であるか否かを判定する。生成部１２３は、中間結果ヒストグラムに含まれるデータの最大値が正の値である場合には、正の値を有するデータに対応する１以上の第１バケットにおける最大値を中間結果ヒストグラムに含まれるデータにおける最大値に更新する。また、生成部１２３は、中間結果ヒストグラムに含まれるデータの最小値が負の値である場合には、負の値を有するデータに対応する１以上の第２バケットにおける最大値を中間結果ヒストグラムに含まれるデータの最小値に更新する。
【００４８】
また、生成部１２３は、中間結果ヒストグラムに含まれるデータの最大値が負の値である場合には、当該データの最大値をヒストグラムに含まれるデータにおける最小値に設定するとともに、当該データの最小値をヒストグラムに含まれるデータの最大値に設定する。
【００４９】
また、生成部１２３は、第２バケットにおける最小値と最大値とを入れ替える。例えば、生成部１２３は、桁違い対応処理を実行したことによって、第２バケットの最小値が−９９、最大値が−１０となっている場合に、これらの最小値と最大値とを入れ替えて、第２バケットの最小値を−１０、最大値を−９９とする。
【００５０】
また、生成部１２３は、中間結果ヒストグラムが、桁違い対応処理によって更新されておらず、型変換前のヒストグラムと同じ状態であり、第２バケットが複数存在する場合に、複数の第２バケットの並び順を逆順にする。
【００５１】
［絞り込み条件が適用された後のドメイン数の推定］
生成部１２３は、クエリに含まれる、型変換が行われるカラムに対応する絞り込み条件によって絞り込まれた後のドメイン数（データの数）を、生成した中間結果ヒストグラムに基づいて推定する。
【００５２】
クエリにおいて型変換が行われたカラムは、クエリ実行中の絞り込み処理が終了した後に再び型変換が行われる前の型のデータとして保持される。したがって、絞り込み処理が終了した後の当該データのヒストグラムは、型変換が行われる前の型のデータに対応するヒストグラム、すなわち、予め記憶部１１に記憶されているヒストグラムに対応している必要がある。
【００５３】
そこで、生成部１２３は、記憶部１１に記憶されている、当該カラムに対応する型変換前のヒストグラムに含まれる複数のバケットのそれぞれに対応するデータの数を、中間結果ヒストグラムに基づいて推定したデータの数と、絞り込み条件によって絞り込まれる前のデータの数とに基づいて更新することにより、絞り込み処理が終了した後の当該カラムのヒストグラムをさらに生成する。
【００５４】
コスト算出部１２４は、生成部１２３が生成した中間結果ヒストグラムに基づいてクエリの処理コストを算出する。例えば、コスト算出部１２４は、生成部１２３が生成した中間結果ヒストグラムに基づいてクエリが実行された場合における中間データのサイズを推定する。
【００５５】
実行部１２５は、コスト算出部１２４が算出した処理コストに基づいてクエリを実行する。具体的には、まず、実行部１２５は、クエリに対応する全ての演算処理のヒストグラムの作成及びコスト推定が完了すると、推定した処理コストに基づいてクエリ最適化を含む実行計画の最適化を行う。そして、実行部１２５は、最適化された実行計画に基づいてクエリを実行する。
【００５６】
［データベースシステム１における処理の流れ］
続いて、データベースシステム１における処理の流れについて説明する。図４は、本実施形態に係るデータベースシステム１における処理の流れを示すフローチャートである。
【００５７】
まず、データベース１１１に対応するクエリをユーザ端末２から取得する（Ｓ１０）。
続いて、特定部１２２は、取得されたクエリに基づいて、型変換が行われるカラムを特定する（Ｓ２０）。
【００５８】
続いて、生成部１２３は、中間結果ヒストグラムとして、型変換が行われる前のヒストグラムと同じヒストグラムを生成する（Ｓ３０）。
続いて、生成部１２３は、特定したカラムのデータが桁違いのデータを含んでいるか否かを判定する（Ｓ４０）。生成部１２３は、桁違いのデータを含んでいると判定すると、Ｓ５０に処理を移し、桁違い対応処理を実行する。桁違い対応処理の詳細については後述する。生成部１２３は、桁違いのデータを含んでいないと判定すると、Ｓ６０に処理を移す。
【００５９】
続いて、生成部１２３は、特定したカラムのデータが負の値のデータを含んでいるか否かを判定する（Ｓ６０）。生成部１２３は、負の値のデータを含んでいると判定すると、Ｓ７０に処理を移し、負値対応処理を実行する。負値対応処理の詳細については後述する。生成部１２３は、負の値のデータを含んでいないと判定すると、Ｓ８０に処理を移す。
【００６０】
続いて、生成部１２３は、カラムの型を修正する（Ｓ８０）。続いて、生成部１２３は、特定部１２２が特定した全てのカラムの型を修正したか否かを判定する（Ｓ９０）。生成部１２３は、全てのカラムの型を修正したと判定すると、Ｓ１００に処理を移し、全てのカラムの型を修正していないと判定すると、Ｓ３０に処理を移す。
【００６１】
続いて、コスト算出部１２４、生成部１２３が生成した中間結果ヒストグラムに基づいてクエリの処理コストを算出する（Ｓ１００）。
続いて、生成部１２３は、型戻し処理を実行する（Ｓ１１０）。型戻し処理の詳細については後述する。
続いて、実行部１２５は、コスト算出部１２４が算出した処理コストに基づいてクエリを実行する（Ｓ１２０）。
【００６２】
［桁違い対応処理における処理の流れ］
続いて、桁違い対応処理における処理の流れについて説明する。図５は、本実施形態に係る桁違い対応処理における処理の流れを示すフローチャートである。
【００６３】
まず、生成部１２３は、特定部１２２が特定したカラムに対応するヒストグラムにおいて、正の値及び負の値に対応するバケット、すなわち、正の値のデータ及び負の値のデータを含むバケットがあるか否かを判定する（Ｓ５１）。
【００６４】
生成部１２３は、正の値及び負の値に対応するバケットがあると判定すると、Ｓ５２に処理を移し、当該バケットを正の値のデータに対応する第１バケット、及び負の値のデータに対応する第２バケットに分解する。生成部１２３は、正の値及び負の値に対応するバケットがないと判定すると、Ｓ５３に処理を移す。
【００６５】
続いて、生成部１２３は、正の値のデータを第１バケットに集約し（Ｓ５３）、負の値のデータを第２バケットに集約する（Ｓ５４）。
続いて、生成部１２３は、カラムの最大値及び最小値を更新する（Ｓ５５）。具体的には、生成部１２３は、第１バケットの最大値を、カラムの最大値に設定し、第２バケットの最大値を、カラムの最小値に設定する。
【００６６】
［負値対応処理における処理の流れ］
続いて、負値対応処理における処理の流れについて説明する。図６は、本実施形態に係る負値対応処理における処理の流れを示すフローチャートである。
【００６７】
まず、生成部１２３は、特定部１２２が特定したカラムに対応するヒストグラムにおいて、正の値及び負の値に対応するバケット、すなわち、正の値のデータ及び負の値のデータを含むバケットがあるか否かを判定する（Ｓ７１）。
【００６８】
生成部１２３は、正の値及び負の値に対応するバケットがあると判定すると、Ｓ７２に処理を移し、当該バケットを正の値のデータに対応する第１バケット、及び負の値のデータに対応する第２バケットに分解する。生成部１２３は、正の値及び負の値に対応するバケットがないと判定すると、Ｓ７３に処理を移す。
【００６９】
続いて、生成部１２３は、特定部１２２が特定したカラムに対応するデータに、正の値のデータが存在するか否かを判定する（Ｓ７３）。生成部１２３は、正の値のデータが存在すると判定すると、Ｓ７４に処理を移し、型変換前の負の値のデータの最大値を、カラムのデータの最小値に設定する。生成部１２３は、正の値のデータが存在しないと判定すると、Ｓ７５に処理を移し、カラムに対応するデータの最大値と、最小値とを入れ替える。
【００７０】
続いて、生成部１２３は、負の値のデータに対応する第２バケットの最大値と最小値とを入れ替える（Ｓ７６）。
続いて、生成部１２３は、第２バケットが複数存在する場合に、複数の第２バケットの順序を逆順化する（Ｓ７７）。
【００７１】
［型戻し処理における処理の流れ］
続いて、型戻し処理における処理の流れについて説明する。図７は、本実施形態に係る型戻し処理における処理の流れを示すフローチャートである。
【００７２】
まず、生成部１２３は、クエリに含まれる条件式に型変換処理が含まれるか否かを判定する（Ｓ１１１）。生成部１２３は、条件式に型変換処理が含まれていない場合には、Ｓ１１２に処理を移し、条件式に対応する処理を、型変換前のヒストグラムに適用することにより、ヒストグラムを更新する。
【００７３】
生成部１２３は、条件式に型変換処理が含まれている場合には、型変換対象のカラムに対して型変換を実行する（Ｓ１１３）。
続いて、生成部１２３は、型変換後のカラムに対して条件式が示す演算を実行する（Ｓ１１４）。
【００７４】
続いて、生成部１２３は、演算の実行前後のデータ数に基づいて、カラムに対応するデータの選択率を算出し（Ｓ１１５）、当該選択率に基づいて、型変換前のヒストグラムを更新する（Ｓ１１６）。
【００７５】
続いて、生成部１２３は、未処理の条件式が存在するか否かを判定する（Ｓ１１７）。生成部１２３は、未処理の条件式が存在する場合には、Ｓ１１１に処理を移し、未処理の条件式が存在しない場合には、本フローチャートの処理を終了する。
【００７６】
［本実施形態における効果］
以上のとおり、本実施形態に係るデータベースシステム１は、取得したクエリにおいて、異なる種類の型に型変換が行われるカラムに対応する型変換が行われる前のデータの度数分布を示し、予め記憶部１１に記憶されているヒストグラムに基づいて、当該ヒストグラムよりも度数分布の粒度が荒いヒストグラムを、クエリの中間結果に含まれるカラムの中間結果ヒストグラムとして生成する。これにより、データベースシステム１は、粒度が粗いものの、型変換に対応してヒストグラムやバケットの最大値及び最小値を変換することによって、型変換後のデータに対応する中間結果ヒストグラムを生成し、当該中間結果ヒストグラムに基づいてクエリの処理コストを精度良く算出することができる。
【００７７】
また、データベースシステム１は、中間結果ヒストグラムに基づいてクエリの処理コストを算出した後に型戻し処理を実行し、絞り込み条件が適用された後のカラムのヒストグラムをさらに生成する。このようにすることで、データベースシステム１は、絞り込み処理が行われた後に発生する処理に対応する処理コストの推定精度を向上させることができる。
【００７８】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更又は改良を加えることが可能であることが当業者に明らかである。例えば、上述の複数の実施形態を組み合わせてもよい。また、特に、装置の分散・統合の具体的な実施形態は以上に図示するものに限られず、その全部又は一部について、種々の付加等に応じて、又は、機能負荷に応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。
【符号の説明】
【００７９】
１・・・データベースシステム、１１・・・記憶部、１２・・・制御部、１２１・・・取得部、１２２・・・特定部、１２３・・・生成部、１２４・・・コスト算出部、１２５・・・実行部、２・・・ユーザ端末
【図１】
2018206074.tif 000003
【図２】
2018206074.tif 000004
【図３】
2018206074.tif 000005
【図４】
2018206074.tif 000006
【図５】
2018206074.tif 000007
【図６】
2018206074.tif 000008
【図７】
2018206074.tif 000009