zoukankan      html  css  js  c++  java
  • READ TABLE ..... BINARY SEARCH问题

      Read Table 的语法很多,这里说一种特殊情况,Read Table 中查询的时候对标准内表经常有一种二分优化查找,用Binary search的时候首先必须要有查询条件;但如果查询条件满足的项目不至一条时,这时得到的是这些数据中索引排在最前面的数据;

      如: 001   0001   20100101

             001   0001  20100103

             001    0001  20100105

    READ TABLE itab  INTO  wa  WITH KEY  col1 = '001'
                                         col2 = '0001'
                                         BINARY SEARCH.

          这时得到的是第一条,001 0001 20100101 而不是 001 0001 20100103    这好像不符合二分法查找逻辑。按结果来看,这里的机制是先去匹配了查询条件,将匹配查询条件的数据全拉出来,然后取第一条,而不是按binary search 正常机制,先将low+high / 2位置的数据与条件匹配,成功就取出来。从结果来看,ABAP的二分机制实际是没用的。  

       然后做如下测试,先不对数据排序;

      如: 001   0001   20100101

              001   0002  20100103

             001    0001  20100105

             001    0003  20100105

             001    0001  20100107

    READ TABLE itab  INTO  wa  WITH KEY  col1 = '001'
                                         col2 = '0001'
                                         BINARY SEARCH.

          得到的结果是001  0001  20100101 也是索引最低数据;

         所以最好的解释:ABAP的二分查找机制是按位置n/2,n/4、、、再一半、、、直到最后一条数据;在这个过程中得到匹配数据仍然不停止将继续二分查找,不断的用新的匹配数据去匹配旧的数据;因为新的数据索引肯定比旧的索引低;

  • 相关阅读:
    php中的多态
    面向对象的继承与组合
    PHP中的__call和__callStatic方法
    PHP中的__set和__get方法
    PHP中对象的本质
    mysql字符串查找(统计客源)
    linux查看文件大小
    mysql常用字符串操作函数大全,以及实例
    mysql滑动订单问题
    mysql列反转Pivoting
  • 原文地址:https://www.cnblogs.com/ruingy/p/3759979.html
Copyright © 2011-2022 走看看