DFU, Query, SQL

22. SQLPKG や SQLの実行を抜群のパフォーマンスに改善する。

次の SQL文を見て欲しい。

SELECT SHCODE, SHNAME, SHTANK, SHSCOD FROM QTFIL/SHOHIN   WHERE SHCODE > 1000

これは商品コード(SHCODE) が 1000以上のレコードを抽出している例である。

この 1000 という指定で動的に指定されるものとする。

そしてこの商品マスター(QTRFIL/SHOHIN) が10万レコード存在しているものとする。

SHCODE に 99800 が指定された場合は 10万レコードの最後のほうの指定なので

実行結果にはさほど時間はかからない。

しかし SHCODE に 1 が指定された場合はレコード・セットはほぼ10万レコード

用意されてしまうので、結果を得るにはそれ相当の時間を必要とする。

ところが上記の SELECT文の結果、次の画面への表示のためには、わずか10レコードだけ

必要であるものとしたらどうだろうか?

SQLPKG や SQLサーバーを自作するような場合である。

どのような開発言語を使用するとしても SQLPKG の中では

EXEC SQL PREPARE S1 FROM : SELECT SHCODE ....

と記述されるとことと思うがこの最後に OPTIMIZE パラメータを付加して

EXEC SQL PREPARE S1 FROM : SELECT SHCODE ... OPTIMIZE FOR 10 ROWS

としておけば10レコード文だけのレコード・セットしか生成されないので、ユーザーが

データ・ベースのどの位置を選択しても結果の応答は抜群に早くなる。

これは非常に効果的な手法である。

実は Enterprise Server の SQLエンジンもこの手法を使用している。

Enterprise Server の実行サンプルの「SQLスクリプト」を実行して頂ければどの位置を

指定しても良好なレスポンスを得られることを確認することができる。