Tips5 SQLの使い方
SQLの使い方によって、パフォーマンスを向上できます。
 
処理方法
iSeriesのSQL解析処理速度を上手に利用する
- iSeriesはV5R2以降から劇的に解析処理速度が向上しています。そのため使用されるiSeriesがV5R2以降であれば、SQLを発行することによって、パフォーマンスの向上が期待できます。
複数ファイルを使用する場合
- ファイル毎にTTableやTQueryを使用すると、iSeriesとの通信回数が多くなりパフォーマンスに負荷がかかります。その場合、複数ファイルを結合するように1つのSQLを作成します。その1つのSQLを発行すると、通信回数を減らすことができ、パフォーマンスアップにつながります。
同じSQLを繰り返し実行する場合
- TQueryコンポーネントのPrepareメソッドを実行前に呼び出すとパフォーマンスは向上します。
Prepareは、BDEとリモートデータベースサーバーに問い合わせ用のリソースを割り当て、同時に最適化を行います。
Prepareを省略した場合、TQueryのOpen時にPrepare、Closeの度にUnPrepareが発生します。同じ処理を繰り返す場合にはアプリケーションやフォームの開始時にPrepareし終了時にUnprepareすれば、TQueryをOpen、Closeしても割り当て・解放が発生しません。
ただし、実行時にSQL文を変更すると、自動的にUnprepareとPrepareが行われます。

 

 
注意点
iSeriesのバージョンがV5R1以前のバージョンをご使用の場合
- V5R2以降のiSeriesに比べてSQL解析処理能力が低くなっています。そのため、単純にすべてをSQLで発行する仕組みにせず、処理の負荷がかかる部分はバッチ処理(RPG・COBOL)で実行するなどの工夫が必要です。
複数ファイルを結合してデータを読み込む場合
- iSeriesのバージョンによってレスポンスが異なるのでご注意ください。

 

 
詳細説明

実測値のレスポンス例

前提)

Delphi/400からiSeriesに接続するプログラム例です。
一覧画面から明細を選択し、詳細画面(5250画面の5画面分の情報を1画面に集約)を表示するような場合の、SQL発行についての処理時間の実測値を計測しています。

 
処理概要)
明細DB(約150万件)をメインファイルとして使用します。その他ヘッダDBや各マスタを含め、計6ファイルを結合し、SQLを発行するプログラム実行時の、SQL処理時間を測定しました。
純粋なSQL処理にかかった時間を測定するために、SQL発行直前と発行直後の時間を10回測定し、その平均時間の算出を行っています。
 
計測対象手法と結果)
計測対象手法 結果
(単位:秒)
1 Keyを使用しないSQLを発行 59.582
2 indexを使ったSQLを発行 0.473
3 indexを使ったSQLを発行 + TClientDataSet(ローカルキャッシュ)機能使用 0.489
4 結合論理ファイル使用 0.900
5 結合論理ファイル使用 + TClientDataSet(ローカルキャッシュ)機能使用 0.192
(※ Delphi/400 Version7およびiSeries V5R3で実施)