回答箱 No.96-2:  検索速度を速める方法は?

  ◆ 質問箱 No.96  質問者:   藤原 良允  1999年05月 208号 P.29
      ◆ 質問箱 目次へ
No.96-2   検索速度を速める方法は?> 回答者
   入川 精二
1999年06月
200号 P.32
   ◆ No.96(1999 05月号)の回答-02
   検索スピードを上げる方法は幾つか考えられま丸4Gに比べると最近のマシンを使ったTPS/Winは何も仕掛けをしなくても、結構検索は早いですね。さらに早くするには、INDEXを使うのが一般的ですが・FORM入力のテーブル部の項目をキーにして検索する場合は、別の仕掛けを考えた方が良いかも知れません。
   ここで紹介するのは、「管理表」を作って、対象バインダーの中に域るデータが最初に出てくる頁番号止撮後に出てくる頁番号」を記録しておく方法です。
   FORM入力の後でこのプログラムが起動するようにしておけば、たいした時間をかけずに記録できます。 検索するときは、この「最初に出てくる頁番号(PS)」と「最後に出てくる頁番号(PE)]」を使ってその範囲だけを検索するようにします。
   プログラムの中身は4GもTpsも殆ど同じです。(久しぶりに4Gに触れてかなり戸惑いました)
        
      【4Gのプログラム】
1 <SSSS>
2 /*********************************************************/
3 /* X1 管理表の行番号 */
4 /* X2 管理表から読みとった検索開始頁番号 */
5 /* X3 テストデータバインダーの検索頁番号 */
6 /* X4 テストデータバインダーの行番号 */
7 /* V1 管理表から読みとった年月(DATE) */
8 /* V2 X4行目の@DATE列のデータの左4桁(年月) */
9 /*********************************************************/
10
11 $CHK: G;管理表/1;SB; /*スタート頁を確認 */
12 FOR X1={H} TO {T};
13 IF {X1,@PS } <>"" THEN GOTO $NEXT1;
14 LET V1={X1,@DATE };
15 IF X1={H} THEN LET X2=1 ELSE LET X2=IVAL({X1-1,@PS });
16 GOTO 書込;
17 $NEXT1: NEXT;
18 $書込: FOR X3=X2 TO BINDER("テストデーダ");
19 G;テストデータ/%X3;
20 FOR X4=H TO T;
21 LET V2=LEFT$([X4,@DATE ],4); /* 日付の左4桁 */
22 $PS: IF {@%V2 ,@PS }<>"" THEN GOTO PE;
23 LET {%V2 ,@PS }=NUM$(X3); /* スタート頁書込*/
24 $PE: LET {%V2 ,@PE }=NUM$(X3); /* エンド頁書込 */
25 NEXT;
26 NEXT;
27 SB;P;管理表/1;
28 STOP;

【TPSのプログラム】
1 <SSSS>
2 /******************************************************/
3 /* X1 管理表の行番号 */
4 /* X2 管理表から読みとった検索開始頁番号 */
5 /* X3 テストデータバインダーの検索頁番号 */
6 /* X4 テストデータバインダーの行番号 */
7 /* V1 管理表から読みとった年月 */
8 /* V2 X4行目の@DATE列のデータの左4桁(年月) */
9 /*******************************************************/
10
11 $CHK: G/S/F;管理表/1; /*スタート頁を確認*/
12 FOR X1={H} TO {T};
13 IF {X1,@PS }<>"" THEN CONTINUE;
14 LET V1={X1,@DATE };
15 IF X1={H} THEN LET X2=1 ELSE LET X2=IVAL({X1-1,@PS });
16 BREAK;
17 NEXT;
18 $書込: FOR X3=X2 TO BINDER("テストデータ");
19 G;テストデータ/%X3;
20 FOR X4=H TO T;
21 LET V2=LEFT$([X4,@DATE ],4); /*日付の左4桁*/
22 $PS: IF {@%V 2,@PS }<>"" THEN GOTO $PE;
23 LET {@%V2 ,@PS }=NUM$(X3); /*スタート頁書込*/
24 $PE: LET {@%V2 ,@PE }=NUM$(X3); /*エンド頁書込*/
25 NEXT;
26 NEXT;
27 P/S/F;管理表/1;
28 STOP;

戻る