(57)【要約】【課題】  非FAST構造からFAST構造への変換処理を抑制する。【解決手段】  ストレージに格納された表に対する問合せを受信して、問合せを実行する問合せ処理のシーケンスである実行計画を生成する実行計画手段と、実行計画手段が生成した実行計画に含まれる問合せ処理の前後関係に基づいて選択したシーケンス上の位置に、直前の問合せ処理が出力した表を、１）列の各要素のデータを重複なく所定順に格納するグローバル値リストと、２）列を複数に分割した部分列ごとに、要素に対応させてグローバル値リストに対する添え字番号を格納する値番号リストと、を包含する完全コンパイルされた表に変換する完全コンパイルを含む成長処理を追加する成長計画手段と、成長処理が追加された実行計画を実行するデータ処理手段と、を備えるデータベース管理装置。【選択図】      図１
2018045380.tif 000002
【特許請求の範囲】
【請求項１】
ストレージ手段に格納された表に対する問合せを受信して、前記問合せを実行する問合せ処理のシーケンスである実行計画を生成する実行計画手段と、
前記実行計画手段が生成した前記実行計画に含まれる前記問合せ処理の前後関係に基づいて選択した前記シーケンス上の位置に、直前の前記問合せ処理が出力した前記表を、１）列の各要素のデータを重複なく所定順に格納するグローバル値リストと、２）前記列を複数に分割した部分列ごとに、前記要素に対応させて前記グローバル値リストに対する添え字番号を格納する値番号リストと、を包含する完全コンパイルされた前記表に変換する完全コンパイルを含む成長処理を追加する成長計画手段と、
前記成長処理が追加された前記実行計画を実行するデータ処理手段と、を備えるデータベース管理装置。
【請求項２】
前記成長計画手段は、前記列の前記要素にデータを格納している未コンパイルの前記表を、１）前記部分列ごとに、前記部分列の各々の前記要素のデータを重複なく前記所定順に格納したローカル値リストと、２）前記部分列ごとに、前記要素に対応させて前記ローカル値リストに対する添え字番号を格納する前記値番号リストを包含する部分コンパイルされた前記表に変換する部分コンパイルと、部分コンパイルされた前記表を、完全コンパイルされた前記表に変換する前記完全コンパイルを含む前記成長処理を前記実行計画に追加する、請求項１のデータベース管理装置。
【請求項３】
前記問合せ処理の種類に関連付けて、入力が可能なコンパイルの状態と、当該問合せ処理が出力するコンパイルの状態とを示すデータを格納する成長度入出力テーブル記憶手段を、さらに備え、
前記成長計画手段は、成長度入出力テーブル記憶手段を参照して、前記成長処理を追加する前記問合せ処理の前記シーケンス上の位置を選択する、請求項１乃至請求項２の何れか１項のデータ管理装置。
【請求項４】
前記成長計画手段は、前記問合せ処理の前記シーケンス上において、１）集計処理後と検索処理の間に、記部分コンパイルを含む前記成長処理を追加し、２）前記集計処理とソート処理の間に、前記部分コンパイル処理と前記完全コンパイル処理を含む前記成長処理を追加する、請求項１乃至請求項３の何れか１項のデータ管理装置。
【請求項５】
前記成長計画手段は、未コンパイルの前記表を、完全コンパイルされた前記表に変換する前記完全コンパイルを含む前記成長処理を前記実行計画に追加する、請求項１のデータベース管理装置。
【請求項６】
前記成長処理にかかるコスト、および、前記問合せ処理についての入力する前記表が未コンパイルであるか完全コンパイルであるかに応じた処理コストを算出する成長コスト算出手段を、さらに備え、
前記成長計画部は、前記成長コスト算出手段の算出結果に基づいて、前記成長処理を前記実行計画に追加する、請求項１乃至請求項５の何れか１項のデータベース管理装置。
【請求項７】
前記ストレージ手段を、さらに、備える請求項１乃至請求項６の何れか１項のデータ管理装置。
【請求項８】
ストレージ手段に格納された表に対する問合せを受信して、前記問合せを実行する問合せ処理のシーケンスである実行計画を生成し、
生成された前記実行計画に含まれる前記問合せ処理の前後関係に基づいて選択した前記シーケンス上の位置に、直前の前記問合せ処理が出力した前記表を、１）列の各要素のデータを重複なく所定順に格納するグローバル値リストと、２）前記列を複数に分割した部分列ごとに、前記要素に対応させて前記グローバル値リストに対する添え字番号を格納する値番号リストと、を包含する完全コンパイルされた前記表に変換する完全コンパイルを含む成長処理を追加し、
前記成長処理が追加された前記実行計画を実行するデータベース管理方法。
【請求項９】
前記列の前記要素にデータを格納している未コンパイルの前記表を、１）前記部分列ごとに、前記部分列の各々の前記要素のデータを重複なく前記所定順に格納したローカル値リストと、２）前記部分列ごとに、前記要素に対応させて前記ローカル値リストに対する添え字番号を格納する前記値番号リストを包含する部分コンパイルされた前記表に変換する部分コンパイルと、部分コンパイルされた前記表を、完全コンパイルされた前記表に変換する前記完全コンパイルを含む前記成長処理を前記実行計画に追加する、請求項８のデータベース管理方法。
【請求項１０】
ストレージ手段に格納された表に対する問合せを受信して、前記問合せを実行する問合せ処理のシーケンスである実行計画を生成する実行計画処理と、
前記実行計画処理で生成した前記実行計画に含まれる前記問合せ処理の前後関係に基づいて選択した前記シーケンス上の位置に、直前の前記問合せ処理が出力した前記表を、１）列の各要素のデータを重複なく所定順に格納するグローバル値リストと、２）前記列を複数に分割した部分列ごとに、前記要素に対応させて前記グローバル値リストに対する添え字番号を格納する値番号リストと、を包含する完全コンパイルされた前記表に変換する完全コンパイルを含む成長処理を追加する成長計画処理と、
前記成長処理が追加された前記実行計画を実行するデータ処理と、をコンピュータに実行させるデータベース管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベース管理、特に、列指向データベースシステムにおいて、問合せに対する各処理の途中で、構造変換処理を必要に応じて実行するデータベース管理に関する。
【背景技術】
【０００２】
OLAP(Online Analytical Processing)向けのデータベースとして、実行される処理の性質から、列指向データベースが近年広く利用されはじめている。列指向データベースの中には特許文献1に開示されたデータベースシステム等が提案されている。この技術は、図１８のａ）に示すような表における各列を、図１８のｂ）に示すように、行の順序を示す順序集合、列の各要素のデータを昇順かつ重複が無いように格納した値リスト、値リストへの参照を意味する値番号の組を用いて表現する。このデータ構造はFAST(Filter Array Structure)構造と呼ばれている。FAST構造の表、例えば、図１９のａ）に示す表の各行へのアクセスは、図１９のｂ）に示すように、順序集合、値番号をたどることで行うことができる。行番号に対応する順序集合の要素が値番号の添え字であり、値番号の要素は値リストの添え字となっている。
【０００３】
FAST構造のデータベースは、データを、順序集合、値番号、値リストという３つのベクトルに分解して格納する。このようにすることで、直接文字列などのデータを扱うことなく、整数値で管理されている順序集合や値番号での操作だけで完結させることができるケースがあるというメリットが存在する。また、順序集合や値番号の操作の多くはシーケンシャルなメモリアクセスであり、キャッシュヒット率も高く良好な性能をもたらす。
【０００４】
さらに、図２０に示すような、受注明細表を商品名順に昇順ソートする例では、実際の値を格納している値リストを参照することなく処理が完結することも可能となる。
【０００５】
例えば、図２０のａ）に示す受注明細表を商品名順にソートするときは、行を入れ替えることが必要である。一方、図２０のｂ）に示すFAST構造においては、ソートや選択は順序集合が変わるだけであり、他に変化は無い。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４４２８４８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
FAST構造のデータベースに対して、例えば計算処理を行うと、FAST構造ではない中間データが生成される。この為、FAST構造を有するデータベースシステムは、計算処理のあとにFAST構造への変換処理を行う。
【０００８】
図２１はこの変換処理の様子を示す。この例における演算は、図２１のａ）に示す受注明細」表の「金額」列について、「金額」=「金額」/「個数」*1.08に再計算して、図２１のｂ）に示すような計算結果を得るものである。図２１のｃ）は、この演算の対象となった金額列について、演算後に行われるFAST構造への変換処理を示す。
【０００９】
まず、データベースシステムは、図２１のｃ）のア）が示すように、「個数」「金額」列を使って計算結果を算出し、計算結果のデータを一度非FAST構造のデータ領域に格納する。続いて、データベースシステムは、得られたデータを値番号リスト・値リストの組に変換（コンパイル）して、図２１のｃ）のイ）が示す構造を得る。但し、このような、小数を含む計算結果は、値リストの要素数が多くなりやすく、データ変換に時間を要するのである。
【００１０】
変換対象の列が整数型の場合はカウンティングソートを用いた手法で変換が可能である。この時の計算量は、対象の件数をnとすると、O(n)である。それ以外の場合は、FPR法(Fast Phase Resolution)を用いた別の手法で変換が行われる。この計算量は、対象の件数をnとすると、O(n log n)であり、処理時間のかかる操作である。このような、計算処理などに伴う非FAST構造からFAST構造への変換処理は計算量が多く性能ボトルネックとなりやすい。
【００１１】
また、問合せの種類によっては変換処理によって生成したFAST構造の利点が活かされないケースがある。例えば、図２２が示すような、受注明細表の金額列について、「金額」=「金額」/「個数」*1.08に再計算し、都道府県別に平均を集計する処理を考える。この例の処理の場合、計算と集計を行うたびに変換処理が必要になる。また集計時にはカーディナリティの大きい値リストの全要素にアクセスする必要があり、その処理は効率的とは言えない。この場合、変換処理を行わない方が良好な処理性能を発揮しうる。
【００１２】
ただし、大半はFAST構造への変換処理を行うことで、続く別の処理が高速に行えるケースである。
【００１３】
すなわち、FAST構造のデータベースを用いて、より良い性能を発揮するためには、実行される処理に応じて、インテリジェントに、非FAST構造からFAST構造への変換処理を行うシステムが求められる。
【００１４】
本発明は、実行される処理に応じて適切に、非FAST構造からFAST構造への変換処理を行うことが出来るデータベース管理装置、データベース管理システム、データベース管理方法、および、データベース管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の１実施の形態のデータベース管理装置は、ストレージ手段に格納された表に対する問合せを受信して、前記問合せを実行する問合せ処理のシーケンスである実行計画を生成する実行計画手段と、前記実行計画手段が生成した前記実行計画に含まれる前記問合せ処理の前後関係に基づいて選択した前記シーケンス上の位置に、直前の前記問合せ処理が出力した前記表を、１）列の各要素のデータを重複なく所定順に格納するグローバル値リストと、２）前記列を複数に分割した部分列ごとに、前記要素に対応させて前記グローバル値リストに対する添え字番号を格納する値番号リストと、を包含する完全コンパイルされた前記表に変換する完全コンパイルを含む成長処理を追加する成長計画手段と、前記成長処理が追加された前記実行計画を実行するデータ処理手段と、を備える。
【００１６】
本発明の１実施の形態のデータベース管理方法は、ストレージ手段に格納された表に対する問合せを受信して、前記問合せを実行する問合せ処理のシーケンスである実行計画を生成し、生成された前記実行計画に含まれる前記問合せ処理の前後関係に基づいて選択した前記シーケンス上の位置に、直前の前記問合せ処理が出力した前記表を、１）列の各要素のデータを重複なく所定順に格納するグローバル値リストと、２）前記列を複数に分割した部分列ごとに、前記要素に対応させて前記グローバル値リストに対する添え字番号を格納する値番号リストと、を包含する完全コンパイルされた前記表に変換する完全コンパイルを含む成長処理を追加し、前記成長処理が追加された前記実行計画を実行する。
【００１７】
本発明の１実施の形態のデータベース管理プログラムは、ストレージ手段に格納された表に対する問合せを受信して、前記問合せを実行する問合せ処理のシーケンスである実行計画を生成する実行計画処理と、前記実行計画処理で生成した前記実行計画に含まれる前記問合せ処理の前後関係に基づいて選択した前記シーケンス上の位置に、直前の前記問合せ処理が出力した前記表を、１）列の各要素のデータを重複なく所定順に格納するグローバル値リストと、２）前記列を複数に分割した部分列ごとに、前記要素に対応させて前記グローバル値リストに対する添え字番号を格納する値番号リストと、を包含する完全コンパイルされた前記表に変換する完全コンパイルを含む成長処理を追加する成長計画処理と、前記成長処理が追加された前記実行計画を実行するデータ処理と、をコンピュータに実行させる。
【発明の効果】
【００１８】
本発明にかかるデータベース管理装置は、FAST構造のデータベースを用いて処理を行う際に、非FAST構造からFAST構造への変換処理を抑制することが出来る。
【図面の簡単な説明】
【００１９】
【図１】図１は、第１の実施の形態のデータベース管理システム３の構成を示す図である。
【図２】図２は、表の列を部分列に分割した例を示す。
【図３】図３は、データブロック２４１３の内部構造を示す図である。
【図４】図４は、データベース管理システム３が問合せを処理するときの流れを示す。
【図５】図５は、問合せの対象となる表の例を示す。
【図６】図６は、実行計画部２２２が作成した問合せ処理のステップ（QS１乃至QS7）からなる実行計画の例を示す。
【図７】図７は、図６が示す実行計画の例に、成長計画部２２３が成長処理のステップ（GS1乃至GS3、２重枠）を追加した後の実行計画を示す。
【図８】図８は、成長度入出力テーブル記憶部２３が格納する成長度入出力テーブルの例を示す。
【図９】図９は、部分コンパイルされた生年月日列を有する顧客表を検索する例を説明する図（その１）である。
【図１０】図１０は、部分コンパイルされた生年月日列を有する顧客表を検索する例を説明する図（その２）である。
【図１１】図１１は、部分コンパイルされた列を有する表の検索と、完全コンパイルされた列を有する表の検索との比較例を示す図である。
【図１２】図１２は、未コンパイルから部分コンパイルへの変換処理を示す。
【図１３】図１３は、３２要素からなる未コンパイルの生年月日列を、４要素ずつの８個の部分列に分割し、各部分列をマルチスレッドで並列に部分コンパイルしたときの様子を示す。
【図１４】図１４は、部分コンパイルから完全コンパイルへの変換処理を示す。
【図１５】図１５は、コンピュータ装置６００の構成図である。
【図１６】図１６は、第２の実施の形態のデータベース管理システム３の構成を示す図である。
【図１７】図１７は、第３の実施の形態のデータベース管理装置２の構成を示す図である。
【図１８】図１８は、背景技術を説明する図である（その１）。
【図１９】図１９は、背景技術を説明する図である（その２）。
【図２０】図２０は、背景技術を説明する図である（その３）。
【図２１】図２１は、課題を説明する図である（その１）。
【図２２】図２２は、課題を説明する図である（その２）。
【発明を実施するための形態】
【００２０】
＜第１の実施の形態＞
＜構成＞
本実施の形態のデータベース管理システム３の構成について図１を用いて説明する。データベース管理システム３は、データベース管理装置２と、当該装置に通信路で接続されたデータベースクライアント１を包含する。データベースクライアント１は、１台のデータベース管理装置２に複数接続されていても良い。
【００２１】
データベースクライアント１のソケット１１とデータベース管理装置２のソケット２１は、相互にTCP/IPなどによる通信を行う。ここで行う通信は、SQL（Structured Query Language）などの問い合わせ文の送受信や問い合わせの結果セットの授受などである。
【００２２】
データベース管理装置２は、問い合わせ処理部２２、成長度入出力テーブル記憶部２３、ストレージ装置２４、および、統計情報収集部２５を備えている。問い合わせ処理部２２は、構文解析部２２１、実行計画部２２２、成長計画部２２３、データ処理部２２４、および、成長処理部２２５を備えている。
【００２３】
構文解析部２２１は、問合せ文の構文解析を行い、データベース管理装置２の他の部位が理解できる木構造などの形式に変換する。形式の変換後、実行計画部２２２は、データ処理部２２４でどのような処理を行うべきかについての実行計画を生成する。実行計画部２２２は、実行計画を生成する際に、統計情報収集部２５が収集した統計情報２４２を利用する。
【００２４】
成長度入出力テーブル記憶部２３は、ソート、計算、集計、結合など問合せを実行する処理（以後、問合せ処理）について入力可能な表データ２４１の成長レベルと、出力される成長レベルをまとめたテーブル（以降、成長度入出力テーブル）を格納する。
【００２５】
成長計画部２２３は、表データ２４１の構造成長処理（以降、成長処理）に関する実行計画を生成する。成長計画部２２３は、前述の成長度入出力テーブルを利用して、成長処理の実行計画を生成する。
【００２６】
データ処理部２２４は、実行計画部２２２、および、成長計画部２２３により作成された実行計画に基づいて、問合せ処理および成長処理を実行して表データ２４１を操作し、問合せに対する結果セットを生成する。このとき、データ処理部２２４は、問合せ処理は自ら実行し、成長処理は成長処理部２２５を起動して実行する。
【００２７】
生成された結果セットは、データベース管理装置２のソケット２１からデータベースクライアント１のソケット１１へと送信される。
【００２８】
データベース管理装置２は、必要に応じてストレージ装置２４から表データ２４１を読み込む。表データ２４１は、リレーショナルデータベースの表ごとに存在する。従って、表データ２４１は、複数存在しても良い。表データ２４１は、FAST構造を改良したデータ構造で格納される。
【００２９】
まず、表データ２４１は、表の各行の順序を示すものとしての順序集合２４１１を包含する。順序集合２４１１は、表の各行に対応する要素（セル）を有する配列データである。順序集合２４１１の配列の要素には、対応する行のデータが、後述する配列データである値番号リスト２４１６のどの順番の要素に入っているかを示す順序番号（配列データの添え字）が入っている。したがって、行の並び替え処理などはこの順序集合２４１１の値を書き換えるだけで実現できる。また、順序集合２４１１は、表データ２４１内に１つ以上存在することができる。
【００３０】
列データ２４１２は表の列ごとに存在する。表の各列は、列データ２４１２内において、適当な要素（セル）数の部分列に分割して格納される。図２は、表の列を部分列に分割した例を示す。図２は、ａ）顧客表の生年月日列を、ｂ）要素数４の部分列に分割した例を示している。
【００３１】
列データ２４１２は、データブロック２４１３、ローカル値リスト２４１４、グローバル値リスト２４１５の３つを包含する。データブロック２４１３、および、ローカル値リスト２４１４は、部分列ごとに存在する。グローバル値リスト２４１５は、列ごとに存在する。
【００３２】
グローバル値リスト２４１５は、対応する列の要素に格納されていたデータを、重複なく、所定順、例えば昇順に並べた配列データである。所定順は、降順であっても良い。ローカル値リスト２４１４は、対応する部分列の要素に格納されていたデータを、重複なく、所定順に並べた配列データである。
【００３３】
データブロック２４１３は、１）未コンパイル、２）部分コンパイル、または、３）完全コンパイルの３つの成長レベルのうちの何れかのレベルにある。
【００３４】
未コンパイルのレベルのデータブロック２４１３は、非FAST構造の表の配列データを格納している。すなわち、データブロック２４１３は、当該データブロック２４１３に対応する部分列を格納している。部分列の各要素は、データ実体、例えば生年月日の列における生年月日、を格納している。
【００３５】
部分コンパイルのレベルのデータブロック２４１３は、ローカル値リスト２４１４に対する値番号（以下、ローカル値番号）を格納している。すなわち、データブロック２４１３は、当該データブロック２４１３に対応するローカル値リスト２４１４の配列データの添え字番号を格納している。
【００３６】
完全コンパイルのレベルのデータブロック２４１３は、グローバル値リスト２４１５に対する値番号（以下、グローバル値番号）を格納している。すなわち、データブロック２４１３は、当該データブロック２４１３に対応する列のグローバル値リスト２４１５の配列データの添え字番号を格納している。
【００３７】
データブロック２４１３の内部構造について図３を用いて説明する。図３は、図２で示した顧客表の生年月日列の例である。
【００３８】
図３が示すように、データブロック２４１３はヘッダ部とボディ部に分かれている。ヘッダ部は、そのデータブロック２４１３が対象としている先頭及び末尾の行番号と、当該データブロック２４１３の成長レベル、値リストを格納している。
【００３９】
図３のａ)は、未コンパイルレベルのデータブロック２４１３を示す。ボディ部には、直接、対応する部分列に格納されていた日付型のデータを含む配列データが格納される。値リストには、nullが格納される。
【００４０】
未コンパイルレベルのデータブロック２４１３から列内の或る行のデータを取り出すとき、問合せ処理部２２は、まず、順序集合２４１１から当該行に対する順序番号を取り出す。次いで、問合せ処理部２２は、順序番号から当該データブロック２４１３の先頭行番号を差し引いて相対的な行番号を取得し、当該相対的な行番号をインディクス値として、ボディ部の配列データを参照すれば良い。
【００４１】
図３のｂ）は、部分コンパイルレベルのデータブロック２４１３を示す。ボディ部には、対応するローカル値リスト２４１４に対するローカル値番号を含む配列データ（以後、値番号リスト２４１６）が格納される。値リストには、対応するローカル値リスト２４１４のアドレスが格納される。
【００４２】
部分コンパイルレベルのデータブロック２４１３から列内の或る行のデータを取り出すとき、問合せ処理部２２は、まず、未コンパイル時と同様に、順序集合２４１１から順序番号を取り出し、その順序番号から相対的な行番号を算出する。続いて、問合せ処理部２２は、当該相対的な行番号をインディクス値として、ボディ部の値番号リスト２４１６を参照し、取り出したローカル値番号をインデックス値として、値リストからポイントされているローカル値リスト２４１４を参照すれば良い。
【００４３】
図３のｃ）は、完全コンパイルレベルのデータブロック２４１３を示す。ボディ部には、対応するグローバル値リスト２４１５に対するグローバル値番号を含む配列データ、即ち値番号リスト２４１６、が格納される。値リストには、対応するグローバル値リスト２４１５のアドレスが格納される。
【００４４】
完全コンパイルレベルのデータブロック２４１３から列内の或る行のデータを取り出すとき、問合せ処理部２２は、未コンパイル時と同様に、まず、順序集合２４１１から順序番号を取り出し、その順序番号から相対的な行番号を算出する。続いて、問合せ処理部２２は、当該相対的な行番号をインディクス値として、ボディ部の値番号リスト２４１６を参照し、取り出したグローバル値番号をインデックス値として、値リストからポイントされているグローバル値リスト２４１５を参照すれば良い。
【００４５】
なお、表の列が完全コンパイルレベルにあるとき、列が部分列対応に分割されていることを除き、公知のFAST構造と変わらない。
【００４６】
統計情報収集部２５は、データベース管理装置２が保有している表やサーバへのアクセス状況などを表データ２４１やストレージ装置２４から収集する。統計情報収集部２５は、収集した情報を統計情報２４２として、例えば、ストレージ装置２４に格納する。例えば、実行計画部２２２は、実行計画を生成する際に統計情報２４２を利用する。
【００４７】
ここで、データベース管理装置２の、問合せ処理部２２内の各部、例えば、実行計画部２２２、および、成長計画部２２３は、論理回路で構成される。ストレージ装置２４、および、成長度入出力テーブル記憶部２３は、磁気記憶装置、または、半導体記憶装置で構成される。
【００４８】
データベース管理装置２は、コンピュータ装置６００により実現されても良い。図１５は、コンピュータ装置６００の構成図である。コンピュータ装置６００は、バス６４０で相互に接続された、プロセッサ６１０、主記憶部６３０、および、外部記憶装置６２０を備える。プロセッサ６１０は、バス６４０を経由して、主記憶部６３０、および、外部記憶装置６２０に対してデータの読み書きを行う。また、プロセッサ６１０は、主記憶部６３０に格納されているプログラム６５０を実行する。なお、プログラム６５０は、当初外部記憶装置６２０に格納されており、コンピュータ装置６００の初期設定時に、プロセッサ６１０が外部記憶装置６２０から主記憶部６３０にロードしても良い。
【００４９】
ここで、主記憶部６３０は半導体メモリ装置である。外部記憶装置６２０はディスク装置、または、半導体記憶装置等の記憶装置である。
【００５０】
プロセッサ６１０は、プログラム６５０を実行することにより、例えば、問合せ処理部２２内の各部として機能する。すなわち、プロセッサ６１０は、プログラム６５０を実行することにより、例えば、問合せ処理部２２内の各部が行う処理を実行する。主記憶部６３０または、外部記憶装置６２０は、例えば、ストレージ装置２４、および、成長度入出力テーブル記憶部２３として機能する。
【００５１】
＜動作＞
図４は、データベース管理システム３が問合せを処理するときの流れを示す。まず、データベースクライアント１がSQLで記述した問合せ（クエリともいう）を、データベース管理装置２に送信する（ST１）。
【００５２】
データベース管理装置２が送信されたクエリを受信して（ST2）、構文解析部２２１が、データベース管理装置２が理解できる形式に変換する（ST3）。実行計画部２２２は、クエリに基づいて問合せ処理の実行計画を生成する（ST4）。
【００５３】
その後、成長計画部２２３が、実行計画に成長処理の実行スケジュールを追加する（ST5）。続いて、データ処理部２２４が実行計画に従って問合せ処理を実行し、必要に応じて成長処理部２２５を起動して成長処理も実行する。
【００５４】
データ処理部２２４は、実行計画を実行して得られた結果セットを送信し（ST7）、データベースクライアント１が受信する（ST8）。
【００５５】
図４の各ステップのうち、ST5とST6以外の部分は、FAST構造に関する公知技術を用いて実現できる。
【００５６】
ここで、データベースクライアント１が、図５に示す表に対して、以下のSQL文による問合せを実行したとする。
【００５７】
（問合せSQL文例１）
SELECT 顧客.都道府県, SUM(顧客取引.総額) AS 総額 FROM
( SELECT 顧客ID, SUM(取引額*1.08) AS 総額 FROM 取引明細
GROUP BY 顧客ID) 顧客取引
INNER JOIN 顧客 ON 顧客取引.顧客ID = 顧客.顧客ID
WHERE 顧客取引.総額 >= 1000000 AND 顧客.生年月日 >= '1980-01-01'
GROUP BY 顧客.都道府県
ORDER BY 総額 DESC
図５のａ）は顧客表、図５のｂ）は取引明細表を示す。顧客表は、顧客ID列、生年月日列、および、都道府県列を含む。取引明細表は、顧客ID列、および、取引額列を含む。
【００５８】
上述の問合せSQL文例は、取引明細表の取引額に８％を加算した値を顧客ごとに集計し、集計値が100万以上かつ生年月日が１９８０年１月１日以降の顧客について都道府県別に集計し、集計値の降順にソートするものである。
【００５９】
公知のFAST構造を有するデータベースシステムは、上述のSQL文を受信して、例えば図６に示すような実行計画を生成する。当該データベースシステムは、各処理の終了時点でFAST構造を満たすように、各処理の中でデータ変換を行っている。
【００６０】
図６の実行計画によれば、当該データベースシステムは、取引明細表の取引額に８％を加算してtemp1に格納し（QS1）、この値を顧客IDごとに集計し、顧客取引表の総額に格納する（QS２）。
【００６１】
さらに、当該データベースシステムは、顧客取引表から総額が100万円以上の顧客IDを選択し（QS3）、また、顧客表から生年月日が１９８０年１月１日以降の顧客IDを選択し（QS4）する。
【００６２】
さらに、当該データベースシステムは、顧客IDをキーに顧客表と顧客取引表を結合し（QS5）、結合した表における顧客IDの総額を都道府県ごとに集計し（QS6）、都道府県を、集計額の降順にソートする（QS7）。
【００６３】
一方、本実施の形態のデータベース管理装置２は、以下のように動作する。
【００６４】
まず、実行計画部２２２が、図６に示したものと同様な実行計画を作成する。
【００６５】
続いて、成長計画部２２３が、実行計画部２２２が作成した実行計画に構造成長処理を追加する。図７は、実行計画部２２２が作成した問合せ処理のステップ（QS１乃至QS7）からなる実行計画に、成長計画部２２３が成長処理のステップ（GS1乃至GS3、２重枠）を追加した後の実行計画を示す。
【００６６】
図７の実行計画の実行時に、データ処理部２２４は、QS１乃至QS7のステップで、図６の説明と同じ問合せ処理を行う。但し、データ処理部２２４は、それらのステップ内でFAST構造への変換を行わない。
【００６７】
成長計画部２２３は、成長処理を追加する際に、実行計画部２２２が作成した実行計画を走査し、問合せ処理の前後関係から判断して、必要な個所に成長処理を追加する。このとき、成長計画部２２３は、図８に示すような成長度入出力テーブル記憶部２３が格納する成長度入出力テーブルを参照し、各問合せ処理の入力する列が、当該テーブルに示す最低限必要な成長レベルを満たすように成長処理を追加する。
【００６８】
成長度入出力テーブルは、問合せ処理対応に、当該処理が対象とする列が、当該処理実行前に備えていなければならない成長レベル（入力レベル）と、当該処理後の当該列が備えている成長レベル（出力レベル）を示す。
【００６９】
図８に示す成長度入出力テーブルの例は、具体的に以下の＜１＞乃至＜４＞のことを示している。
【００７０】
＜１＞
ソートのキーとなる列、および、集計のGROUP BY句で指定される列は、処理前に完全コンパイルされていなければならず、処理後もその成長レベルを維持している。
【００７１】
この理由は、完全コンパイルされていれば、グローバル値番号を昇順または降順に並べ替えるだけでソートが完了するからである。また、集計処理は、GROUP BYで指定した列を順番に、事前にソートしておくことで効率化できるからである。また、ソートは、順序集合２４１１を更新するだけなので、成長レベルは維持される。
【００７２】
＜２＞
検索対象列は、処理前に部分コンパイルまたは完全コンパイルされていなくてはならず、処理後もその成長レベルを維持している。
【００７３】
ここでのポイントは、完全コンパイルされていなくても、良いということであり、この点で、データベース管理装置２は、公知のFAST構造技術と異なる処理を実行する。公知のFAST構造技術は、これらの処理を実行するときはFAST構造、本実施の形態における完全コンパイルを前提としていた。しかし、部分コンパイルされていれば、完全コンパイルされていなくても、十分な性能が出得る。以下、対象となる列が部分コンパイルされていれば、十分な性能が出得ることを説明する。
【００７４】
図９、および、図１０は、部分コンパイルされた生年月日列を有する顧客表を検索する例を説明する図である。実行される問い合わせは、以下の通りである。
【００７５】
（問合せSQL文例２）
SQL> SELECT 顧客ID FROM 顧客 WHERE 生年月日 >= '1990-01-01';
この検索において、データ処理部２２４は、図９が示すように、データブロック２４１３について、ローカル値リスト２４１４からWHERE句を満たす値リストに対応がつくようにフラグを付ける。ローカル値リスト２４１４はデータが昇順の為、データ処理部２２４は、二分探索で容易に、境界（図中、矢印で示される）を見つけることが出来る。その後、データ処理部２２４は、図１０が示すように、当該データブロック２４１３について、ローカル値番号リスト２４１６からローカル値リスト２４１４についているフラグを上から順番にチェックし、フラグが真の値番号（図中、矢印の発出元）を結果として抽出する。データ処理部２２４は、図９及び図１０に示す処理を、すべてのデータブロック２４１３について行うことで最終的に得たい結果を得ることが出来る。
【００７６】
このとき、データ処理部２２４が行う、値番号リスト２４１６に対するシーケンシャルスキャンの総回数は、完全コンパイルでも部分コンパイルでも変わらない。値番号リスト２４１６に対応するフラグ付の処理が異なるだけである。
【００７７】
図１１は、この様子を示す。完全コンパイルでのフラグ付の処理（図１１のａ））は、部分コンパイルでのフラグ付の処理（図１１のｂ））のローカル値リスト２４１４をグローバル値リスト２４１５に置き換えたのと同じである。両フラグ付の処理は、カーディナリティの差異以外はないうえ、処理自体は軽いためその負荷の違いは無視できる。
【００７８】
＜３＞
計算、および、集計の演算対象となる列は、処理前の成長レベルは問われず、処理後は、未コンパイル状態になる。
【００７９】
この理由は、計算や集計はかならず値そのものが必要になり、また、取得した値に対して計算処理や集計処理(SUM関数やAVG関数実行)を行えば、当然新たな値が生成されるからである。
【００８０】
＜４＞
JYOINのキーとなる列は、処理前に部分コンパイルまたは完全コンパイルされていなくてはならず、処理後は完全コンパイルされる。
【００８１】
ここでのポイントは、完全コンパイルされていなくても、良いということであり、この点で、本実施の形態の技術は、公知のFAST構造技術と異なる。
【００８２】
完全コンパイルの場合、データ処理部２２４は、結合する２つの表のグローバル値リスト２４１５をマージソート及び重複値の排除をして、それに対応つくように値番号を書き換える。そして、データ処理部２２４は、値番号の値を比較しながらジョインの処理を行う。グローバル値リスト２４１５をマージしているので、出力も完全コンパイルとなる。
【００８３】
部分コンパイルの場合、データ処理部２２４は、各データブロック２４１３を小さな表と見立てて完全コンパイルと同様のジョインを繰り返しおこなえば、全体でみてジョインされた表ができあがる。したがって、完全コンパイルされた表を入力した場合同様に、出力は完全コンパイルとなる。
【００８４】
＜５＞
UNION ALLの対象となる列は、処理前の成長レベルは問われず、処理後は、未コンパイル、部分コンパイル、または、両成長レベルの共存となる。
【００８５】
入力される２つの表が、共に未コンパイルであれば、データ処理部２２４は、データブロック２４１３をただ縦につなげるだけである。出力は、未コンパイルになる。
【００８６】
入力される２つの表の１つが未コンパイル、他が部分コンパイルであれば、データ処理部２２４は、データブロック２４１３をただ縦につなげるだけである。出力は、未コンパイルと部分コンパイルの共存になる。
【００８７】
入力される２つの表が、共に部分コンパイルであれば、データ処理部２２４は、データブロック２４１３をただ縦につなげるだけである。出力は、部分コンパイルになる。
【００８８】
入力される２つの表の１つが部分コンパイル、他が完全コンパイルであれば、データ処理部２２４は、完全コンパイルにおけるグローバル値リスト２４１５をローカル値リスト２４１４として、部分コンパイル通しと同様の処理を行う。そのため、出力は部分コンパイルになる。
【００８９】
入力される２つの表が、共に完全コンパイルであれば、データ処理部２２４は、２つの完全コンパイルの表におけるグローバル値リスト２４１５をローカル値リスト２４１４として、部分コンパイル通しと同様の処理を行う。そのため、出力は部分コンパイルになる。
【００９０】
図６に示す実行計画を受け取った成長計画部２２３は、例えば、QS1の計算処理のtemp1出力は未コンパイルであることを検出するが、同時に、QS2の集計処理において入力の集計列の成長レベルは未コンパイルであっても良いことも図８の成長度入出力テーブルから検出する。したがって、成長計画部２２３は、QS1とQS２の間に、成長処理を追加しない。構造成長させることは、無駄だからである。
【００９１】
一方、成長計画部２２３は、例えば、QS２の集計処理の出力は、集計列である総額列が未コンパイルであること、QS3の検索処理におけるキーである総額列は少なくとも部分コンパイルされていなければならないことを、図８の成長度入出力テーブルから判断する。その結果、成長計画部２２３は、QS2とQS3との間に、総額列を対象として未コンパイルから部分コンパイルに成長レベルを上げる成長処理GS1を追加する。すなわち、ここでは、安い成長処理コストで、データブロック２４１３ごとに二分探索をできるように、成長計画部２２３は、部分コンパイルの追加で済ませている。
【００９２】
同様に、成長計画部２２３は、例えば、QS6の集計処理の出力は、集計列である総額列が未コンパイルであること、QS7のソート処理におけるキーである総額列は完全コンパイルされていなければならないことを、図８の成長度入出力テーブルから判断する。その結果、成長計画部２２３は、QS6とQS7との間に、総額列を対象として未コンパイルから部分コンパイルに成長レベルを上げる成長処理GS2、および、部分コンパイルを完全コンパイルに成長レベルを上げる成長処理GS3を追加する。ここでのソート対象は、すでに都道府県で集計後のデータなので、件数は小さく本ソート処理が性能のボトルネックにはならない。
【００９３】
成長計画部２２３は、直前の問合せ処理が、例えばUNION ALLであって、出力された列に異なる成長レベルが共存していることを検出した場合、低い成長レベルに合わせた成長処理の追加をすれば良い。
【００９４】
このように、本実施の形態のデータベース管理装置２は、公知のFAST構造を有するデータベースシステムと比較し、余計な変換処理を実行せず、高速な処理が実現できる。
【００９５】
なお、成長度入出力テーブルの実装方式は、ベンダがハードコーディングしても、ユーザが運用時にカスタマイズ可能としても良い。
【００９６】
さらに、成長度入出力テーブルは、全ての問合せ処理に対応している必要は無い。ユーザが、使用しているデータやデータ処理部２２４の動作特性に合わせて、適宜、登録内容をチューニングすれば良い。成長計画部２２３は、実行計画部２２２が作成した実行計画中に、成長度入出力テーブルに登録されていない問合せ処理を検出した時は、例えば、当該処理には完全コンパイルされた列を入力し、出力は未コンパイルであることを前提とした成長処理追加を行えば良い。
【００９７】
実行計画部２２２と成長計画部２２３で実行計画が作成されたら、データ処理部２２４が実行計画を受信して処理を実行する。
【００９８】
データ処理部２２４で行われる問い合わせ処理、例えば、図７のQS1乃至QS７における処理は、基本的に、公知のデータベースで用いられるアルゴリズムに従っている。但し、これらは、未コンパイルや部分コンパイルの列に対しても処理が可能なように機能拡張されている処理である。
【００９９】
未コンパイルに対する機能拡張は、FAST構造を持たないデータベースに対する処理に、列データ２４１２の部分列化対応処理を追加すれば良い。完全コンパイルに対する機能拡張は、FAST構造を持つデータベースに対する処理に、列データ２４１２のデータブロック２４１３分割対応処理を追加すれば良い。
【０１００】
部分コンパイルに対する機能拡張は、FAST構造を持つデータベースに対する処理に、列データ２４１２のデータブロック２４１３分割対応処理と、データブロック２４１３ごとに参照するローカル値リスト２４１４を切替える処理を追加すればよい。但し、前述したUNION ALLのように、列の構造を変える場合、独自の処理が追加される場合も有る。
【０１０１】
データ処理部２２４は、実行計画中に成長処理、例えば図７のGS1乃至GS3における処理を検出すると、成長処理部２２５を使用して当該処理を実行する。
【０１０２】
成長処理部２２５は、未コンパイルから部分コンパイルに、または、部分コンパイルから完全コンパイルへの変換を行う。
【０１０３】
図１２は、未コンパイルから部分コンパイルへの変換処理を示す。成長処理部２２５は、成長処理対象となる列を、複数要素ごとの部分列に分割する。図１２は、８要素ごとの部分列に分割した例を示す。次に、成長処理部２２５は、部分列を対象に、公知のFAST構造型データベースで使われているカウンティングソート、FPR法などの手法を用いてデータ変換を行い、値番号リスト２４１６を含むデータブロック２４１３と、ローカル値リスト２４１４を生成する。図８のｂ）は、図８のａ）の部分列から生成された値番号リスト２４１６と、ローカル値リスト２４１４を示す。
【０１０４】
このとき、各部分列に対する処理は独立しているため、複数コアを活用した並列実行が可能である。図１３は、ａ)の３２要素からなる未コンパイルの生年月日列を、ｂ）４要素ずつの８個の部分列に分割し、ｃ）各部分列をマルチスレッドで並列に部分コンパイルしたときの様子を示す。
【０１０５】
なお、成長処理部２２５は、処理対象列において、未コンパイルのデータブロック２４１３と部分コンパイルのデータブロック２４１３が共存するときは、未コンパイルのデータブロック２４１３の部分コンパイルだけを実施すれば良い。
【０１０６】
図１４は、部分コンパイルから完全コンパイルへの変換処理を示す。成長処理部２２５は、ａ）処理対象列の全てのローカル値リスト２４１４をマージソートし、重複値を排除することでグローバル値リスト２４１５作成し、ｂ）それにあわせて値番号リスト２４１６内のローカル値番号をグローバル値番号に書き換える。
【０１０７】
＜変形例＞
データベース管理装置２は、必ずしも、部分コンパイルを実施しなくても良い。この場合、データベース管理装置２が実行する成長処理は、未コンパイルから完全コンパイルへの変換となる。
【０１０８】
データベース管理システム３の構成は適宜変更して良い。例えば、データ処理部２２４と成長処理部２２５は、一つにまとめても良い。
【０１０９】
＜効果＞
本実施の形態のデータベース管理装置２は、無駄な非FAST構造からFAST構造への変換処理を抑制することが出来る。その第１の理由は、成長計画部２２３が、実行計画部２２２が生成した実行計画における問合せ処理の前後関係から必要とされる箇所を判断して、必要な成長処理を追加するからである。本実施の形態のデータベース管理装置２は、各問合せ処理内で、機械的にFAST構造への変換を行わなくて済む。
【０１１０】
第２の理由は、成長計画部２２３が、後続する処理が充分効率的に実行できる箇所には、成長処理コストが安い部分コンパイルを追加するからである。後続する処理が充分効率的に実行できる場合、必ずしも、完全コンパイルまでする必要は無い。
【０１１１】
BI(Business Intelligence) / DWH(Data Warehouse)用途でデータベースを利用する場合、データベースサーバには複雑なクエリに対して迅速なレスポンスを行うことが要件として求められる。FAST構造データベースはBI/DWH用途に向いているが、本実施の形態のデータベース管理装置２は、コンパイルの頻度、処理時間が削減できるため、より良好なレスポンスでデータベースにアクセスできる。
【０１１２】
＜第２の実施形態＞
＜構成＞
図１６は、本実施の形態のデータベース管理システム３の構成を示す図である。第１の実施の形態と比べて、データベース管理装置２が、問合せ処理部２２内に、さらに、成長コスト計算部２２６を備えている点で異なる。
【０１１３】
第１の実施の形態では、データベース管理装置２の成長計画部２２３は、処理対象の列が最低限の成長レベルになるように成長処理を実行計画に含めた。
【０１１４】
一方、本実施の形態では、成長コスト計算部２２６が、成長処理にかかるコスト、および、ソート、計算、集計、結合などの問合せ処理についての入力する成長レベルに応じた処理コストを算出する。成長計画部２２３は、成長コスト計算部２２６の計算結果を受けて、処理全体でコストが最低となるような実行計画を生成する。
【０１１５】
＜動作＞
データベースクライアント１が送信した問合せ（クエリ）は、第１の実施の形態と同様に図４のフローチャートに従って処理される。成長計画部２２３は、成長処理の実行計画を生成する際に、コスト計算を行う為に成長コスト計算部２２６を起動する。
【０１１６】
成長コスト計算部２２６は、例えば、以下の、式１、式２、式３に示すような計算式を用いて、構造成長に要するコストの見積もりを行う。
Ａ）未コンパイルを部分コンパイルする際のコスト
・ソーティングコンパイルの場合：
係数α  ×  列内要素数n  × 平均データ長L・・・（１）
・FPRコンパイルの場合：
係数β  ×  列内要素数n × log( 列内要素数n ) × 平均データ長L・・・（２）
Ｂ）部分コンパイルを完全コンパイルする際のコスト
係数γ  ×  列内要素数n × log( 列内要素数n ) × 平均データ長L・・・（３）
さらに、成長コスト計算部２２６は、例えば、以下の、式４乃至式９に示すような計算式を用いて、入力された列の成長レベルに応じた問合せ処理に要するコストの見積もりを行う。
ａ）検索処理のコスト
・未コンパイルの場合：
係数A × 列内要素数n・・・（４）
・部分コンパイルの場合：
係数B × ブロック数b × log (ブロックごとの列内要素数n) ・・・（５）
・完全コンパイルの場合：
係数C × log(列内要素数n) ・・・（６）
ただし、A >> B ≧ C
ｂ）計算処理のコスト
・未コンパイルの場合：
係数X × 件数n・・・（７）
・部分コンパイルの場合：
係数Y × 件数n・・・（８）
・完全コンパイルの場合：
係数Z × 件数n・・・（９）
ただし、 X << Y ≦ Z
この計算結果を受けて、成長計画部２２３は、クエリ全体で見たときにコストが最小となるような実行計画を生成し、データ処理部２２４に渡す。
【０１１７】
なお、上記の式における各係数は様々な要因で大きく変わってくる。影響する要因は、例えば、メモリ上のデータをランダムアクセスで拾ってくるか、シーケンシャルアクセスで拾ってくるか、マルチコアでの並列処理が効きやすいか、どのようなアルゴリズムで実装されているかである。したがって、係数は、あらかじめデータベース管理装置２に既定値が設定されており、管理者がマシンの特性などに応じて数値を変えてチューニングする。
【０１１８】
係数決定は、例えば、以下のように行う。
【０１１９】
コンパイルの場合、ソーティングコンパイルでは、成長処理部２２５は内部的にカウンティングソートを実施するため、シーケンシャルアクセスを多く実行する。一方、FPRコンパイルでは、ソーティングコンパイルと比較してランダムアクセスが多く、CPUキャッシュへのヒット率がソーティングコンパイルより低くなる。従って、係数α<係数βとする。また、完全コンパイルをする際の係数γは、データベースが独立して並列実行できるスレッド数を使った計算式で設定する。
【０１２０】
検索については、未コンパイル時の場合、直接値（データの中身）を見て検索をするため、データ処理部２２４は、文字列データなどの場合はC言語でいうところのstrcmp()を毎回使う必要がある。一方で、部分・完全コンパイルであれば、図９乃至図１１が示すようにフラグの境界を二分探索で決めた後、フラグ付はシーケンシャルアクセスで行える。データ処理部２２４は、検索条件に合うか合わないかはフラグが真か偽かだけで判断できるため、非常に処理が軽い。そのため、係数は、係数A>>係数B≧係数Cとなる。
【０１２１】
係数は、上述のようにアルゴリズムを精査し決めても良いし、多種多様なデータ・クエリを事前に用意しておき、係数を変えながら処理時間を実測し、最も性能が良くなるように決めても良い。
【０１２２】
なお、上述の式１乃至式９は、例であり、適宜変更されても良い。
【０１２３】
＜効果＞
本実施の形態のデータベース管理装置２は、問合せ処理と成長処理を含めた処理全体でコストが最低となるような実行計画を生成できる。その理由は、成長コスト計算部２２６が、成長処理にかかるコスト、および、問合せ処理についての入力する成長レベルに応じた処理コストを算出するからである。
【０１２４】
これにより、実施の形態のデータベース管理装置２は、ハードウェアの構成によっては、より有効な実行計画を生成できるようになる。例えば、メニーコアのハードウェアでは、成長レベルが部分コンパイルのデータブロック２４１３を多めにすることで、効率的に並列実行ができ、良好な性能を発揮できる。
【０１２５】
＜第３の実施形態＞
図１６は、本実施の形態のデータベース管理装置２の構成を示す図である。
【０１２６】
データベース管理装置２は、実行計画部２２２、成長計画部２２３、および、データ処理部２２４を備える。
【０１２７】
実行計画部２２２は、ストレージ装置２４に格納された表に対する問合せを受信して、問合せを実行する問合せ処理のシーケンスである実行計画を生成する。
【０１２８】
成長計画部２２３は、実行計画部２２２が生成した実行計画に含まれる問合せ処理の前後関係に基づいて選択したシーケンス上の位置に、直前の問合せ処理が出力した表を、完全コンパイルされた表に変換する完全コンパイルを含む成長処理を追加する。ここで、完全コンパイルされた表は、１）列の各要素のデータを重複なく所定順に格納するグローバル値リスト２４１５と、２）列を複数に分割した部分列ごとに、要素に対応させてグローバル値リスト２４１５に対する添え字番号を格納する値番号リスト２４１６と、を包含する。
【０１２９】
データ処理部２２４は、成長処理が追加された実行計画を実行する。
【０１３０】
本実施の形態のデータベース管理装置２は、無駄な非FAST構造からFAST構造への変換処理を抑制することが出来る。その理由は、成長計画部２２３が、実行計画部２２２が生成した実行計画における問合せ処理の前後関係から必要とされる箇所を判断して、必要な成長処理を追加するからである。本実施の形態のデータベース管理装置２は、各問合せ処理内で、機械的にFAST構造への変換を行わなくて済む。
【０１３１】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０１３２】
１    データベースクライアント
２    データベース管理装置
３    データベース管理システム
１１    ソケット
２１    ソケット
２２    問合せ処理部
２３    成長度入出力テーブル記憶部
２４    ストレージ装置
２５    統計情報収集部
２２１    構文解析部
２２２    実行計画部
２２３    成長計画部
２２４    データ処理部
２２５    成長処理部
２２６    成長コスト計算部
２４１    表データ
２４２    統計情報
６００    コンピュータ装置
６１０    プロセッサ
６２０    外部記憶装置
６３０    主記憶部
６４０    バス
６５０    プログラム
２４１１    順序集合
２４１２    列データ
２４１３    データブロック
２４１４    ローカル値リスト
２４１５    グローバル値リスト
２４１６    値番号リスト
【図１】
2018045380.tif 000003
【図２】
2018045380.tif 000004
【図３】
2018045380.tif 000005
【図４】
2018045380.tif 000006
【図５】
2018045380.tif 000007
【図６】
2018045380.tif 000008
【図７】
2018045380.tif 000009
【図８】
2018045380.tif 000010
【図９】
2018045380.tif 000011
【図１０】
2018045380.tif 000012
【図１１】
2018045380.tif 000013
【図１２】
2018045380.tif 000014
【図１３】
2018045380.tif 000015
【図１４】
2018045380.tif 000016
【図１５】
2018045380.tif 000017
【図１６】
2018045380.tif 000018
【図１７】
2018045380.tif 000019
【図１８】
2018045380.tif 000020
【図１９】
2018045380.tif 000021
【図２０】
2018045380.tif 000022
【図２１】
2018045380.tif 000023
【図２２】
2018045380.tif 000024