RPG

28.大量バッチ処理の RPG の速度をあげるには?

大量のデータ更新を RPG で行なう場合、数時間もかかる処理を数分の一に
短縮できる方法はあるだろうか?
ここではその1つの例として、CHAIN命令を LOKUPに置き換える手法を示す。
CHAINでアクセスしている担当者マスター(TANTO) はせいぜい 500レコードである。
メインのファイル FILE が数十万件ある場合には、このCHAIN によるオーバーヘッドの影響は大きい。
最初に TANTOを配列に読みこんでしまって、LOKUPを使用すれば驚くほど処理時間は短縮される。

【変更前の低速なバッチPGM】
ソースコード
0001.00      H            Y/
0002.00      F********** 変更前の低速バッチPGM *****************************
0003.00      FFILE       IF  E           K        DISK
0004.00      FTANTO      IF  E           K        DISK
0005.00      F*************************************************************
0006.00      C                     DO   *HIVAL
0007.00      C                     SETOF                     50
0008.00      C                     READ FILE                     50
0009.00      C   50                LEAVE
0010.00      C           TANKEY    CHAINTANTO                90
0011.00      C*----------------------------------------------------+
0012.00      C                     UPDATFILER                      |
0013.00      C*----------------------------------------------------+
0014.00      C                     END
【変更後の高速バッチPGM】
0001.00      H            Y/
0002.00      F********** 変更後の高速バッチPGM ****************************
0003.00      FFILE    IF  E           K        DISK
0004.00      FTANTO   IF  E           K        DISK
0005.00      F****************************************************************
0006.00      E                    CDR       500  4               CODE * 500
0007.00      E                    NMR       500 20               NAME * 500
0008.00      C           1         DO   *HIVAL    N       40
0009.00      C                     READ TANTO                    50
0010.00      C   50                LEAVE
0011.00      C                     MOVE CODE      CDR,N
0012.00      C                     MOVE NAME      NMR,N
0013.00      C                     END
0014.00      C*
0015.00      C                     DO   *HIVAL
0016.00      C                     SETOF                     50
0017.00      C                     READ FILE                     50
0018.00      C                     Z-ADD1         N
0019.00      C           TANKEY    LOKUPCDR,N                    50
0020.00      C   50                MOVE NMR,N     NAME
0021.00      C   50                LEAVE
0022.00      C*----------------------------------------------------+
0023.00      C                     UPDATFILER                      |
0024.00      C*----------------------------------------------------+
0025.00      C                     END