(57)【要約】【課題】データベースアクセスの性能改善に寄与する静的解析技術を用いたＳＱＬ静的解析プログラム及びＳＱＬ静的解析装置を提供する。【解決手段】本発明に係る実施形態である、コンピュータに実行されるＳＱＬ静的解析プログラムは、入力されるＳＱＬ文が対象とするデータベースのテーブル情報を記憶する機能と、ＳＱＬ文がデータベースアクセスの性能劣化を引き起こす要因を含んでいるかを判定するためのＳＱＬ静的解析定義情報を記憶する機能と、テーブル情報とＳＱＬ静的解析定義情報とを用い、ＳＱＬ文を解析する機能と、を実現させる。【選択図】図１
2011008781.tif 000002
【特許請求の範囲】
【請求項１】
ＳＱＬ静的解析プログラムであって、コンピュータに、
入力されるＳＱＬ文が対象とするデータベースのテーブル情報を記憶する機能と、
前記ＳＱＬ文がデータベースアクセスの性能劣化を引き起こす要因を含んでいるかを判定するためのＳＱＬ静的解析定義情報を記憶する機能と、
前記テーブル情報と前記ＳＱＬ静的解析定義情報とを用い、前記ＳＱＬ文を解析する機能と、
を実現させるためのプログラム。
【請求項２】
前記テーブル情報は、ＳＱＬ構文で生成されたＣＲＥＡＴＥ文を含み、
前記ＣＲＥＡＴＥ文を読み込んで、少なくともテーブル名情報、列名情報、索引列情報を含む前記テーブル情報を生成する機能、をさらに前記コンピュータに実現させることを特徴とする請求項１に記載のプログラム。
【請求項３】
前記テーブル情報を生成する機能は、
前記入力されるＳＱＬ文に含まれるテーブル名情報、列名情報、索引列情報に基づいて、前記テーブル情報を生成する機能、を含むことを特徴とする請求項１に記載のプログラム。
【請求項４】
前記ＳＱＬ文を解析する機能により遂行された、前記ＳＱＬ静的解析定義情報に対する前記ＳＱＬ文のＳＱＬ静的解析結果情報を記憶する機能と、
前記入力されるＳＱＬ文が対象とするデータベースのテーブル構造が、データベースアクセスの性能劣化を引き起こす要因を含んでいるかを判定するためのテーブル構造解析定義情報を記憶する機能と、
前記ＳＱＬ静的解析結果情報のうち、少なくとも前記ＳＱＬ静的解析定義情報に対する前記ＳＱＬ文の解析結果が、前記データベースアクセスの性能劣化を引き起こす要因を含んでいると判別された、複数の前記ＳＱＬ文の前記ＳＱＬ静的解析結果情報と前記テーブル構造解析定義情報とを用い、前記テーブル構造を解析する機能と、
をさらに前記コンピュータに実現させることを特徴とする請求項１に記載のプログラム。
【請求項５】
入力されるＳＱＬ文が対象とするデータベースのテーブル情報を記憶する第１記憶部と、
前記ＳＱＬ文がデータベースアクセスの性能劣化を引き起こす要因を含んでいるかを判定するための定義情報を記憶する第２記憶部と、
前記テーブル情報と前記定義情報とを用い、前記ＳＱＬ文を解析するＳＱＬ文解析部と、
を備えることを特徴とするＳＱＬ解析装置。
【発明の詳細な説明】
【技術分野】
【０００１】
以下で説明する本発明に係る各実施形態は、データベースアクセスの性能改善に寄与するＳＱＬ静的解析プログラム及びＳＱＬ静的解析装置に関する。
【背景技術】
【０００２】
従来からデータベースの性能問題の調査や改善を行う手法として、ＳＱＬに対する解析手法がある。例えば、実際にデータベースが構築された記憶装置に接続してＳＱＬ文による問い合わせを行ってその応答時間等を測定し、ＳＱＬ文をデータベースでのＳＱＬ文の実行処理により解析する「動的」なＳＱＬの解析手法がある。
【０００３】
しかしながら、この動的なＳＱＬの解析手法は、実際にデータベースに接続し、記憶装置側にＳＱＬ文の実行によるレコードアクセス処理又は／及びレコード抽出処理等を行わせるので、記憶装置側での処理が必要となる。すなわち、データベースが存在しない環境やデータベースがネットワークにつながっていない環境では行うことができず、開発工程におけるＳＱＬ文の動的解析工程は後回しになる実情にあり、開発工程の早い段階でデータベースの性能問題に対する分析・評価を行うことができなかった。このため、データベースの性能に問題が有る場合にその要因の発見が遅くなってしまう課題があった。
【０００４】
特に、データベースのレコード分布とレコード量が実際の運用時とおよそ一致している環境が整っていない場合、ＳＱＬ文がデータベースの性能劣化にどのように関与するかを把握することは困難であり、データベースの構成やレコード量に影響されてしまう。このため、動的にＳＱＬの解析を行っても開発工程でデータベースの性能を的確に分析・評価することができなかった。
【０００５】
これに対して、ＳＱＬ文を用いた実際のデータベースへの問い合わせを行わずに（データーベースとは独立して）、ＳＱＬ文がＳＱＬ文法（データ定義言語やデータ操作言語等）に合っているか、その記述が間違っていないか、などのＳＱＬ文自体からデータベースの性能問題を分析・評価する「静的」なＳＱＬの解析手法もある。しかし、この場合、型の不一致やインデックスに基づくデータベースの性能劣化等の要因まで把握することができない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−２４９７８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明に係る各実施形態は、データベースアクセスの性能改善に寄与する、静的なＳＱＬの解析手法（ＳＱＬ静的解析）に工夫を加えた、ＳＱＬ静的解析プログラム及びＳＱＬ静的解析装置を提供することを目的とする。
【０００８】
また、本発明に係る各実施形態は、複数のＳＱＬ文に跨るデータベースアクセスの性能劣化を解析し、ＳＱＬ文の静的な解析処理を通じてデータベースアクセスの性能改善に寄与するＳＱＬ静的解析プログラム及びＳＱＬ静的解析装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明に係る一実施形態のＳＱＬ静的解析プログラムは、コンピュータに、入力されるＳＱＬ文が対象とするデータベースのテーブル情報を記憶する機能と、前記ＳＱＬ文がデータベースアクセスの性能劣化を引き起こす要因を含んでいるかを判定するためのＳＱＬ静的解析定義情報を記憶する機能と、前記テーブル情報と前記ＳＱＬ静的解析定義情報とを用い、前記ＳＱＬ文を解析する機能と、を実現させることを特徴とする。
【図面の簡単な説明】
【００１０】
【図１】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の構成を例示する概略ブロック図である。
【図２】本発明に係る第１実施形態におけるＳＱＬ静的解析装置のＳＱＬ静的解析処理における入力データと出力データとの関係を例示した図である。
【図３】本発明に係る第１実施形態におけるＳＱＬ静的解析装置のテーブル情報の一例を示した図である。
【図４】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の各部の機能及び処理遷移を例示した模式図である。
【図５】本発明に係る第１実施形態におけるＳＱＬ静的解析装置のＳＱＬ文パース処理の一例を示した図である。
【図６】本発明に係る第１実施形態におけるＳＱＬ静的解析装置のＳＱＬ静的解析処理における入力データと出力データとの関係の変形例を例示した図である。
【図７】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第１のＳＱＬ静的解析処理例を示すフローチャートである。
【図８】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第２のＳＱＬ静的解析処理例を示すフローチャートである。
【図９】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第３のＳＱＬ静的解析処理例を示すフローチャートである。
【図１０】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第４のＳＱＬ静的解析処理例を示すフローチャートである。
【図１１】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第５のＳＱＬ静的解析処理例を示すフローチャートである。
【図１２】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第６、第７のＳＱＬ静的解析処理例を示すフローチャートである。
【図１３】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第８のＳＱＬ静的解析処理例を示すフローチャートである。
【図１４】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第９のＳＱＬ静的解析処理例を示すフローチャートである。
【図１５】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第１０のＳＱＬ静的解析処理例を示すフローチャートである。
【図１６】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第１１のＳＱＬ静的解析処理例を示すフローチャートである。
【図１７】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第１２のＳＱＬ静的解析処理例を示すフローチャートである。
【図１８】本発明に係る第１実施形態におけるＳＱＬ静的解析装置の第１３のＳＱＬ静的解析処理例を示すフローチャートである。
【図１９】本発明に係る第２実施形態におけるＳＱＬ静的解析装置の構成を例示する概略ブロック図である。
【図２０】本発明に係る第２実施形態におけるＳＱＬ静的解析装置のＳＱＬ静的解析処理における入力データと出力データとの関係を例示した図である。
【図２１】本発明に係る第２実施形態におけるＳＱＬ静的解析装置のテーブル情報例を示す図である。
【図２２】本発明に係る第２実施形態におけるＳＱＬ静的解析装置のＳＱＬ文入力データの一例を示す図である。
【図２３】本発明に係る第２実施形態におけるＳＱＬ静的解析装置の各部の機能及び処理遷移を例示した模式図である。
【図２４】本発明に係る第２実施形態におけるＳＱＬ静的解析装置のＳＱＬ静的解析処理結果の一例を示す図である。
【図２５】図２４に続く本発明に係る第２実施形態におけるＳＱＬ静的解析装置のＳＱＬ静的解析処理結果の一例を示す図である。
【図２６】本発明に係る第２実施形態におけるＳＱＬ静的解析装置のテーブル判定処理を示すフローチャートである。
【図２７】本発明に係る第２実施形態におけるＳＱＬ静的解析装置の第１のテーブル判定処理例を示すフローチャートである。
【図２８】図２７の第１のテーブル判定処理例におけるテーブル判別結果例（ａ）、警告メッセージ例（ｂ）を示す図である。
【図２９】本発明に係る第２実施形態におけるＳＱＬ静的解析装置の第２のテーブル判定処理例を示すフローチャートである。
【図３０】図２９の第２のテーブル判定処理例におけるテーブル判別結果例（ａ）、警告メッセージ例（ｂ）を示す図である。
【図３１】本発明に係る第２実施形態におけるＳＱＬ静的解析装置の第３のテーブル判定処理例を示すフローチャートである。
【図３２】図３１の第３のテーブル判定処理例におけるテーブル判別結果例（ａ）、警告メッセージ例（ｂ）を示す図である。
【図３３】本発明に係る第２実施形態におけるＳＱＬ静的解析装置の第４のテーブル判定処理例を示すフローチャートである。
【図３４】図３３の第４のテーブル判定処理例におけるテーブル判別結果例（ａ）、警告メッセージ例（ｂ）を示す図である。
【図３５】本発明に係る第２実施形態におけるＳＱＬ静的解析装置の第５のテーブル判定処理例を示すフローチャートである。
【図３６】図３５の第５のテーブル判定処理例におけるテーブル判別結果例（ａ）、警告メッセージ例（ｂ）を示す図である。
【図３７】本発明に係る第２実施形態におけるＳＱＬ静的解析装置の第６のテーブル判定処理例を示すフローチャートである。
【図３８】図３７の第６のテーブル判定処理例におけるテーブル判別結果例（ａ）、警告メッセージ例（ｂ）を示す図である。
【発明を実施するための最良の形態】
【００１１】
以下、本発明に係る各実施形態について図面を用いて説明する。
【００１２】
（第１実施形態）
図１から図１８は、本発明に係る第１実施形態のＳＱＬ静的解析プログラムが適用されたＳＱＬ静的解析装置を示す図である。
【００１３】
図１に示すように、本実施形態のＳＱＬ静的解析装置１００は、制御部１０、記憶部２０及び通信制御部３０を含んで構成される。また、ＳＱＬ静的解析装置１００は、液晶ディスプレイ等のディスプレイ装置１１０及びキーボードやマウス等の操作入力部１２０が接続可能であり、例えば、コンピュータ等の情報処理装置により実現される。
【００１４】
制御部１０は、ＳＱＬ静的解析装置１００全体の制御を司る中央演算部であり、所定の記憶領域に記憶されている本実施形態のＳＱＬ静的解析プログラムを読み込んで実行することにより、本実施形態のＳＱＬ静的解析装置１００が各処理を遂行する処理部として機能する。制御部１０は、データ入力制御部１１、ＳＱＬ文パース処理部１２、ＳＱＬ文解析部１３、結果出力部１４、及びテーブル情報構築部１５の各部を含んで構成される。
【００１５】
記憶部２０は、ＳＱＬ静的解析装置１００の記憶装置としての役割を担い、その記憶領域に、ＳＱＬ文２１、テーブル情報２２、及びチェックルール情報２３を記憶（保持）する。
【００１６】
ここで、図２〜図５を参照して、本実施形態のＳＱＬ静的解析装置１００のＳＱＬ静的解析処理について詳細に説明する。
【００１７】
図２に示すように、本実施形態のＳＱＬ静的解析装置１００は、データベースでの実行処理によりＳＱＬ文を解析するのではなく、入力データとして、ＳＱＬ文、チェックルール情報、及びテーブル情報を用い、データベースでの実行処理を必要としない静的な環境下でＳＱＬ文のデータベースアクセスの性能劣化、言い換えれば、ＳＱＬ文がデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるかを解析する。
【００１８】
そして、その解析結果は、出力データ（データベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文と該当のチェックルール）として開発者等にフィードバックされ、データベースアクセスの性能劣化を引き起こす要因を含む問題のあるＳＱＬ文の修正を促す。開発者は、フィードバックされた解析結果に基づいて手作業でＳＱＬ文を修正し、修正したＳＱＬ文を再度ＳＱＬ静的解析装置１００による解析（分析・評価）を通じて解析する。これを繰り返すことで、データベースでの実行処理を行わずにデータベース性能の劣化要因を排除したＳＱＬ文の品質向上を図ることができる。
【００１９】
なお、本実施形態のＳＱＬ静的解析装置１００は、データベースでの実行処理を必要としない静的な環境下での解析処理であり、実際に構築されたデータベース（記憶装置）と接続可能な環境下であってもよい。
【００２０】
図３は、テーブル情報の一例を示す図であり、図３（ａ）は、テーブル名、列名（カラム名）、型（データ型）、索引列を含むテーブル情報の一例である。図３（ａ）の例において、索引列に「○」を含むものが該当のカラムが索引列であることを示し、「☆」印である場合は、複合索引であることを示す。このテーブル情報は、本実施形態のＳＱＬ静的解析装置１００を通じて解析するＳＱＬ文に対応するデータベースのテーブル情報である。
【００２１】
また、本実施形態のテーブル情報は、図３（ａ）に示した構築されたテーブル情報以外にも例えば、ＣＲＥＡＴＥ  ＴＡＢＬＥ文やＣＲＥＡＴＥ  ＩＮＤＥＸ文を含むことができる。すなわち、構築される前のテーブル情報に関する情報を含むことができ、本実施形態のテーブル情報構築部１５は、このようなＣＲＥＡＴＥ  ＴＡＢＬＥ文からテーブル情報を生成する。また、その他のテーブル情報に関する情報として、ＳＱＬ文がある。つまり、入力されるＳＱＬ文に含まれるテーブル名、列名、型、索引列を用いてテーブル情報を生成することもできる。この場合、テーブル情報構築部１５は、ＳＱＬ文パース処理部１２を通じて句、単語単位に分割された情報からテーブルに関する情報を抽出してテーブル情報を生成することもできる。
【００２２】
また、本実施形態のＳＱＬ静的解析装置１００が、実際に構築されたデータベース（記憶装置）と接続可能な環境下である場合は、ＳＱＬ静的解析装置１００（データ入力制御部１１）は、通信制御部３０を通じてデータベースに接続し、構築されたデータベースからテーブル情報を取得して記憶部２０に記憶することもできる。また、データベース以外の記憶装置等に記憶されている、上述した構築される前のテーブル情報に関するデータについて、通信制御部３０を通じて取得することもできる。
【００２３】
次に、本実施形態のチェックルール情報について説明する。チェックルール情報は、ＳＱＬ文がデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるかを判定する定義情報（ＳＱＬ静的解析定義情報）である。チェックルール情報は、以下の１３個の定義情報を含む。
（１）ＷＨＥＲＥ句で索引列に計算を行っていないか？
（２）ＷＨＥＲＥ句で索引列に関数を適用していないか？
（３）ＷＨＥＲＥ句で索引列に中間一致検索、後方一致検索が行われていないか？
（４）ＷＨＥＲＥ句で索引列に否定条件が使われていないか？
（５）ＷＨＥＲＥ句で索引列にＮＵＬＬ条件が使われていないか？
（６）ＷＨＥＲＥ句で先頭に指定する列が、複合索引の最初の列か？
（７）ＷＨＥＲＥ句で複合索引の途中の列を飛ばして指定していないか？
（８）暗黙の型変換は行われていないか？
（９）別名を利用しているか？
（１０）ワイルドカード（検索する際にどんなパターンにもマッチする特殊文字）を使っていないか？
（１１）列番号を使っていないか？
（１２）全て大文字で記載しているか？
（１３）リテラル値（プログラム上に直接に書かれた数値や文字列）が異なる場合はバインド変数（ＳＱＬ文の中で用いられる変数）を利用しているか？
【００２４】
図４は、本実施形態におけるＳＱＬ静的解析装置１００について、各部の機能及び処理遷移を例示した模式図である。
【００２５】
ＳＱＬ文２１、チェックルール情報２２、及びテーブル情報２３は、操作入力装置１２０を通じて入力される入力データであり、記憶部２０に記憶される。この入力制御は、データ入力制御部１１が遂行し、例えば、データ入力制御部１１は、ディスプレイ装置１１０に所定の入力画面等を表示し、入力画面を通じて入力されたＳＱＬ文２１、チェックルール情報２２、及びテーブル情報２３を記憶部２０に記憶する処理を遂行することができる。
【００２６】
また、ＳＱＬ文２１、チェックルール情報２２、及びテーブル情報２３は、入力作業を経ずともこれら入力データが記憶された記憶媒体から又は上述したようにネットワークを通じて他の装置から取得可能であり、ＳＱＬ静的解析装置１００は、記憶部２０にこれら入力データを記憶させることもできる。
【００２７】
まず、ＳＱＬ文パース処理部１２は、記憶部２０に記憶されている解析対象のＳＱＬ文２１を読み出し、パース処理を遂行する。図５は、本実施形態のＳＱＬ文パース処理の一例を示した図である。この例にあるＳＱＬ文２１では、「ＦＲＯＭ  ＥＭＰ  Ｅ」という命令において「ＥＭＰ」という元々のテーブル名に「Ｅ」という別名が定義されている。そこで、本実施形態では、別名（Ｅ）を元のテーブル名（ＥＭＰ）に戻してからパース処理を実行している。
【００２８】
図５において、ＳＱＬ文パース処理部１２は、読み込んだＳＱＬ文２１をデータ定義語やデータ操作語等に基づいて句、単語単位に分解をする。具体的には、ＳＥＬＥＣＴ句、ＦＲＯＭ句、ＷＨＥＲＥ句別に分割し、さらにＳＥＬＥＣＴ句とＦＲＯＭ句との間に含まれる各単語、ＦＲＯＭ句とＷＨＥＲＥ句との間に含まれる各単語、ＷＨＥＲＥ句以降に含まれる各単語を分解する。図５に示すように、ＳＥＬＥＣＴ句、ＦＲＯＭ句、ＷＨＥＲＥ句のそれぞれに紐付く１つ又は複数の単語がパース処理を通じて分解、抽出される。
【００２９】
ＳＱＬ文パース処理部１２によってパース処理されたＳＱＬ文２１は、ＳＱＬ文解析部１３に出力され、ＳＱＬ文解析部１３がテーブル情報２３及びチェックルール情報２２を用いて、ＳＱＬ静的解析処理を遂行する。このとき、テーブル情報２３がＣＲＥＡＴＥ  ＴＡＢＬＥ文のようなテーブルが構築される前のテーブル情報に関する情報である場合、テーブル情報構築部１５によって生成されたテーブル情報がＳＱＬ文解析部１３に入力される。なお、具体的なＳＱＬ静的解析処理については後述する。
【００３０】
ＳＱＬ文解析部１３は、ＳＱＬ静的解析処理の結果を結果出力部１５に出力し、結果出力部１５は、データベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文と解析結果（チェックＯＫ／警告）とともに、解析結果が警告である場合に該当するチェックルールを出力データＲとしてディスプレイ装置１１０に表示出力する。
【００３１】
ここで、図５にあるパース処理の一例の詳細を補足的に説明する。ＳＱＬ文２１では、「ＦＲＯＭ  ＥＭＰ  Ｅ」という命令において「ＥＭＰ」という元々のテーブル名が別名の「Ｅ」と置き換えられて定義されている。そこで、本実施形態では、このように定義された別名（Ｅ）を元のテーブル名（ＥＭＰ）に戻してからパース処理を実行している。そして、これと同様に定義された別名（Ｅ）を元のテーブル名（ＥＭＰ）に戻すことで、「Ｅ．ＮＡＭＥ」と記される「Ｅテーブルに属するＮＡＭＥ列の指定」は、「ＥＭＰ．ＮＡＭＥ」という「ＥＭＰテーブルに属するＮＡＭＥ列の指定」になる。更に、同じく「Ｅ．ＳＡＬ」と記される「Ｅテーブルに属するＳＡＬ列の指定」は、「ＥＭＰ．ＳＡＬ」という「ＥＭＰテーブルに属するＳＡＬ列の指定」となる。
【００３２】
これらのように別名（Ｅ）を元のテーブル名（ＥＭＰ）に戻している理由は、置き換えられて定義された別名のままパース処理をしてしまうと、個々の指定に係る要素（例えば、「Ｅ．ＮＡＭＥ」）から本来のテーブル（例えば、ＥＭＰテーブル）を見つけるための処理が更に必要となるためである。つまり、予め別名（Ｅ）で定義されている部分を元のテーブル名（ＥＭＰ）に戻すことによって、ＳＱＬ静的解析の速度を上げることができる、という効果が得られるのである。
【００３３】
図６は、本実施形態のＳＱＬ静的解析装置１００の変形例を例示した図である。図６に示すように、例えば、ＳＱＬ文をＯ／Ｒマッピングツールの定義ファイルから自動的に抽出するように構成することも可能である。図６の例では、入力データとしてＯ／Ｒマッピングツールの定義ファイルを使用し、該定義ファイルに含まれるＳＱＬ文のみを抽出する。この場合、ＳＱＬ静的解析装置１００は、ＳＱＬ文抽出部を備えることができる。
【００３４】
＜第１のＳＱＬ静的解析処理例＞
本実施形態の第１のＳＱＬ静的解析処理は、チェックルール情報「（１）ＷＨＥＲＥ句で索引列に計算を行っていないか？」の解析処理の一例を示すものである。
【００３５】
図７に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、テーブル情報２３からテーブル名及び索引列の各情報が入力され、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ１０１、Ｓ１０２）。ＳＱＬ文解析部１３は、テーブル情報を用いて入力されたＳＱＬ文の中に索引列が含まれているか否かを検索する（Ｓ１０３）。検索の結果、索引列が存在すると判別された場合、その検索された索引列に対して算術演算子、論理演算子などの演算子が使用されているか（演算子を含むか）否かを判別する（Ｓ１０４）。
【００３６】
具体的には、検索された索引列の前後に「＋」、「―」、「／」、「＊」などの算術演算子が含まれるか否かを判別する。このとき、索引列と演算子との間に含まれる括弧「（  」、「  ）」等は無視することができる。
【００３７】
例えば、索引列としてＳＡＬ列を含むＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  Ｅ  ＷＨＥＲＥ  Ｅ．ＳＡＬ  ＊  １．１  ＞  １００；」の場合、テーブル情報から当該ＳＱＬ文が索引列ＳＡＬを含むと判別され、さらに索引列ＳＡＬに対して演算子「＊」が使用されていると判別する。
【００３８】
そして、ＳＱＬ文が索引列を含み、かつ索引列に対して演算子が使用されていると判別された場合、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ１０５）。
【００３９】
＜第２のＳＱＬ静的解析処理例＞
本実施形態の第２のＳＱＬ静的解析処理は、チェックルール情報「（２）ＷＨＥＲＥ句で索引列に関数を適用していないか？」の解析処理の一例を示すものである。
【００４０】
図８に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、テーブル情報２３からテーブル名及び索引列の各情報が入力され、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ１０１、Ｓ１０４）。このとき、本ＳＱＬ静的解析処理では、ＳＱＬ文が対象とするデータベースの種類及びデータベースの種類に応じたＳＱＬ関数の情報を入力データとして使用する（図３（ｂ）参照）。
【００４１】
データベースの種類は、例えば、Ｏｒａｃｌｅ（オラクル社の登録商標）、ＳＱＬ  Ｓｅｒｖｅｒ（マイクロソフト社の米国及びその他の国における登録商標または商標）、ＤＢ２（ＩＢＭ社の登録商標）などがある。そして、例えばＯｒａｃｌｅによるデータベースは、そのデータベースの機能として所定のＳＱＬ関数（ＳＵＭ関数、ＡＶＧ関数等）を備えている。このため、データベースの種類によりそのデータベースが備えるＳＱＬ関数の情報を取得することができる。これらの情報は、所定のデータベースライブラリ等から取得することができ、テーブル情報として記憶部２０に記憶される。本ＳＱＬ静的解析処理では、ステップＳ２０２でＳＱＬ文が対象とするデータベースの種類を指定（入力）し、ステップＳ２０３において、入力されたデータベースの種類に対してそのデータベースが備えるＳＱＬ関数に関する情報を所定のデータベースライブラリから取得する。なお、ステップＳ２０２、Ｓ２０３は、テーブル情報構築部１５により遂行される。
【００４２】
ＳＱＬ文解析部１３は、テーブル情報を用いて入力されたＳＱＬ文の中に索引列が含まれているか否かを検索する（Ｓ２０５）。検索の結果、索引列が存在すると判別された場合、その検索された索引列に対してＳＱＬ関数が使用されているか（ＳＱＬ関数を含むか）否かを判別する（Ｓ２０６）。
【００４３】
具体的には、検索された索引列（ｋａｋａｋｕ）に対してＳＵＭ（ｋａｋａｋｕ）やＡＶＧ（ｋａｋａｋｕ）などの関数が含まれるか否かを判別する。
【００４４】
例えば、索引列としてＨＩＲＥ＿ＤＡＴＥ列を含むＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  Ｅ  ＷＨＥＲＥ  ＴＯ＿ＣＨＡＲ（Ｅ．ＨＩＲＥ＿ＤＡＴＥ，  ’ＤＤＭＭＹＹ’）  ＝  ‘０１０４０３’；」の場合、テーブル情報から当該ＳＱＬ文が索引列ＨＩＲＥ＿ＤＡＴＥを含むと判別され、さらに索引列ＨＩＲＥ＿ＤＡＴＥ列に対して関数  ＴＯ＿ＣＨＡＲが使用されていると判別する。
【００４５】
そして、ＳＱＬ文が索引列を含み、かつ索引列に対して関数が使用されていると判別された場合、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ２０７）。
【００４６】
＜第３のＳＱＬ静的解析処理例＞
本実施形態の第３のＳＱＬ静的解析処理は、チェックルール情報「（３）ＷＨＥＲＥ句で索引列に中間一致検索、後方一致検索が行われていないか？」の解析処理の一例を示すものである。
【００４７】
図９に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、テーブル情報２３からテーブル名及び索引列の各情報が入力され、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ３０１、Ｓ３０２）。ＳＱＬ文解析部１３は、テーブル情報を用いて入力されたＳＱＬ文の中に索引列が含まれているか否かを検索する（Ｓ３０３）。検索の結果、索引列が存在すると判別された場合、その検索された索引列に対して索引列に対して中間一致検索、後方一致検索が使用されているか（中間一致検索式、後方一致検索式を含むか）否かを判別する（Ｓ３０４）。
【００４８】
具体的には、検索された索引列に対して「ＬＩＫＥ」が使用されており、かつ検索条件に「％文字列」が含まれているか否かを判別する。このとき、「文字列％」などの前方一致検索式は除外することができる。
【００４９】
例えば、索引列としてＳＡＬ列を含むＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  Ｅ  ＷＨＥＲＥ  Ｅ．ＳＡＬ  ＬＩＫＥ  ‘‘％ｚｕ％’；」，ＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  Ｅ  ＷＨＥＲＥ  Ｅ．ＳＡＬ  ＬＩＫＥ  ’％ｋｉ’；」の場合、テーブル情報から当該ＳＱＬ文が索引列ＳＡＬを含むと判別され、さらに索引列ＳＡＬに対して中間一致、後方一致が使用されていると判別する。
【００５０】
そして、ＳＱＬ文が索引列を含み、かつ索引列に対して中間一致、後方一致が使用されていると判別された場合、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ３０５）。
【００５１】
＜第４のＳＱＬ静的解析処理例＞
本実施形態の第４のＳＱＬ静的解析処理は、チェックルール情報「（４）ＷＨＥＲＥ句で索引列に否定条件が使われていないか？」の解析処理の一例を示すものである。
【００５２】
図１０に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、テーブル情報２３からテーブル名及び索引列の各情報が入力され、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ４０１、Ｓ４０２）。ＳＱＬ文解析部１３は、テーブル情報を用いて入力されたＳＱＬ文の中に索引列が含まれているか否かを検索する（Ｓ４０３）。検索の結果、索引列が存在すると判別された場合、その検索された索引列に対して否定条件が使用されているか（否定条件を含むか）否かを判別する（Ｓ４０４）。
【００５３】
具体的には、検索された索引列に「！＝」、「＜＞」、「＾＝」などの否定条件が含まれるか否かを判別する。
【００５４】
例えば、索引列としてＳＡＬ列を含むＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  Ｅ  ＷＨＥＲＥ  Ｅ．ＳＡＬ  ！＝  １；」の場合、テーブル情報から当該ＳＱＬ文が索引列ＳＡＬを含むと判別され、さらに索引列ＳＡＬに対して否定条件「！＝」が使用されていると判別する。
【００５５】
そして、ＳＱＬ文が索引列を含み、かつ索引列に対して否定条件が使用されていると判別された場合、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ４０５）。
【００５６】
＜第５のＳＱＬ静的解析処理例＞
本実施形態の第５のＳＱＬ静的解析処理は、チェックルール情報「（５）ＷＨＥＲＥ句で索引列にＮＵＬＬ条件が使われていないか？」の解析処理の一例を示すものである。
【００５７】
図１１に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、テーブル情報２３からテーブル名及び索引列の各情報が入力され、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ５０１、Ｓ５０２）。ＳＱＬ文解析部１３は、テーブル情報を用いて入力されたＳＱＬ文の中に索引列が含まれているか否かを検索する（Ｓ５０３）。検索の結果、索引列が存在すると判別された場合、その検索された索引列に対してＮＵＬＬ条件が使用されているか（ＮＵＬＬ条件を含むか）否かを判別する（Ｓ４０４）。
【００５８】
具体的には、検索された索引列に「ＩＳ    ＮＵＬＬ」、「ＩＳ  ＮＯＴ  ＮＵＬＬ」などのＮＵＬＬ条件が含まれるか否かを判別する。
【００５９】
例えば、索引列としてＳＡＬ列を含むＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  Ｅ  ＷＨＥＲＥ  Ｅ．ＳＡＬ  ＩＳ  ＮＵＬＬ；」の場合、テーブル情報から当該ＳＱＬ文が索引列ＳＡＬを含むと判別され、さらに索引列ＳＡＬに対してＮＵＬＬ条件「ＩＳ  ＮＵＬＬ」が使用されていると判別する。
【００６０】
そして、ＳＱＬ文が索引列を含み、かつ索引列に対してＮＵＬＬ条件が使用されていると判別された場合、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ５０５）。
【００６１】
＜第６のＳＱＬ静的解析処理例＞
本実施形態の第６のＳＱＬ静的解析処理は、チェックルール情報「（６）ＷＨＥＲＥ句で先頭に指定する列が、複合索引の最初の列か？」の解析処理の一例を示すものである。
【００６２】
図１２に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、テーブル情報２３からテーブル名及び複合索引の各情報が入力され、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ６０１、Ｓ６０２）。ＳＱＬ文解析部１３は、ＳＱＬ文のＷＨＥＲＥ句を抽出する（Ｓ６０３）。そして、抽出したＷＨＥＲＥ句以下の分節に複合索引が含まれているか否かをテーブル情報を用いて検索する（Ｓ６０４）。検索の結果、複合索引が存在すると判別された場合、その検索された複合索引の索引列の順番を判別する（Ｓ６０５）。
【００６３】
具体的には、検索された複合索引の索引列が、例えば、索引列１、索引列２、索引列３となっている場合、抽出されたＷＨＥＲＥ句以下の分節が「ＷＨＥＲＥ  索引列３＝０  ＡＮＤ  索引列１＝１」のように、索引列１、索引列２、索引列３の順（降順）に使用されているか、言い換えれば、ＷＨＥＲＥ句以下の分節に複合索引の索引列を含む場合に、その分節の先頭が最初の索引列１でなく索引列３から作成されているか否かを判別する。
【００６４】
例えば、ＳＡＬ、ＮＡＭＥ、ＩＤ列の順の索引列を含む複合索引の場合、ＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  Ｅ  ＷＨＥＲＥ  Ｅ．ＩＤ  ＞  １０；」は、テーブル情報から当該ＳＱＬ文がＷＨＥＲＥ句以下の分節に複合索引を含むと判別され、さらに複合索引ＳＡＬ、ＮＡＭＥ、ＩＤの順に対して、３番目の列ＩＤしか使用されていないと判別する。
【００６５】
そして、ＳＱＬ文が索引列を含み、かつＷＨＥＲＥ句で先頭に指定する列が複合索引の最初の列でないと判別された場合、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ６０６）。
【００６６】
＜第７のＳＱＬ静的解析処理例＞
本実施形態の第７のＳＱＬ静的解析処理は、チェックルール情報「（７）ＷＨＥＲＥ句で複合索引の途中の列を飛ばして指定していないか？」の解析処理の一例を示すものである。本ＳＱＬ静的解析処理は、上述した第６のＳＱＬ静的解析処理に対して、ステップＳ６０５の判別処理のみが異なるので、図１２に基づいて説明する。
【００６７】
図１２に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、テーブル情報２３からテーブル名及び複合索引の各情報が入力され、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ６０１、Ｓ６０２）。ＳＱＬ文解析部１３は、ＳＱＬ文のＷＨＥＲＥ句を抽出する（Ｓ６０３）。そして、抽出したＷＨＥＲＥ句以下の分節に複合索引が含まれているか否かをテーブル情報を用いて検索する（Ｓ６０４）。検索の結果、複合索引が存在すると判別された場合、その検索された複合索引の索引列の順番を判別する（Ｓ６０５）。
【００６８】
具体的には、検索された複合索引の索引列が、例えば、索引列１、索引列２、索引列３となっている場合、抽出されたＷＨＥＲＥ句以下の分節が「ＷＨＥＲＥ  索引列１＝０  ＡＮＤ  索引列３＝１」のように、途中「索引列２」が使用されていないか、言い換えれば、ＷＨＥＲＥ句以下の分節に複合索引の索引列を含む場合に、その分節において複合索引の索引列順に途中の列を飛ばして指定しているか否かを判別する。
【００６９】
例えば、ＳＡＬ、ＮＡＭＥ、ＩＤ列の順の索引列を含む複合索引の場合、ＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  Ｅ  ＷＨＥＲＥ  Ｅ．ＳＡＬ  ＞  １  ＡＮＤ  Ｅ．ＩＤ  ＞  １０；」は、テーブル情報から当該ＳＱＬ文がＷＨＥＲＥ句以下の分節に複合索引を含むと判別され、さらに複合索引ＳＡＬ、ＮＡＭＥ、ＩＤの順に対して、２番目の列ＮＡＭＥを飛ばしていると判別する。
【００７０】
そして、ＳＱＬ文が索引列を含み、かつＷＨＥＲＥ句で複合索引の途中の列を飛ばして指定していると判別された場合、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ６０６）。
【００７１】
＜第８のＳＱＬ静的解析処理例＞
本実施形態の第８のＳＱＬ静的解析処理は、チェックルール情報「（８）暗黙の型変換は行われていないか？」の解析処理の一例を示すものである。
【００７２】
図１３に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、テーブル情報２３からテーブル名及び列の型の各情報が入力され、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ７０１、Ｓ７０２）。ＳＱＬ文解析部１３は、テーブル情報を用いて、入力されたＳＱＬ文の中で使われている型とテーブル上で定義されている型とを比較する（Ｓ７０３）。そして、入力されたＳＱＬ文の中で使われている型とテーブル上で定義されている型とが異なっていないかを判別する（Ｓ７０４）。
【００７３】
具体的には、テーブル情報においてテーブル上では文字列「ＶＡＲＣＨＡＲ２型」で定義されているが、ＳＱＬ文では数値「１（ＮＵＭＢＥＲ型）」で検索しているか否かを判別する。
【００７４】
例えば、ＳＩＺＥ列がＶＡＲＣＨＡＲ２型のＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  Ｅ  ＷＨＥＲＥ  Ｅ．ＳＩＺＥ  ＝  １；」の場合、ＶＡＲＣＨＡＲ２型とＮＵＭＢＥＲ型を比較し、入力されたＳＱＬ文の中で使われている型とテーブル上で定義されている型とが異なっていると判別する。
【００７５】
そして、入力されたＳＱＬ文の中で使われている型とテーブル上で定義されている型とが異なっていると判別された場合、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ７０５）。
【００７６】
＜第９のＳＱＬ静的解析処理例＞
本実施形態の第９のＳＱＬ静的解析処理は、チェックルール情報「（９）別名を利用しているか？」の解析処理の一例を示すものである。なお。本ＳＱＬ静的解析処理例を含めて第１３のＳＱＬ静的解析処理例までの解析処理では、テーブル情報２３を使用しない。
【００７７】
図１４に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ８０１）。ＳＱＬ文解析部１３は、入力されたＳＱＬ文の中から使用されているテーブルを検索し、テーブルが含まれているか否かを判別する（Ｓ８０２）。テーブルが含まれていると判別された場合、さらに、テーブルに対して別名（エイリアス）が使用されているか否かを判別する（Ｓ８０３）。
【００７８】
具体的には、検索されたテーブルに対して「テーブル名  ｔｅｍｐ」、や「テーブル名  ＡＳ  ｔｅｍｐ」となっていないか否かを判別する。
【００７９】
例えば、ＥＭＰテーブルを含むＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  ＷＨＥＲＥ  ＩＤ  ＝  １；」の場合、ＥＭＰテーブルに別名がつけられていないと判別する。
【００８０】
そして、入力されたＳＱＬ文で使われているテーブルに対して別名が使用されていないと判別された場合に、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ８０４）。
【００８１】
＜第１０のＳＱＬ静的解析処理例＞
本実施形態の第１０のＳＱＬ静的解析処理は、チェックルール情報「（１０）ワイルドカードを使っていないか？」の解析処理の一例を示すものである。
【００８２】
図１５に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ９０１）。ＳＱＬ文解析部１３は、入力されたＳＱＬ文の中からＳＥＬＥＣＴ句を検索し、ＳＥＬＥＣＴ句が含まれているか否かを判別する（Ｓ９０２）。ＳＥＬＥＣＴ句が含まれていると判別された場合、さらに、ＳＥＬＥＣＴ句の分節の中に「＊（ワイルドカード）」が使用されているか否かを判別する（Ｓ９０３）。
【００８３】
具体的には、ＳＱＬ文の「ＳＥＬＥＣＴ  ＊  ・・・  ＦＲＯＭ  ・・・」のＳＥＬＥＣＴ句から次の句（ＦＲＯＭ）までの間でパースされた項目に対して「＊」を使っているものがあるか否かを判別する。
【００８４】
例えば、ＳＥＬＥＣＴ句にワイルドカードが含まれるＳＱＬ文「ＳＥＬＥＣＴ  ＊  ＦＲＯＭ  ＥＭＰ  Ｅ  ＷＨＲＥＲ  ＩＤ  ＝  １００；」の場合、ＳＥＬＥＣＴ句にワイルドカードが使用されていると判別する。
【００８５】
そして、入力されたＳＱＬ文のＳＥＬＥＣＴ句にワイルドカードが使用されていると判別された場合に、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ９０４）。
【００８６】
＜第１１のＳＱＬ静的解析処理例＞
本実施形態の第１１のＳＱＬ静的解析処理は、チェックルール情報「（１１）列番号を使っていないか？」の解析処理の一例を示すものである。
【００８７】
図１６に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ１００１）。ＳＱＬ文解析部１３は、入力されたＳＱＬ文の中から「ＯＲＤＥＲ  ＢＹ」句を検索し、「ＯＲＤＥＲ  ＢＹ」句が含まれているか否かを判別する（Ｓ１００２）。「ＯＲＤＥＲ  ＢＹ」句が含まれていると判別された場合、さらに、「ＯＲＤＥＲ  ＢＹ」句の分節の中で列番号（数値のみの値）が含まれているか否かを判別する（Ｓ１００３）。
【００８８】
具体的には、ＳＱＬ文「ＯＲＤＥＲ  ＢＹ  １，  ｎａｍｅ，・・・」で「１」などの数値が含まれているか否かを判別する。なお、「ｎａｍｅ１」などの数値のみで構成されていないものは無視をすることができる。
【００８９】
例えば、「ＯＲＤＥＲ  ＢＹ」句が含まれるＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  Ｅ  ＯＲＤＥＲ  ＢＹ  ２；」の場合、「ＯＲＤＥＲ  ＢＹ」句に列番号２が使用されていると判別する。
【００９０】
そして、入力されたＳＱＬ文の「ＯＲＤＥＲ  ＢＹ」句の分節の中で列番号（数値のみの値）が使用されていると判別された場合に、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ１００４）。
【００９１】
＜第１２のＳＱＬ静的解析処理例＞
本実施形態の第１２のＳＱＬ静的解析処理は、チェックルール情報「（１２）全て大文字で記載しているか？」の解析処理の一例を示すものである。
【００９２】
図１７に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、テーブル情報２３からテーブル名、索引列、予約語の各情報が入力され、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ１０１、Ｓ１０４）。このとき、本ＳＱＬ静的解析処理では、ＳＱＬ文が対象とするデータベースの種類及びデータベースの種類に応じた予約語の情報を入力データとして使用する（不図示）。
【００９３】
データベースの種類は、例えば、Ｏｒａｃｌｅ、ＳＱＬ  Ｓｅｒｖｅｒ、ＤＢ２などがある。そして、例えばＯｒａｃｌｅによるデータベースは、そのデータベースの機能として所定の予約語が登録されている。このため、データベースの種類によりそのデータベースが備える予約語の情報を取得することができる。これらの情報は、所定のデータベースライブラリ等から取得することができ、テーブル情報として記憶部２０に記憶される。本ＳＱＬ静的解析処理では、ステップＳ１１０２でＳＱＬ文が対象とするデータベースの種類を指定（入力）し、ステップＳ１１０３において、入力されたデータベースの種類に対してそのデータベースに登録された予約語に関する情報を所定のデータベースライブラリから取得する。なお、ステップＳ１１０２、Ｓ１１０３は、テーブル情報構築部１５により遂行される。また、本ＳＱＬ静的解析処理では、テーブル情報を参照するが、予約語以外の情報は参照しない。
【００９４】
ＳＱＬ文解析部１３は、入力されたＳＱＬ文の中に予約語が含まれているか否かを検索する（Ｓ１１０５）。検索の結果、予約語が存在すると判別された場合、その検索された予約語が全て大文字で構成されているか（小文字を含まないか）否かを判別する（Ｓ１１０６）。
【００９５】
具体的には、予約語のみ対象とする場合はＳＱＬ文から予約語を抽出し、抽出した予約語が小文字を含んでいるか否かを判別する。ＳＱＬ文全体を対象とする場合は、文字列リテラル（プログラム上へ直接に書かれた、「’」で囲まれた文字列）を除く全体に対して小文字が含まれているか否かを判別する。
【００９６】
例えば、予約語として「ｉｄ」を含むＳＱＬ文「ＳＥＬＥＣＴ  Ｅ．ＮＡＭＥ  ＦＲＯＭ  ＥＭＰ  Ｅ  ＷＨＥＲＥ  ｉｄ  ＝  １００；」の場合、予約語「ｉｄ」に小文字が使用されていると判別する。
【００９７】
そして、ＳＱＬ文が少なくとも一部が小文字で構成された予約語を含むと判別された場合、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ１１０７）。
【００９８】
＜第１３のＳＱＬ静的解析処理例＞
本実施形態の第１３のＳＱＬ静的解析処理は、チェックルール情報「（１３）リテラル値が異なる場合はバインド変数を利用しているか？」の解析処理の一例を示すものである。
【００９９】
図１８に示すように、ＳＱＬ静的解析装置１００のＳＱＬ文解析部１３には、ＳＱＬパース処理部１２を介して出力されるＳＱＬ文が入力される（Ｓ１２０１）。ＳＱＬ文解析部１３は、入力されたＳＱＬ文の中からリテラル値を使用している全てのＳＱＬ文を抽出する（Ｓ１２０２）。そして、リテラル値を使用しているＳＱＬ文が複数あるか否かを判別し（Ｓ１２０３）、複数あると判別された場合に、抽出されたＳＱＬ文の中からリテラル値以外の部分が完全一致する複数のＳＱＬ文があるか否かを判別する（Ｓ１２０４）。
【０１００】
具体的には、全てのＳＱＬ文に対してリテラル値の部分を任意の変数（例えば、ＢＩＮＤなど）に置き換える。そして、置き換えたＳＱＬ文に対して他のＳＱＬ文の中から完全一致するＳＱＬ文があるか否かを判別する。
【０１０１】
例えば、
「ＳＥＬＥＣＴ  ＩＤ  ＦＲＯＭ  ＥＭＰ  ＷＨＥＲＥ  ＳＡＬ  ＝  １；」，
「ＳＥＬＥＣＴ  ＩＤ  ＦＲＯＭ  ＥＭＰ  ＷＨＥＲＥ  ＳＡＬ  ＝  ２；」，
「ＳＥＬＥＣＴ  ＩＤ  ＦＲＯＭ  ＥＭＰ  ＷＨＥＲＥ  ＳＡＬ  ＝  １０；」のように、リテラル値が異なるＳＱＬ文が複数あると判別し、さらにリテラル値のみが異なる同一のＳＱＬ文が複数ある、言い換えれば、リテラル値以外の部分が完全一致する複数のＳＱＬ文が存在すると判別する。
【０１０２】
そして、リテラル値のみが異なる同一のＳＱＬ文が複数ある（リテラル値が異なる場合にバインド変数を利用していない）と判別された場合に、ＳＱＬ文解析部１３は、判別結果（「警告」）を結果出力部１５に出力し、当該ＳＱＬ文に対してデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるＳＱＬ文である旨の警告表示を遂行する（Ｓ１２０４）。
【０１０３】
このように本実施形態のＳＱＬ静的解析装置１００は、実際に構築されたデータベースを必要とすることなく、テーブル情報を使用することによりテーブル項目の型の不一致やインデックスに関するデータベースアクセスの性能劣化などの問題を分析・評価することが可能となる。すなわち、データベースの構成やデータ量に影響を受けることなく、ＳＱＬ文がデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるかを、実際に構築されたデータベースを必要としない静的環境下で分析・評価することが可能となる。
【０１０４】
このため開発工程の早い段階で性能劣化に関する部分を低減させ、ＳＱＬ文を実際に構築されたデータベースで実行する動的な環境下でのＳＱＬ文の解析工程を低減させることができるとともに、データベースのチューニング（調整）に要する負担を軽減することが可能となる。
【０１０５】
また、本実施形態のＳＱＬ静的解析装置１００は、単体で実施できるため、データベースが存在しない環境下や、ネットワークにつながっていない環境下でもデータベースアクセスの性能劣化を引き起こす要因（問題）を分析・評価することができ、従来のようにデータベースからテーブル情報を取得しなければ（データベースが構築されていなければ）分析・評価ができなかった部分も、構築されるデータベースとは別に、ＳＱＬ文が対象とするデータベースのテーブル情報を使用することにより、より詳細な部分まで分析・評価することが可能となる。
【０１０６】
なお、本実施形態では、第１から第１３のＳＱＬ静的解析処理を個別に説明したが、これに限らず、例えば、１つのＳＱＬ文に対して第１から第１３のＳＱＬ静的解析処理を複合的に行うことも可能であり、全ての第１から第１３のＳＱＬ静的解析処理又は第１から第１３のＳＱＬ静的解析処理から任意に抽出した複数のＳＱＬ静的解析処理を複合的に行うことができ、また、各第１から第１３のＳＱＬ静的解析処理を単体で行うことも可能である。
【０１０７】
また、チェックルール情報として１３個の定義情報を例示したが、この例示は、ＳＱＬ文がデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるかを、分析・評価するために必要とされる最低限の定義情報であり、１３個の定義情報以外にＳＱＬ文がデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいると分析・評価することができる定義情報をさらに含むこともできる。
【０１０８】
（第２実施形態）
図１９から図３８は、本発明に係る第２実施形態のＳＱＬ静的解析プログラムが適用されたＳＱＬ静的解析装置を示す図である。
【０１０９】
本実施形態のＳＱＬ静的解析装置１００ａは、上述の第１実施形態におけるＳＱＬ静的解析装置１００に対し、複数のＳＱＬ文に跨るデータベースアクセスの性能劣化を解析し、ＳＱＬ静的解析処理を通じてデータベースアクセスの性能改善に寄与するデータベースのテーブル構造解析機能を備える。
【０１１０】
本実施形態のＳＱＬ静的解析処理を通じたデータベースのテーブル構造解析機能は、上述のようにＳＱＬ文の対象となるデータベース構造を、入力されるＳＱＬ文全体から解析し、個々のＳＱＬ文の解析では分析・評価できなかったデータベースのテーブル構造が有するデータベースアクセスの性能劣化を引き起こす要因（問題）を分析・評価する機能である。
【０１１１】
図１９に示すように、本実施形態のＳＱＬ静的解析装置１００ａは、制御部１０ａ、記憶部２０ａ及び通信制御部３０を含んで構成される。また、ＳＱＬ静的解析装置１００ａは、液晶ディスプレイ等のディスプレイ装置１１０及びキーボードやマウス等の操作入力部１２０が接続可能であり、例えば、コンピュータ等の情報処理装置により実現される。
【０１１２】
制御部１０ａは、ＳＱＬ静的解析装置１００全体の制御を司る中央演算部であり、所定の記憶領域に記憶されている本実施形態のＳＱＬ静的解析プログラムを読み込んで実行することにより、本実施形態のＳＱＬ静的解析装置１００ａが各処理を遂行する処理部として機能する。制御部１０ａは、データ入力制御部１１、ＳＱＬ文パース処理部１２、ＳＱＬ文解析部１３、結果出力部１４、テーブル情報構築部１５及び問題テーブル判定部１６の各部を含んで構成される。
【０１１３】
記憶部２０ａは、ＳＱＬ静的解析装置１００ａの記憶装置としての役割を担い、その記憶領域に、ＳＱＬ文２１、テーブル情報２２、チェックルール情報２３、ＳＱＬ解析結果情報２４、及びテーブル判定ルール情報２５を記憶（保持）し、一時記憶領域２６を有する。
【０１１４】
図２０は、本実施形態におけるＳＱＬ静的解析装置１００ａのＳＱＬ静的解析処理を通じたテーブル構造解析処理における入力データと出力データとの関係を例示した図である。図２０に示すように、本実施形態のＳＱＬ静的解析装置１００ａは、上述の第１実施形態と同様にデータベースでの実行処理を必要としない静的な環境下で、上述したＳＱＬ文の静的な解析処理を通じてデータベースのテーブル構造にデータベースアクセスの性能劣化を引き起こす要因を含んでいるかを解析する。
【０１１５】
入力された複数のＳＱＬ文に対して上述の第１実施形態のＳＱＬ静的解析処理を遂行し、その解析結果情報（ＳＱＬ静的解析結果情報）を用いて、データベースのテーブル構造が有するデータベースアクセスの性能劣化を引き起こす要因（問題）を解析するテーブル構造解析処理を遂行する。そして、その解析結果は、出力データ（データベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるテーブルと該当のテーブル判定ルール）として開発者等にフィードバックされ、データベースアクセスの性能劣化を引き起こす要因を含む問題のあるテーブル情報の修正を促す。開発者は、フィードバックされた解析結果に基づいて手作業でテーブル情報を修正し、修正したテーブル情報を再度ＳＱＬ静的解析装置１００ａによる解析（分析・評価）を通じて解析する。これを繰り返すことで、データベースのテーブル構造が有するデータベースアクセス性能の劣化要因を排除したテーブル構造の向上を図ることができる。
【０１１６】
なお、本実施形態のＳＱＬ静的解析装置１００ａは、データベースでの実行処理を必要としない静的な環境下での解析処理であり、実際に構築されたデータベース（記憶装置）と接続可能な環境下であってもよい。
【０１１７】
図２１は、本実施形態のテーブル情報の一例を示す図であり、各々テーブル名、列名（カラム名）、型（データ型）、索引列を含むテーブル情報の一例である。図２１の例において、索引列に「○」を含むものが該当のカラムが索引列であることを示し、「☆」印である場合は、複合索引であることを示す。このテーブル情報は、本実施形態のＳＱＬ静的解析装置１００ａを通じて解析するＳＱＬ文に対応するデータベースのテーブル情報である。
【０１１８】
なお、本実施形態のテーブル情報は、図２１に示した構築されたテーブル情報以外にも、上述の第１実施形態同様、ＣＲＥＡＴＥ  ＴＡＢＬＥ文やＣＲＥＡＴＥ  ＩＮＤＥＸ文などの構築される前のテーブル情報に関する情報を含むことができ、また、入力されるＳＱＬ文に含まれるテーブル名、列名、型、索引列を用いてテーブル情報を生成することもできる。
【０１１９】
また、本実施形態のＳＱＬ静的解析装置１００ａが、実際に構築されたデータベース（記憶装置）と接続可能な環境下である場合は、ＳＱＬ静的解析装置１００ａ（データ入力制御部１１）は、通信制御部３０を通じてデータベースに接続し、構築されたデータベースからテーブル情報を取得して記憶部２０ａに記憶することもできる。また、データベース以外の記憶装置等に記憶されている上述した構築される前のテーブル情報に関する情報を通信制御部３０を通じて取得することもできる。
【０１２０】
図２２は、ＳＱＬ静的解析装置１００ａに入力されるＳＱＬ文２１の一例を示す図であり、図２２の例では、ＳＱＬ文２１は、１４個のＳＱＬ文を含み、各ＳＱＬ文には、各ＳＱＬ文を識別するＳＱＬ  ＩＤが付与されている。
【０１２１】
次に、本実施形態のチェックルール情報とテーブル判定ルール情報とについて説明する。本実施形態のチェックルール情報は、上述の第１実施形態同様、ＳＱＬ文がデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるかを判定する定義情報であり、上述の第１実施形態で示したＳＱＬ静的解析処理に使用される（１）から（１３）の全１３個の定義情報を含んだ構成としてもよいが、本実施形態のチェックルール情報は、少なくとも以下の６個の定義情報を含むように構成される。すなわち、本実施形態のチェックルール情報２２は、少なくとも以下の６個の定義情報を含む。
（１）索引列に計算を行っていないか？
（２）索引列に関数を適用していないか？
（３）索引列に中間一致検索、後方一致検索が行われていないか？
（５）索引列にＮＵＬＬ条件が使われていないか？
（７）複合索引を利用する場合。途中の列を飛ばしていないか？
（８）暗黙の型変換が行われていないか？
なお、括弧内の番号は、上述の第１実施形態における１３個の定義情報の説明において記載して番号と対応している。
【０１２２】
本実施形態のテーブル判定ルール情報は、チェックルール情報の（１）、（２）、（３）、（５）、（７）、及び（８）を用いたＳＱＬ静的解析結果情報から、データベースのテーブル構造がデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるかを判定する定義情報（テーブル構造解析定義情報）であり、以下６個の定義情報を含む。
（１）索引列が利用されているすべてのＳＱＬで索引列に同じ計算を行っていないか？
（２）ある索引列が利用されているすべてのＳＱＬで同じ関数が適用されていないか？
（３）ある索引列がすべてのＳＱＬで中間一致検索又は、後方一致検索が用いられているか？
（４）ある索引列にＮＵＬＬ条件が用いられているか？
（５）ある複合索引が利用されるときすべてのＳＱＬで同じ途中の列を飛ばして利用されているか？
（６）ある索引列が、常に同じ型に暗黙の型変換をされていないか？
【０１２３】
図２３は、本実施形態におけるＳＱＬ静的解析装置１００ａの各部の機能及び処理遷移を例示した模式図である。
【０１２４】
ＳＱＬ文２１、チェックルール情報２２、テーブル情報２３、及びテーブル判定ルール情報２５は、操作入力装置１２０を通じて入力される入力データであり、記憶部２０ａに記憶される。この入力制御は、データ入力制御部１１が遂行し、例えば、データ入力制御部１１は、ディスプレイ装置１１０に所定の入力画面等を表示し、入力画面を通じて入力されたＳＱＬ文２１、チェックルール情報２２、テーブル情報２３、及びテーブル判定ルール情報２５を記憶部２０ａに記憶する処理を遂行することができる。
【０１２５】
また、ＳＱＬ文２１、チェックルール情報２２、テーブル情報２３、及びテーブル判定ルール情報２５は、入力作業を経ずともこれら入力データが記憶された記憶媒体から又は上述したようにネットワークを通じて他の装置から取得可能であり、ＳＱＬ静的解析装置１００ａは、記憶部２０ａにこれら入力データを記憶させることもできる。
【０１２６】
まず、ＳＱＬ文パース処理部１２は、記憶部２０ａに記憶されている解析対象のＳＱＬ文２１を読み出し、パース処理を遂行する。なお、ＳＱＬ文パース処理部１２のパース処理は、上述の第１実施形態と同様である。
【０１２７】
ＳＱＬ文パース処理部１２によってパース処理されたＳＱＬ文２１は、ＳＱＬ文解析部１３に出力され、ＳＱＬ文解析部１３がテーブル情報２３及びチェックルール情報２２（定義情報（１）、（２）、（３）、（５）、（７）、及び（８））を用いて、ＳＱＬ静的解析処理を遂行する。このとき、テーブル情報２３がＣＲＥＡＴＥ  ＴＡＢＬＥ文のようなテーブルが構築される前のテーブル情報に関する情報である場合、テーブル情報構築部１５によって生成されたテーブル情報がＳＱＬ文解析部１３に入力される。なお、具体的なＳＱＬ静的解析処理については、上述した第１実施形態の第１、第２、第３、第５、第７及び第８のＳＱＬ静的解析処理例と同様であるので説明を省略する。
【０１２８】
ＳＱＬ文解析部１３は、ＳＱＬ静的解析処理の結果をＳＱＬ静的解析結果として記憶部２０ａに記憶する。図２４及び図２５は、図２２に示した１４個のＳＱＬ文についてチェックルール情報２２の定義情報（１）、（２）、（３）、（５）、（７）、及び（８）の各々に対するＳＱＬ静的解析結果の一例である。
【０１２９】
図２４及び図２５に示すように、ＳＱＬ文解析部１３は、図２２に示した各ＳＱＬ文をＳＱＬ  ＩＤ別にパース処理を介して読み込み、チェックルール情報２２の定義情報（１）、（２）、（３）、（５）、（７）、及び（８）を任意の順又は降順に各ＳＱＬ静的解析処理を遂行し、ＳＱＬ静的解析処理におけるチェックルール情報２２の各定義情報に合致（ヒット）しなかった場合は、「○」を、合致した場合は「×」をＳＱＬ静的解析結果情報として記憶部２０ａに記憶する。なお、「×」の場合は、ＳＱＬ文解析部１３は、さらに「×」と共に「；（コロン）」を介して付加情報（定義情報に合致し、ＳＱＬ文に含まれているデータベースアクセスの性能劣化を引き起こす要因に関する情報）を記憶部２０ａに記憶する。
【０１３０】
例えば、図２４の例では、ＳＱＬ  ＩＤが１のＳＱＬ文は、演算子「＋１００」が含まれており、この「＋１００」がデータベースアクセスの性能劣化を引き起こす要因であると判定される（上述の第１のＳＱＬ静的解析処理参照）。そこで、ＳＱＬ文解析部１３は、演算子を含む「＋１００」を付加情報として「×」と共に記憶部２０ａにＳＱＬ静的解析結果情報として記憶する。
【０１３１】
続いて、問題テーブル判定部１６は、各ＳＱＬ文についてＳＱＬ文解析部１３によるＳＱＬ静的解析処理が遂行され、そのＳＱＬ静的解析結果が記憶部２０ａに記憶されると、当該ＳＱＬ静的解析結果情報を用いてテーブル構造解析処理を遂行する。
【０１３２】
本実施形態の問題テーブル判定部１６は、ＳＱＬ静的解析結果情報とテーブル判定ルール情報２５とを用いてテーブル構造解析処理を遂行し、テーブル構造解析結果情報を記憶部２０ａの一時記憶領域に記憶する。
【０１３３】
なお、以下の説明においてチェックルール情報２２における（１），（２），（３），（５），（７），及び（８）の各定義情報と、テーブル判定ルール情報２５における（１），（２），（３），（４），（５），及び（６）は、各々対応関係にあり、チェックルール情報２２に対する各ＳＱＬ静的解析処理の解析結果に対して対応するテーブル判定ルール情報２５を用いた各テーブル構造解析処理を遂行する。
【０１３４】
図２６は、本実施形態のテーブル構造解析処理（テーブル判定処理）のフローチャートである。
【０１３５】
図２６に示すように、問題テーブル判定部１６は、記憶部２０ａを参照してＳＱＬ静的解析結果情報を読み込み（Ｓ１３０１）、読み込んだＳＱＬ静的解析処理結果情報をグルーピングする（Ｓ１３０２）。具体的には、テーブル名及び列名でグルーピングし、又はＳＱＬ  ＩＤ及びテーブル名を用いてグルーピングする。すなわち、テーブル名及び列名毎又はＳＱＬ  ＩＤ及びテーブル名毎のグループ別ＳＱＬ静的解析処理結果情報を生成する。
【０１３６】
そして、問題テーブル判定部１６は、グルーピング別に各ＳＱＬ静的解析処理結果情報を記憶部２０ａの一時記憶領域に記憶するとともに、一時記憶領域の記憶された当該グルーピング別の各ＳＱＬ静的解析処理結果情報を読み込み、テーブル判定ルール情報２５を用いてテーブル構造解析処理を遂行する（Ｓ１３０３、Ｓ１３０４）。
【０１３７】
ステップＳ１３０４において、問題テーブル判定部１６は、テーブル判定ルール情報２５における６個の定義情報を判定条件として判定処理を遂行し、判定条件を満たす場合は、ステップＳ１３０５に進み、テーブル判定結果「×」を一時記憶領域の記憶された当該グルーピング別のＳＱＬ静的解析処理結果情報に記憶するとともに、テーブル判定結果を結果出力部１５に出力し、結果出力部１５は、データベースアクセスの性能劣化を引き起こすテーブル構造上の要因を含む警告メッセージを出力データＲａとしてディスプレイ装置１１０に表示出力する（Ｓ１３０６）。
【０１３８】
一方、ステップＳ１３０４において判定条件を満たさないと判別された場合（データベースアクセスの性能劣化を引き起こすテーブル構造上の要因を含まないと判別された場合）は、ステップＳ１３０７に進み、テーブル判定結果「○」を一時記憶領域の記憶された該当のグルーピング別のＳＱＬ静的解析処理結果情報に記憶する。そして、グルーピング別の各ＳＱＬ静的解析結果情報を全て読み込みだか否かを判別し（Ｓ１３０８）、読み込んでいない場合は、ステップＳ１３０３に戻り、全てのデータを読み込んだと判別された場合にテーブル構造解析処理を終了する。
【０１３９】
＜第１のテーブル構造解析処理例＞
本実施形態の第１のテーブル構造解析処理は、第１のＳＱＬ静的解析処理のチェックルール情報「（１）索引列に計算を行っていないか？」のＳＱＬ静的解析処理結果に対してテーブル構造解析処理を遂行する一例を示すものである。
【０１４０】
図２７に示すように、ＳＱＬ静的解析装置１００ａの問題テーブル判定部１６は、ＳＱＬ文解析部１３により解析されたチェックルール情報「（１）索引列に計算を行っていないか？」のＳＱＬ静的解析結果情報が記憶されている記憶部２０ａを参照し（Ｓ１４０１）、テーブル名及び列名でＳＱＬ静的解析結果情報をグルーピングし、グルーピング別に各ＳＱＬ静的解析結果情報を一時記憶領域に記憶する（Ｓ１４０２）。
【０１４１】
図２８（ａ）は、一時記憶領域に格納されたテーブル名及び列名でのＳＱＬ静的解析結果情報のグルーピング例であり、ＳＱＬ  ＩＤに関係なく、チェックルール情報「（１）索引列に計算を行っていないか？」のＳＱＬ静的解析結果情報を用いてテーブル名及び列名でグループ化する。
【０１４２】
このとき、問題テーブル判定部１６は、図２４及び図２５に示したＳＱＬ静的解析結果情報に含まれる付加情報を（定義情報に合致し、ＳＱＬ文に含まれているデータベースアクセスの性能劣化を引き起こす要因）を合わせて一時記憶領域２６に記憶する。
【０１４３】
図２８（ａ）の例では、チェックルール情報「（１）索引列に計算を行っていないか？」に基づくＳＱＬ静的解析処理におけるＳＱＬ文に含まれているデータベースアクセスの性能劣化を引き起こす要因を記憶する「行われた演算」の項目が含まれ、問題テーブル判定部１６は、例えば、演算子を含む「＋１００」を付加情報として一時記憶領域２６の「行われた演算」の項目に記憶する。なお、チェックルール情報「（１）索引列に計算を行っていないか？」に基づくＳＱＬ静的解析処理において該当のＳＱＬ文にデータベースアクセスの性能劣化を引き起こす要因が含まれていない場合は、「行われた演算」の項目に「演算なし」と記憶する。
【０１４４】
このグルーピング処理は、ＳＱＬ静的解析結果情報の全てに対して行われ、テーブル名及び列名別に複数のグルーピング別ＳＱＬ静的解析結果情報が生成され、一時記憶領域２６に記憶される。
【０１４５】
次に、問題テーブル判定部１６は、一時記憶領域２６に記憶された当該グルーピング別の各ＳＱＬ静的解析結果情報を読み込み（Ｓ１４０３）、テーブル判定ルール情報２５を用いてテーブル構造解析処理を遂行する（Ｓ１４０４）。本第１のテーブル構造解析処理では、テーブル判定チェック情報「（１）索引列が利用されているすべてのＳＱＬで索引列に同じ計算を行っていないか？」を判定条件として判定処理を遂行する。
【０１４６】
具体的には、問題テーブル判定部１６は、ＴＡＢＬＥ１の索引列ＶＡＬＵＥ１のグルーピングされたＳＱＬ静的解析結果情報を読み込み、図２８（ａ）に示すように、ＴＡＢＬＥ１の索引列ＶＡＬＵＥ１について、「行われた演算」の項目すべてに「＋１００」が含まれ、全てのＳＱＬ文において同じ索引列ＶＡＬＵＥ１に同じ演算を行っている場合、問題テーブル判定部１６は、判定条件を満たすと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ１のグルーピングの判定結果項目にテーブル判定結果「×」を記憶する（Ｓ１４０５）。
【０１４７】
そして、問題テーブル判定部１６は、テーブル判定結果を結果出力部１５に出力し、結果出力部１５は、データベースアクセスの性能劣化を引き起こすテーブル構造上の要因を含む警告メッセージをディスプレイ装置１１０に表示出力する（Ｓ１４０６）。図２８（ｂ）は、警告メッセージ「ＴＡＢＬＥ１の索引列ＶＡＬＵＥ１は常に演算＋１００が行われて利用されているため、索引が利用されていません。索引列ＶＡＬＵＥ１の値を修正するか、関数索引を作成すべきです。」の出力例である。
【０１４８】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１４０８）、読み込んでいない場合は、ステップＳ１４０３に戻る。
【０１４９】
問題テーブル判定部１６は、続いてＴＡＢＬＥ２の索引列ＶＡＬＵＥ２について、「行われた演算」の項目に「＋１２０」を含むものの、「演算なし」も含まれており、全てのＳＱＬ文において同じ索引列ＶＡＬＵＥ２に同じ演算を行っていないため、判定条件を満たさないと判別し、一時記憶領域２６のＴＡＢＬＥ２の索引列ＶＡＬＵＥ２のグルーピングの判定結果項目にテーブル判定結果「○」を記憶する（Ｓ１４０７）。このとき、メッセージ等は出力されない。
【０１５０】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１４０８）、全てを読み込んだと判別された場合には、テーブル構造解析処理を終了する。
【０１５１】
＜第２のテーブル構造解析処理例＞
本実施形態の第２のテーブル構造解析処理は、第２のＳＱＬ静的解析処理のチェックルール情報「（２）索引列に関数を適用していないか？」のＳＱＬ静的解析処理結果に対してテーブル構造解析処理を遂行する一例を示すものである。
【０１５２】
図２９に示すように、ＳＱＬ静的解析装置１００ａの問題テーブル判定部１６は、ＳＱＬ文解析部１３により解析されたチェックルール情報「（２）索引列に関数を適用していないか？」のＳＱＬ静的解析結果情報が記憶されている記憶部２０ａを参照し（Ｓ１５０１）、テーブル名及び列名でＳＱＬ静的解析結果情報をグルーピングし、グルーピング別に各ＳＱＬ静的解析結果情報を一時記憶領域に記憶する（Ｓ１５０２）。
【０１５３】
図３０（ａ）は、一時記憶領域に格納されたテーブル名及び列名でのＳＱＬ静的解析結果情報のグルーピング例であり、ＳＱＬ  ＩＤに関係なく、チェックルール情報「（２）索引列に関数を適用していないか？」のＳＱＬ静的解析結果情報を用いてテーブル名及び列名でグループ化する。
【０１５４】
このとき、問題テーブル判定部１６は、図２４及び図２５に示したＳＱＬ静的解析結果情報に含まれる付加情報を（定義情報に合致し、ＳＱＬ文に含まれているデータベースアクセスの性能劣化を引き起こす要因に関する情報）を合わせて一時記憶領域２６に記憶する。
【０１５５】
図３０（ａ）の例では、チェックルール情報「（２）索引列に関数を適用していないか？」に基づくＳＱＬ静的解析処理におけるＳＱＬ文に含まれているデータベースアクセスの性能劣化を引き起こす要因を記憶する「適用された関数」の項目が含まれ、問題テーブル判定部１６は、例えば、関数「ＳＱＲＴ」等を付加情報として一時記憶領域２６の「適用された関数」の項目に記憶する。なお、チェックルール情報「（２）索引列に関数を適用していないか？」に基づくＳＱＬ静的解析処理において該当のＳＱＬ文にデータベースアクセスの性能劣化を引き起こす要因が含まれていない場合は、「適用された関数」の項目に「関数適用なし」と記憶する。
【０１５６】
このグルーピング処理は、ＳＱＬ静的解析結果情報の全てに対して行われ、テーブル名及び列名別に複数のグルーピング別ＳＱＬ静的解析結果情報が生成され、一時記憶領域２６に記憶される。
【０１５７】
次に、問題テーブル判定部１６は、一時記憶領域２６に記憶された当該グルーピング別の各ＳＱＬ静的解析結果情報を読み込み（Ｓ１５０３）、テーブル判定ルール情報２５を用いてテーブル構造解析処理を遂行する（Ｓ１５０４）。本第２のテーブル構造解析処理では、テーブル判定チェック情報「（２）索引列に関数を適用していないか？」を判定条件として判定処理を遂行する。
【０１５８】
具体的には、問題テーブル判定部１６は、ＴＡＢＬＥ１の索引列ＶＡＬＵＥ１のグルーピングされたＳＱＬ静的解析結果情報を読み込み、図３０（ａ）に示すように、ＴＡＢＬＥ１の索引列ＶＡＬＵＥ１について、「適用された関数」の項目すべてに「関数適用なし」が含まれ、全てのＳＱＬ文において同じ索引列ＶＡＬＵＥ１に関数が適用されていないので、判定条件を満たさないと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ１のグルーピングの判定結果項目にテーブル判定結果「○」を記憶する（Ｓ１５０７）。このとき、メッセージ等は出力されない。
【０１５９】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１５０８）、読み込んでいない場合は、ステップＳ１５０３に戻る。
【０１６０】
問題テーブル判定部１６は、続いてＴＡＢＬＥ１の索引列ＶＡＬＵＥ３について、「適用された関数」の項目に関数「ＳＱＲＴ」を含むものの、「関数適用なし」も含まれており、全てのＳＱＬ文において同じ索引列ＶＡＬＵＥ３に関数が適用されていないので、判定条件を満たさないと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ３のグルーピングの判定結果項目にテーブル判定結果「○」を記憶する（Ｓ１５０７）。
【０１６１】
その後、さらに問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１５０８）、読み込んでいない場合は、ステップＳ１５０３に戻る。
【０１６２】
問題テーブル判定部１６は、続いてＴＡＢＬＥ１の索引列ＶＡＬＵＥ４について、「適用された関数」の全ての項目が関数「ＣＯＳ」を含み、全てのＳＱＬ文において同じ索引列ＶＡＬＵＥ４に関数が適用されているので、判定条件を満たすと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ４のグルーピングの判定結果項目にテーブル判定結果「×」を記憶する（Ｓ１５０５）。
【０１６３】
そして、問題テーブル判定部１６は、テーブル判定結果を結果出力部１５に出力し、結果出力部１５は、データベースアクセスの性能劣化を引き起こすテーブル構造上の要因を含む警告メッセージをディスプレイ装置１１０に表示出力する（Ｓ１５０６）。図３０（ｂ）は、警告メッセージ「ＴＡＢＬＥ１の索引列ＶＡＬＵＥ４は常に関数ＣＯＳが適用されている為、索引が利用されていません。関数索引を作成すべきです。」の出力例である。
【０１６４】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１５０８）、全てを読み込んだと判別された場合には、テーブル構造解析処理を終了する。
【０１６５】
＜第３のテーブル構造解析処理例＞
本実施形態の第３のテーブル構造解析処理は、第３のＳＱＬ静的解析処理のチェックルール情報「（３）索引列に中間一致検索、後方一致検索が行われていないか？」のＳＱＬ静的解析処理結果に対してテーブル構造解析処理を遂行する一例を示すものである。
【０１６６】
図３１に示すように、ＳＱＬ静的解析装置１００ａの問題テーブル判定部１６は、ＳＱＬ文解析部１３により解析されたチェックルール情報「（３）索引列に中間一致検索、後方一致検索が行われていないか？」のＳＱＬ静的解析結果情報が記憶されている記憶部２０ａを参照し（Ｓ１６０１）、テーブル名及び列名でＳＱＬ静的解析結果情報をグルーピングし、グルーピング別に各ＳＱＬ静的解析結果情報を一時記憶領域に記憶する（Ｓ１６０２）。
【０１６７】
図３２（ａ）は、一時記憶領域に格納されたテーブル名及び列名でのＳＱＬ静的解析結果情報のグルーピング例であり、ＳＱＬ  ＩＤに関係なく、チェックルール情報「（３）索引列に中間一致検索、後方一致検索が行われていないか？」のＳＱＬ静的解析結果情報を用いてテーブル名及び列名でグループ化する。
【０１６８】
このとき、問題テーブル判定部１６は、図２４及び図２５に示したＳＱＬ静的解析結果情報に含まれる付加情報を（定義情報に合致し、ＳＱＬ文に含まれているデータベースアクセスの性能劣化を引き起こす要因に関する情報）を合わせて一時記憶領域２６に記憶する。
【０１６９】
図３２（ａ）の例では、チェックルール情報「（３）索引列に中間一致検索、後方一致検索が行われていないか？」に基づくＳＱＬ静的解析処理におけるＳＱＬ文に含まれているデータベースアクセスの性能劣化を引き起こす要因を記憶する「一致条件」の項目が含まれ、問題テーブル判定部１６は、例えば、「中間一致条件」等を付加情報として一時記憶領域２６の「一致条件」の項目に記憶する。なお、チェックルール情報「（３）索引列に中間一致検索、後方一致検索が行われていないか？」に基づくＳＱＬ静的解析処理において該当のＳＱＬ文にデータベースアクセスの性能劣化を引き起こす要因が含まれていない場合は、「一致条件」の項目に「一致条件なし」と記憶する。
【０１７０】
このグルーピング処理は、ＳＱＬ静的解析結果情報の全てに対して行われ、テーブル名及び列名別に複数のグルーピング別ＳＱＬ静的解析結果情報が生成され、一時記憶領域２６に記憶される。
【０１７１】
次に、問題テーブル判定部１６は、一時記憶領域２６に記憶された当該グルーピング別の各ＳＱＬ静的解析結果情報を読み込み（Ｓ１６０３）、テーブル判定ルール情報２５を用いてテーブル構造解析処理を遂行する（Ｓ１６０４）。本第３のテーブル構造解析処理では、テーブル判定チェック情報「（３）ある索引列がすべてのＳＱＬで中間一致検索又は、後方一致検索が用いられているか？」を判定条件として判定処理を遂行する。
【０１７２】
具体的には、問題テーブル判定部１６は、ＴＡＢＬＥ１の索引列ＶＡＬＵＥ１のグルーピングされたＳＱＬ静的解析結果情報を読み込み、図３２（ａ）に示すように、ＴＡＢＬＥ１の索引列ＶＡＬＵＥ１について、「一致条件」の項目すべてに「一致条件なし」が含まれ、全てのＳＱＬ文において同じ索引列ＶＡＬＵＥ１に中間一致検索又は後方一致検索が用いられていないので、判定条件を満たさないと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ１のグルーピングの判定結果項目にテーブル判定結果「○」を記憶する（Ｓ１６０７）。このとき、メッセージ等は出力されない。
【０１７３】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１６０８）、読み込んでいない場合は、ステップＳ１６０３に戻る。
【０１７４】
問題テーブル判定部１６は、続いてＴＡＢＬＥ１の索引列ＶＡＬＵＥ５について、「一致条件」の項目に「中間一致条件」等を含むものの、「一致条件なし」も含まれており、全てのＳＱＬ文において同じ索引列ＶＡＬＵＥ５に中間一致検索又は後方一致検索が用いられていないので、判定条件を満たさないと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ５のグルーピングの判定結果項目にテーブル判定結果「○」を記憶する（Ｓ１６０７）。
【０１７５】
その後、さらに問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１６０８）、読み込んでいない場合は、ステップＳ１６０３に戻る。
【０１７６】
問題テーブル判定部１６は、続いてＴＡＢＬＥ１の索引列ＶＡＬＵＥ６について、「一致条件」の全ての項目が「後方一致条件」を含み、全てのＳＱＬ文において同じ索引列ＶＡＬＵＥ６に後方一致検索が用いられているので、判定条件を満たすと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ６のグルーピングの判定結果項目にテーブル判定結果「×」を記憶する（Ｓ１６０５）。
【０１７７】
そして、問題テーブル判定部１６は、テーブル判定結果を結果出力部１５に出力し、結果出力部１５は、データベースアクセスの性能劣化を引き起こすテーブル構造上の要因を含む警告メッセージをディスプレイ装置１１０に表示出力する（Ｓ１６０６）。図３２（ｂ）は、警告メッセージ「ＴＡＢＬＥ１の索引列ＶＡＬＵＥ６は常に後方一致条件が用いられているため、索引が利用されていません。ＶＡＬＵＥ６の値を接尾辞と分割すべきです。」の出力例である。
【０１７８】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１６０８）、全てを読み込んだと判別された場合には、テーブル構造解析処理を終了する。
【０１７９】
＜第４のテーブル構造解析処理例＞
本実施形態の第４のテーブル構造解析処理は、第５のＳＱＬ静的解析処理のチェックルール情報「（５）索引列にＮＵＬＬ条件が使われていないか？」のＳＱＬ静的解析処理結果に対してテーブル構造解析処理を遂行する一例を示すものである。
【０１８０】
図３３に示すように、ＳＱＬ静的解析装置１００ａの問題テーブル判定部１６は、ＳＱＬ文解析部１３により解析されたチェックルール情報「（５）索引列にＮＵＬＬ条件が使われていないか？」のＳＱＬ静的解析結果情報が記憶されている記憶部２０ａを参照し（Ｓ１７０１）、テーブル名及び列名でＳＱＬ静的解析結果情報をグルーピングし、グルーピング別に各ＳＱＬ静的解析結果情報を一時記憶領域２６に記憶する（Ｓ１７０２）。
【０１８１】
図３４（ａ）は、一時記憶領域に格納されたテーブル名及び列名でのＳＱＬ静的解析結果情報のグルーピング例であり、ＳＱＬ  ＩＤに関係なく、チェックルール情報「（５）索引列にＮＵＬＬ条件が使われていないか？」のＳＱＬ静的解析結果情報を用いてテーブル名及び列名でグループ化する。
【０１８２】
このとき、問題テーブル判定部１６は、図２４及び図２５に示したＳＱＬ静的解析結果情報に含まれる付加情報を（定義情報に合致し、ＳＱＬ文に含まれているデータベースアクセスの性能劣化を引き起こす要因）を合わせて一時記憶領域２６に記憶する。
【０１８３】
図３４（ａ）の例では、チェックルール情報「（５）索引列にＮＵＬＬ条件が使われていないか？」に基づくＳＱＬ静的解析処理におけるＳＱＬ文に含まれているデータベースアクセスの性能劣化を引き起こす要因を記憶する「ＮＵＬＬ条件」の項目が含まれ、問題テーブル判定部１６は、例えば、「ＮＵＬＬ条件あり」等を付加情報として一時記憶領域２６の「ＮＵＬＬ条件」の項目に記憶する。なお、チェックルール情報「（５）索引列にＮＵＬＬ条件が使われていないか？」に基づくＳＱＬ静的解析処理において該当のＳＱＬ文にデータベースアクセスの性能劣化を引き起こす要因が含まれていない場合は、「ＮＵＬＬ条件」の項目に「ＮＵＬＬ条件なし」と記憶する。
【０１８４】
このグルーピング処理は、ＳＱＬ静的解析結果情報の全てに対して行われ、テーブル名及び列名別に複数のグルーピング別ＳＱＬ静的解析結果情報が生成され、一時記憶領域２６に記憶される。
【０１８５】
次に、問題テーブル判定部１６は、一時記憶領域２６に記憶された当該グルーピング別の各ＳＱＬ静的解析結果情報を読み込み（Ｓ１７０３）、テーブル判定ルール情報２５を用いてテーブル構造解析処理を遂行する（Ｓ１７０４）。本第４のテーブル構造解析処理では、テーブル判定チェック情報「（４）ある索引列にＮＵＬＬ条件が用いられているか？」を判定条件として判定処理を遂行する。
【０１８６】
具体的には、問題テーブル判定部１６は、ＴＡＢＬＥ１の索引列ＶＡＬＵＥ１のグルーピングされたＳＱＬ静的解析結果情報を読み込み、図３４（ａ）に示すように、ＴＡＢＬＥ１の索引列ＶＡＬＵＥ１について、「ＮＵＬＬ条件」の項目すべてに「ＮＵＬＬ条件なし」が含まれ、いずれかのＳＱＬ文において同じ索引列ＶＡＬＵＥ１にＮＵＬＬ条件が用いられていないので、判定条件を満たさないと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ１のグルーピングの判定結果項目にテーブル判定結果「○」を記憶する（Ｓ１７０７）。このとき、メッセージ等は出力されない。
【０１８７】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１７０８）、読み込んでいない場合は、ステップＳ１７０３に戻る。
【０１８８】
問題テーブル判定部１６は、続いてＴＡＢＬＥ１の索引列ＶＡＬＵＥ７について、「ＮＵＬＬ条件」の項目に「ＮＵＬＬ条件なし」を含むものの、「ＮＵＬＬ条件あり」も含まれており、いずれかのＳＱＬ文に同じ索引列ＶＡＬＵＥ７にＮＵＬＬ条件が用いられているので、判定条件を満たすと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ７のグルーピングの判定結果項目にテーブル判定結果「×」を記憶する（Ｓ１７０５）。
【０１８９】
そして、問題テーブル判定部１６は、テーブル判定結果を結果出力部１５に出力し、結果出力部１５は、データベースアクセスの性能劣化を引き起こすテーブル構造上の要因を含む警告メッセージをディスプレイ装置１１０に表示出力する（Ｓ１７０６）。
【０１９０】
また、その後、さらに問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１７０８）、読み込んでいない場合は、ステップＳ１７０３に戻る。
【０１９１】
問題テーブル判定部１６は、続いてＴＡＢＬＥ１の索引列ＶＡＬＵＥ８について、「ＮＵＬＬ条件」の項目全てに「ＮＵＬＬ条件あり」を含み、いずれかのＳＱＬ文に同じ索引列ＶＡＬＵＥ８にＮＵＬＬ条件が用いられているので、判定条件を満たすと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ８のグルーピングの判定結果項目にテーブル判定結果「×」を記憶する（Ｓ１７０５）。
【０１９２】
そして、問題テーブル判定部１６は、テーブル判定結果を結果出力部１５に出力し、結果出力部１５は、データベースアクセスの性能劣化を引き起こすテーブル構造上の要因を含む警告メッセージをディスプレイ装置１１０に表示出力する（Ｓ１７０６）。
【０１９３】
このとき、結果出力部１５は、同じ索引列ＶＡＬＵＥ７及び索引列ＶＡＬＵＥ８にＮＵＬＬ条件が用いられているので、これらの警告メッセージをディスプレイ装置１１０に表示出力する際、警告メッセージを個別に出力する以外にも、図３４（ｂ）に示すように、これらを統合した警告メッセージを出力することができる。図３４（ｂ）は、警告メッセージ「ＴＡＢＬＥ１の索引列ＶＡＬＵＥ７とＶＡＬＵＥ８はＮＵＬＬ条件が用いられているため、索引が利用されないＳＱＬがあります。デフォルト値を設定して、ＮＯＴ  ＮＵＬＬ制約を課すなどの対策が必要です。」の出力例である。
【０１９４】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１７０８）、全てを読み込んだと判別された場合には、テーブル構造解析処理を終了する。
【０１９５】
＜第５のテーブル構造解析処理例＞
本実施形態の第５のテーブル構造解析処理は、第７のＳＱＬ静的解析処理のチェックルール情報「（７）複合索引を利用する場合。途中の列を飛ばしていないか？」のＳＱＬ静的解析処理結果に対してテーブル構造解析処理を遂行する一例を示すものである。
【０１９６】
図３５に示すように、ＳＱＬ静的解析装置１００ａの問題テーブル判定部１６は、ＳＱＬ文解析部１３により解析されたチェックルール情報「（７）複合索引を利用する場合。途中の列を飛ばしていないか？」のＳＱＬ静的解析結果情報が記憶されている記憶部２０ａを参照し（Ｓ１８０１）、ＳＱＬ  ＩＤ及びテーブル名でＳＱＬ静的解析結果情報をグルーピングし、グルーピング別に各ＳＱＬ静的解析結果情報を一時記憶領域に記憶する（Ｓ１８０２）。
【０１９７】
図３６（ａ）は、一時記憶領域に格納されたＳＱＬ  ＩＤ及びテーブル名でのＳＱＬ静的解析結果情報のグルーピング例であり、チェックルール情報「（７）複合索引を利用する場合。途中の列を飛ばしていないか？」のＳＱＬ静的解析結果情報を用いてＳＱＬ  ＩＤ及びテーブル名でグループ化する。
【０１９８】
このとき、問題テーブル判定部１６は、ＳＱＬ  ＩＤ別に各テーブルの複合索引の列名を合わせて一時記憶領域２６に記憶する。
【０１９９】
図３６（ａ）の例では、チェックルール情報「（７）複合索引を利用する場合。途中の列を飛ばしていないか？」に基づくＳＱＬ静的解析処理におけるＳＱＬ文に含まれている各列名を記憶する「列名」の項目が含まれ、問題テーブル判定部１６は、例えば、ＳＱＬ  ＩＤ別に含まれる列名「ＶＡＬＵＥ１，ＶＡＬＵＥ３」をＳＱＬ文における配列順に付加情報として一時記憶領域２６の「列名」の項目に記憶する。
【０２００】
このグルーピング処理は、ＳＱＬ静的解析結果情報の全てに対して行われ、ＳＱＬ  ＩＤ及びテーブル名別に複数のグルーピング別ＳＱＬ静的解析結果情報が生成され、一時記憶領域２６に記憶される。
【０２０１】
次に、問題テーブル判定部１６は、一時記憶領域２６に記憶された当該グルーピング別の各ＳＱＬ静的解析結果情報を読み込み（Ｓ１８０３）、テーブル判定ルール情報２５を用いてテーブル構造解析処理を遂行する（Ｓ１８０４）。本第５のテーブル構造解析処理では、テーブル判定チェック情報「（５）ある複合索引が利用されるときすべてのＳＱＬで同じ途中の列を飛ばして利用されているか？」を判定条件として判定処理を遂行する。
【０２０２】
具体的には、問題テーブル判定部１６は、ＳＱＬ  ＩＤが「６」のＳＱＬ静的解析結果情報を読み込み、図３６（ａ）に示すように、ＴＡＢＬＥ２の索引列ＶＡＬＵＥ１，ＶＡＬＵＥ３について複合索引が利用されており（図２１（ｂ）参照）、当該ＳＱＬ文で途中の索引列ＶＡＬＵＥ２を飛ばして利用している。このような判定処理をＴＡＢＬＥ２に関してＳＱＬ  ＩＤが「７」及び「８」について遂行すると、ＳＱＬ  ＩＤが「７」及び「８」においても、ＴＡＢＬＥ２の索引列ＶＡＬＵＥ１，ＶＡＬＵＥ３について複合索引が利用されており（図２１（ｂ）参照）、ＳＱＬ文内で途中の索引列ＶＡＬＵＥ２を飛ばして利用している。
【０２０３】
このとき、問題テーブル判定部１６は、ＴＡＢＬＥ２に関し、ＳＱＬ  ＩＤが「６」、「７」及び「８」の全てのＳＱＬ文で同じ途中の列（索引列ＶＡＬＵＥ２）を飛ばして利用されていると判別し、判定条件を満たすと判別する。そして、一時記憶領域２６のＳＱＬ  ＩＤが「６」、「７」及び「８」のＴＡＢＬＥ２に関し、グルーピングの判定結果項目にテーブル判定結果「×」を記憶する（Ｓ１８０５）。
【０２０４】
そして、問題テーブル判定部１６は、テーブル判定結果を結果出力部１５に出力し、結果出力部１５は、データベースアクセスの性能劣化を引き起こすテーブル構造上の要因を含む警告メッセージをディスプレイ装置１１０に表示出力する（Ｓ１８０６）。図３６（ｂ）は、警告メッセージ「ＴＡＢＬＥ２の複合索引（ＶＡＬＵＥ１，  ＶＡＬＵＥ２，  ＶＡＬＵＥ３）は常にＶＡＬＵＥ２を飛ばして指定されている為、索引が充分に利用されません。複合索引を（ＶＡＬＵＥ１，  ＶＡＬＵＥ３）に変更すべきです。」の出力例である。
【０２０５】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析結果情報を全て読み込みだか否かを判別し（Ｓ１８０８）、読み込んでいない場合は、ステップＳ１８０３に戻る。
【０２０６】
問題テーブル判定部１６は、続いてＳＱＬ  ＩＤが「９」のＳＱＬ静的解析結果情報を読み込み、図３６（ａ）に示すように、ＴＡＢＬＥ３の索引列ＶＡＬＵＥ１，ＶＡＬＵＥ２，ＶＡＬＵＥ３について複合索引が利用されており（図２１（ｃ）参照）、当該ＳＱＬ文で途中の索引列ＶＡＬＵＥ２を飛ばして利用していない。このような判定処理をＴＡＢＬＥ３に関してＳＱＬ  ＩＤが「１０」について遂行すると、ＳＱＬ  ＩＤが「１０」においては、ＴＡＢＬＥ３の索引列ＶＡＬＵＥ１，ＶＡＬＵＥ３について複合索引が利用されており（図２１（ｂ）参照）、ＳＱＬ文内で途中の索引列ＶＡＬＵＥ２を飛ばして利用している。
【０２０７】
このとき、問題テーブル判定部１６は、ＴＡＢＬＥ３に関し、ＳＱＬ  ＩＤが「９」のＳＱＬ文では途中の列（索引列ＶＡＬＵＥ２）が飛ばして利用されておらず、かつＳＱＬ  ＩＤが「１０」のＳＱＬ文では途中の列（索引列ＶＡＬＵＥ２）が飛ばして利用されているので、判定条件を満たさないと判別する。そして、一時記憶領域２６のＳＱＬ  ＩＤが「９」及び「１０」のＴＡＢＬＥ３に関し、グルーピングの判定結果項目にテーブル判定結果「○」を記憶する（Ｓ１８０７）。
【０２０８】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１８０８）、全てを読み込んだと判別された場合には、テーブル構造解析処理を終了する。
【０２０９】
＜第６のテーブル構造解析処理例＞
本実施形態の第６のテーブル構造解析処理は、第８のＳＱＬ静的解析処理のチェックルール情報「（８）暗黙の型変換が行われていないか？」のＳＱＬ静的解析処理結果に対してテーブル構造解析処理を遂行する一例を示すものである。
【０２１０】
図３７に示すように、ＳＱＬ静的解析装置１００ａの問題テーブル判定部１６は、ＳＱＬ文解析部１３により解析されたチェックルール情報「（８）暗黙の型変換が行われていないか？」のＳＱＬ静的解析結果情報が記憶されている記憶部２０ａを参照し（Ｓ１９０１）、テーブル名及び列名でＳＱＬ静的解析結果情報をグルーピングし、グルーピング別に各ＳＱＬ静的解析結果情報を一時記憶領域に記憶する（Ｓ１９０２）。
【０２１１】
図３８（ａ）は、一時記憶領域に格納されたテーブル名及び列名でのＳＱＬ静的解析結果情報のグルーピング例であり、ＳＱＬ  ＩＤに関係なく、チェックルール情報「（８）暗黙の型変換が行われていないか？」のＳＱＬ静的解析結果情報を用いてテーブル名及び列名でグループ化する。
【０２１２】
このとき、問題テーブル判定部１６は、図２４及び図２５に示したＳＱＬ静的解析結果情報に含まれる付加情報を（定義情報に合致し、ＳＱＬ文に含まれているデータベースアクセスの性能劣化を引き起こす要因）を合わせて一時記憶領域２６に記憶する。
【０２１３】
図３８（ａ）の例では、チェックルール情報「（８）暗黙の型変換が行われていないか？」に基づくＳＱＬ静的解析処理におけるＳＱＬ文に含まれているデータベースアクセスの性能劣化を引き起こす要因を記憶する「型」及び「変換」項目が含まれ、問題テーブル判定部１６は、例えば、「ＶＡＲＣＨＡＲ２」及び「ＮＵＭＢＥＲ」等を付加情報として一時記憶領域２６の「型」及び「変換」の項目に記憶する。なお、チェックルール情報「（８）暗黙の型変換が行われていないか？」に基づくＳＱＬ静的解析処理において該当のＳＱＬ文にデータベースアクセスの性能劣化を引き起こす要因が含まれていない場合は、「変換」の項目に「変換なし」と記憶する。
【０２１４】
このグルーピング処理は、ＳＱＬ静的解析結果情報の全てに対して行われ、テーブル名及び列名別に複数のグルーピング別ＳＱＬ静的解析結果情報が生成され、一時記憶領域２６に記憶される。
【０２１５】
次に、問題テーブル判定部１６は、一時記憶領域２６に記憶された当該グルーピング別の各ＳＱＬ静的解析結果情報を読み込み（Ｓ１９０３）、テーブル判定ルール情報２５を用いてテーブル構造解析処理を遂行する（Ｓ１９０４）。本第６のテーブル構造解析処理では、テーブル判定チェック情報「（６）ある索引列が、常に同じ型に暗黙の型変換をされていないか？」を判定条件として判定処理を遂行する。
【０２１６】
具体的には、問題テーブル判定部１６は、ＴＡＢＬＥ１の索引列ＶＡＬＵＥ１のグルーピングされたＳＱＬ静的解析結果情報を読み込み、図３８（ａ）に示すように、ＴＡＢＬＥ１の索引列ＶＡＬＵＥ１について、「変換」の項目すべてに「変換なし」が含まれ、索引列ＶＡＬＵＥ１が、同じ型に常に暗黙の型変換をされていないので、判定条件を満たさないと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ１のグルーピングの判定結果項目にテーブル判定結果「○」を記憶する（Ｓ１９０７）。このとき、メッセージ等は出力されない。
【０２１７】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１９０８）、読み込んでいない場合は、ステップＳ１９０３に戻る。
【０２１８】
問題テーブル判定部１６は、続いてＴＡＢＬＥ１の索引列ＶＡＬＵＥ９について、「変換」の項目に「変換あり」等を含むものの、「変換なし」も含まれており、全てのＳＱＬ文において同じ索引列ＶＡＬＵＥ９に常に同じ型に暗黙の型変換をされていないので、判定条件を満たさないと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ９のグルーピングの判定結果項目にテーブル判定結果「○」を記憶する（Ｓ１９０７）。
【０２１９】
その後、さらに問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１９０８）、読み込んでいない場合は、ステップＳ１９０３に戻る。
【０２２０】
問題テーブル判定部１６は、続いてＴＡＢＬＥ１の索引列ＶＡＬＵＥ１０について、「変換」の全ての項目が「ＮＵＭＢＥＲ」を含み、全てのＳＱＬ文において同じ索引列ＶＡＬＵＥ１０に常に同じ型に暗黙の型変換がされているので、判定条件を満たすと判別し、一時記憶領域２６のＴＡＢＬＥ１の索引列ＶＡＬＵＥ１０のグルーピングの判定結果項目にテーブル判定結果「×」を記憶する（Ｓ１９０５）。
【０２２１】
そして、問題テーブル判定部１６は、テーブル判定結果を結果出力部１５に出力し、結果出力部１５は、データベースアクセスの性能劣化を引き起こすテーブル構造上の要因を含む警告メッセージをディスプレイ装置１１０に表示出力する（Ｓ１９０６）。図３８（ｂ）は、警告メッセージ「ＴＡＢＬＥ１のＶＡＬＵＥ１０カラムは常にＶＡＲＣＨＡＲ２型からＮＵＭＢＥＲ型に暗黙の型変換をしているため、オーバーヘッドが生じます。ＶＡＬＵＥ１０の型をＮＵＭＢＥＲ型に変更すべきです。」の出力例である。
【０２２２】
その後、問題テーブル判定部１６は、グルーピング別の各ＳＱＬ静的解析処理結果情報を全て読み込みだか否かを判別し（Ｓ１９０８）、全てを読み込んだと判別された場合には、テーブル構造解析処理を終了する。
【０２２３】
このように、本実施形態のＳＱＬ静的解析装置１００ａは、複数のＳＱＬ文に跨るデータベースアクセスの性能劣化を解析し、ＳＱＬ静的解析処理を通じてデータベースアクセスの性能改善に寄与するデータベースのテーブル構造解析機能を実現することができる。
【０２２４】
すなわち、ＳＱＬ文の対象となるデータベース構造を、入力されるＳＱＬ文全体から解析し、個々のＳＱＬ文の解析では分析・評価できなかったデータベースのテーブル構造が有するデータベースアクセスの性能劣化を引き起こす要因（問題）を分析・評価することが可能となる。
【０２２５】
さらには、データベースが存在しない環境下や、ネットワークにつながっていない環境下でもデータベースアクセスの性能劣化を引き起こす要因（問題）を、複数のＳＱＬ文に跨るデータベースアクセスの性能劣化を解析するＳＱＬ静的解析処理を通じて分析・評価することができるので、データベースの構成やデータ量に影響を受けることなく、開発工程の早い段階でデータベースにおけるテーブル構造の問題点を早期に分析・評価することができる。このため、データベースのチューニング（調整）に要する負担を軽減でき、開発工程の工数を低減させることができる。
【０２２６】
なお、本実施形態では、上述した第１から第６のテーブル構造解析処理を個別に説明したが、これに限らず、例えば、ＳＱＬ静的解析結果情報に基づいて、第１から第６のテーブル構造解析処理を複合的に行うことも可能であり、全ての第１から第６のテーブル構造解析処理又は第１から第６のテーブル構造解析処理から任意に抽出した複数のテーブル構造解析処理を複合的に行うことができ、また、各第１から第６のテーブル構造解析処理を単体で行うことも可能である。
【０２２７】
また、テーブル判定ルール情報として６個の定義情報を例示したが、この例示は、テーブル構造がデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいるかを、分析・評価するために必要とされる最低限の定義情報であり、６個の定義情報以外にテーブル構造がデータベースアクセスの性能劣化を引き起こす要因（問題）を含んでいると分析・評価することができる定義情報をさらに含むこともできる。
【０２２８】
また、上述した第１から第６のテーブル構造解析処理の変形例として、例えば、テーブル判定ルール情報の各定義情報（判定処理）において、予定の閾値を設けることもできる。第２のテーブル構造解析処理では、「読み込んだテーブル名と列名の組み合わせに適用された関数がすべて同じである。」を判定条件としていたが、「読み込んだテーブル名と列名の組み合わせに適用された関数が閾値Ｘパーセントを占めている。」というように、任意の閾値Ｘを設定した判定処理を遂行するように構成することも可能である。
【０２２９】
また、上述の第１実施形態のＳＱＬ静的解析処理及び第２実施形態のテーブル構造解析処理は、１つのＳＱＬ静的解析処理装置（ＳＱＬ静的解析プログラム）として構成することが可能である。また、第２実施形態のテーブル構造解析処理を具備するＳＱＬ静的解析装置１００ａは、データベース構造チェック装置（データベース構造チェックプログラム）として、第１実施形態のＳＱＬ静的解析装置１００と独立した装置として実現することも可能である。
【０２３０】
以上が本発明に係る各実施形態の説明であるが、上記の各実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク（フロッピー（登録商標）ディスク、ハードディスクなど）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤなど）、光磁気ディスク（ＭＯ）、半導体メモリなど、種々の記憶媒体に格納しても頒布することができる。
【０２３１】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式はいずれの形態であってもよい。
【０２３２】
そして、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているＯＳ（オペレーティングシステム）や、データベース管理ソフト、ネットワークソフト等のＭＷ（ミドルウェア）等が、上記の各実施形態を実現するための各処理の一部を実行してもよい。
【０２３３】
さらに、本発明に係る各実施形態における記憶媒体は、コンピュータと独立した媒体に限らず、ＬＡＮやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【０２３４】
また、記憶媒体は１つに限らず、複数の媒体から上記実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であってもよい。
【０２３５】
なお、本発明に係る各実施形態におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記実施形態における各処理を実行するものであって、パソコン等の１つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であってもよい。
【０２３６】
また、このコンピュータは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称しているものである。
【０２３７】
加えて、本発明は、上記の各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。そして、上記の各実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜に組合せてもよい。
【符号の説明】
【０２３８】
１００，１００ａ  ＳＱＬ静的解析装置
１０  制御部
１１    データ入力制御部
１２    ＳＱＬ文パース処理部
１３    ＳＱＬ文解析部
１４    結果出力部
１５    テーブル情報構築部
１６    問題テーブル判定部
２０  記憶部
２１    ＳＱＬ文
２２    テーブル情報
２３    チェックルール情報
２４    ＳＱＬ静的解析結果
２５    テーブル判定ルール情報
２６    一時記憶部
３０  通信制御部
１１０  ディスプレイ装置
１２０  操作入力装置
【図１】
2011008781.tif 000003
【図２】
2011008781.tif 000004
【図３】
2011008781.tif 000005
【図４】
2011008781.tif 000006
【図５】
2011008781.tif 000007
【図６】
2011008781.tif 000008
【図７】
2011008781.tif 000009
【図８】
2011008781.tif 000010
【図９】
2011008781.tif 000011
【図１０】
2011008781.tif 000012
【図１１】
2011008781.tif 000013
【図１２】
2011008781.tif 000014
【図１３】
2011008781.tif 000015
【図１４】
2011008781.tif 000016
【図１５】
2011008781.tif 000017
【図１６】
2011008781.tif 000018
【図１７】
2011008781.tif 000019
【図１８】
2011008781.tif 000020
【図１９】
2011008781.tif 000021
【図２０】
2011008781.tif 000022
【図２１】
2011008781.tif 000023
【図２２】
2011008781.tif 000024
【図２３】
2011008781.tif 000025
【図２４】
2011008781.tif 000026
【図２５】
2011008781.tif 000027
【図２６】
2011008781.tif 000028
【図２７】
2011008781.tif 000029
【図２８】
2011008781.tif 000030
【図２９】
2011008781.tif 000031
【図３０】
2011008781.tif 000032
【図３１】
2011008781.tif 000033
【図３２】
2011008781.tif 000034
【図３３】
2011008781.tif 000035
【図３４】
2011008781.tif 000036
【図３５】
2011008781.tif 000037
【図３６】
2011008781.tif 000038
【図３７】
2011008781.tif 000039
【図３８】
2011008781.tif 000040