zoukankan      html  css  js  c++  java
  • 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を
    使用するメリットはとても大きいと思われる。

  • 相关阅读:
    CI框架源码研读(整体架构)
    PHP微信公众号后台开发(Yii2实现)
    PHP后台支付的开发:微信支付和支付宝支付
    linux安装netcat 运行udp服务器
    运行swoole_server方法
    bind (ERROR 502): bind(0.0.0.0:9501) failed. Error: Address already in use [98] (端口被占用)
    随机生成红包算法
    获取分类算法
    PHP中的关系判断和注释
    php中自运算++ 或-- 的总结
  • 原文地址:https://www.cnblogs.com/yjyongil/p/10605949.html
Copyright © 2011-2022 走看看