 |
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で実施) |
|

|