二分查找测试 查询的索引行号

博客围绕以订单号加物料号作为查询 key 进行二分查询展开。调试发现二分查询的行号索引与普通查询一致,且二分查询并非单纯从中间取数,可能先从中间查并扩展两边,最后经其他处理保证取到首条符合条件的行号索引,换情况查询结果相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据订单号加物料号 作为查询key

二分查询数据为下

  DATA lv_index TYPE int4.
  DATA lv_index2 TYPE i.
  DATA lv_index3 TYPE int4.
  DATA lv_index4 TYPE i.
  REFRESH lt_resb.
  SORT gt_resb BY aufnr matnr.
  lt_resb = gt_resb.
  DELETE ADJACENT DUPLICATES FROM lt_resb COMPARING aufnr matnr.

  CLEAR:lv_index,lv_index2,lv_index3,lv_index4.
  "二分查
  LOOP AT lt_resb ASSIGNING FIELD-SYMBOL(<fs_resb>).

    READ TABLE gt_resb INTO gs_resb WITH KEY aufnr = <fs_resb>-aufnr
                                             matnr = <fs_resb>-matnr
                                             BINARY SEARCH.
    IF sy-subrc = 0.
      IF lv_index = 0.
        lv_index = sy-tabix.  "第一次查找
      ELSE.
        lv_index2 = sy-tabix. "第二次查找
      ENDIF.
    ENDIF.

  ENDLOOP.
  "非二分查
  LOOP AT lt_resb ASSIGNING <fs_resb>.

    READ TABLE gt_resb INTO gs_resb WITH KEY aufnr = <fs_resb>-aufnr
                                             matnr = <fs_resb>-matnr
                                              .
    IF sy-subrc = 0.
      IF lv_index3 = 0.
        lv_index3 = sy-tabix.  "第一次查找
      ELSE.
        lv_index4 = sy-tabix. "第二次查找
      ENDIF.
    ENDIF.

  ENDLOOP.

 

 根据调试结果 可以发现 二分查询的行号索引 和普通查询的行号索引 一致 

二分查询可能并不是单纯从中间取数

可能刚开始查数 从中间查扩展两边查询 但最后也做了其他处理 保证查询时 取到第一条符合条件的行号索引

 

换下另一种情况查询数据 

 

结果一致 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值