测量已排序和未排序的 READ 操作的性能 table
Measuring performance of READ operation for sorted and unsorted table
我想比较排序内部 table 和标准内部 table 的 READ
性能。根据理论,对已排序 tables 的 CRUD 操作必须总是比对未排序 tables 的操作更快。
问题是我的程序不工作,似乎先执行哪个测试都会显示更好的结果 - 在我下面的代码中,我首先测试 READ
排序的 table。之后我测试了未排序的 table,令人惊讶的是 READ
在未排序的 table 上的操作表现得更好。
为什么会这样?我错过了什么?
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.
您正在尝试读取两个具有索引号 (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.
为了衡量性能,SAP 提出了许多内置测试。
运行 程序 RSHOWTIM
(也可通过 SE38/SE80 交易菜单获得)。
您要测量的是这个:线性搜索(24 毫秒)与二进制搜索(1 毫秒)。
我想比较排序内部 table 和标准内部 table 的 READ
性能。根据理论,对已排序 tables 的 CRUD 操作必须总是比对未排序 tables 的操作更快。
问题是我的程序不工作,似乎先执行哪个测试都会显示更好的结果 - 在我下面的代码中,我首先测试 READ
排序的 table。之后我测试了未排序的 table,令人惊讶的是 READ
在未排序的 table 上的操作表现得更好。
为什么会这样?我错过了什么?
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.
您正在尝试读取两个具有索引号 (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.
为了衡量性能,SAP 提出了许多内置测试。
运行 程序 RSHOWTIM
(也可通过 SE38/SE80 交易菜单获得)。
您要测量的是这个:线性搜索(24 毫秒)与二进制搜索(1 毫秒)。