测量已排序和未排序表的READ操作的性能

Pen*_*ful 0 sorting sap abap

我想比较READ排序后的内部表和标准内部表的性能。根据理论,对排序表进行的CRUD操作必须始终比对未排序表进行的操作更快。

问题是我的程序无法正常工作,似乎首先执行的任何测试都显示出更好的结果-在下面的代码中,我READ首先测试排序表。之后,我测试了未排序的表,令人惊讶的是,READ对未排序的表的操作表现更好。

为什么?我想念什么?

DATA: BEGIN OF was,
        id TYPE i,
        tel TYPE i,
      END OF was,

      tabst LIKE STANDARD TABLE OF was
            with header line,

      tabso LIKE SORTED TABLE OF was
            WITH UNIQUE KEY id tel,

      X TYPE I VALUE 100,

      TA1 TYPE timestampl, TA2 TYPE timestampl,
      TB1 TYPE timestampl, TB2 TYPE timestampl,
      TA TYPE timestampl, TB TYPE timestampl,
      N TYPE I VALUE 1000.

DO X TIMES.
  was-id = sy-index - 1.
  was-tel = sy-index * 2.
  APPEND was TO tabst.
  INSERT was INTO TABLE tabso.
ENDDO.

*Testing performance while
*reading sorted internal table
GET TIME STAMP FIELD TB1.

  DO X TIMES.
    READ TABLE tabso INDEX sy-index INTO was.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
  ENDDO.

GET TIME STAMP FIELD TB2.
TB = TB2 - TB1.

*Testing performance while
*reading unsorted internal table
GET TIME STAMP FIELD TA1.

  DO X TIMES.
    READ TABLE tabst INDEX sy-index INTO was.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
  ENDDO.

GET TIME STAMP FIELD TA2.
TA = TA2 - TA1.

WRITE: 'TA (unsorted) = ', TA.
WRITE: / .
WRITE: 'TB (sorted) = ', TB.
WRITE: / .
WRITE: 'SORTED tabso'.
WRITE: / .
LOOP AT tabso INTO was.
  WRITE: / was-id, was-tel.
ENDLOOP.
WRITE: / .
WRITE: 'UNSORTED tabst'.
WRITE: / .
LOOP AT tabst INTO was.
  WRITE: / was-id, was-tel.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)

San*_*ssi 6

为了衡量性能,SAP提出了许多内置测试。

运行程序RSHOWTIM(也可以通过SE38 / SE80事务菜单获得)。

您要测量的是以下一种:线性搜索(24 ms)与二进制搜索(1 ms)。

在此处输入图片说明


mky*_*oft 5

您正在尝试读取两个索引号为(sy-index)的表。因此,READ命令仅按索引获取记录。您需要尝试使用WHERE条件。同样,100条记录不足以进行测试。

READ TABLE tabso WITH TABLE KEY id = sy-index tel = sy-index INTO was.
READ TABLE tabst WITH KEY id = sy-index tel = sy-index INTO was.
Run Code Online (Sandbox Code Playgroud)