概要
READ TABLEの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を
使用するメリットはとても大きいと思われる。
※追記
さらに大量のデータを使用してみた所、上記例はあまりよくない事が判明した。
是非内部テーブルのパフォーマンス検証:大量データをBINARY SEARCHで検索も合わせて確認してほしい。
最近のコメント