BINARYSEARCH有り無しのパフォーマンスの違い

BINARY SEARCHを使用したパフォーマンス検証を行ってみた。
この例では、BKPFが約1万件、BSEGが約3万件になるよう調整している。
また、SQLの実行に係る時間は無視する事にする。

サンプルコード:BINARY SEARCH検証

DATA: it_bkpf_ori TYPE TABLE OF bkpf,
      it_bkpf TYPE TABLE OF bkpf,
      it_bseg TYPE TABLE OF bseg,
      wa_bkpf TYPE bkpf,
      wa_bseg TYPE bseg.
 
SELECT * INTO TABLE it_bkpf_ori FROM bkpf WHERE gjahr >= '2015' AND bldat >= '20141120'.
SELECT * INTO TABLE it_bseg FROM bseg
   FOR ALL ENTRIES IN it_bkpf
  WHERE bukrs = it_bkpf-bukrs
    AND belnr = it_bkpf-belnr
    AND gjahr = it_bkpf-gjahr.
 
SORT it_bkpf BY bukrs belnr gjahr.
SORT it_bseg BY bukrs belnr gjahr.
 
***** パフォーマンス検証 *****
GET TIME.
WRITE: '開始:', sy-datum, ' ', sy-uzeit.
LOOP AT it_bseg INTO wa_bseg.
 
  READ TABLE it_bkpf INTO wa_bkpf
   WITH KEY bukrs = wa_bseg-bukrs
            belnr = wa_bseg-belnr
            gjahr = wa_bseg-gjahr
  BINARY SEARCH.
 
ENDLOOP.
GET TIME.
WRITE: /'終了:', sy-datum, ' ', sy-uzeit.
***** パフォーマンス検証 *****

  

結果


このサンプルコードのままBINARY SEARCHを使用して実行してみたところ、開始から終了の時間は1秒であった。
そして30行目のBINARY SEARCH.をコメントアウトして実行してみたところ、8秒かかった。
件数が少ない場合はそれほど差はないだろうが、数万件もの内部テーブルを検索する場合はBANARY SEARCHを
使用するメリットはとても大きいと思われる。

posted @ 2019-03-27 10:47  Park_SAP  阅读(144)  评论(0编辑  收藏  举报