几种ABAP内表访问性能比较

71 阅读1分钟
REPORT  Z_ABAP_JERRY.

PARAMETERS entries TYPE i DEFAULT 100.

DATA:
      itab_standard TYPE STANDARD TABLE OF i WITH KEY table_line,
      itab_sorted TYPE SORTED TABLE OF i WITH UNIQUE KEY table_line,
      itab_hashed TYPE HASHED TABLE OF i WITH UNIQUE KEY table_line.

DATA:
      t1 TYPE i,
      t2 TYPE i.


*Fill tables
WRITE: / 'Fill tables'.

GET RUN TIME FIELD t1.
DO entries TIMES.
  APPEND sy-index TO itab_standard.
ENDDO.
GET RUN TIME FIELD t2.
t2 = t2 - t1.
WRITE: / 'Runtime consumed by standard table is', t2.

"sort itab_standard.
"DELETE ADJACENT DUPLICATES FROM ...

GET RUN TIME FIELD t1.
DO entries TIMES.
  INSERT sy-index INTO TABLE itab_sorted.
ENDDO.
GET RUN TIME FIELD t2.
t2 = t2 - t1.
WRITE: / 'Runtime consumed by sorted table is', t2.

GET RUN TIME FIELD t1.
DO entries TIMES.
  insert sy-index into table itab_hashed.
ENDDO.
GET RUN TIME FIELD t2.
t2 = t2 - t1.
WRITE: / 'Runtime consumed by hashed table is', t2.

*Read with key
WRITE: /.
WRITE: / 'Read tables with key'.

GET RUN TIME FIELD t1.
DO entries TIMES.
  READ TABLE itab_standard WITH TABLE KEY table_line = sy-index TRANSPORTING NO FIELDS.
  "sy-subrc
ENDDO.
GET RUN TIME FIELD t2.
t2 = t2 - t1.
WRITE: / 'Runtime consumed by standard table is', t2.

GET RUN TIME FIELD t1.
DO entries TIMES.
  READ TABLE itab_sorted WITH TABLE KEY table_line = sy-index TRANSPORTING NO FIELDS.
ENDDO.
GET RUN TIME FIELD t2.
t2 = t2 - t1.
WRITE: / 'Runtime consumed by sorted table is', t2.

GET RUN TIME FIELD t1.
DO entries TIMES.
  READ TABLE itab_hashed WITH TABLE KEY table_line = sy-index TRANSPORTING NO FIELDS.
ENDDO.
GET RUN TIME FIELD t2.
t2 = t2 - t1.
WRITE: / 'Runtime consumed by hashed table is', t2.

*Read with index
WRITE: /.
WRITE: / 'Read tables with index'.

GET RUN TIME FIELD t1.
DO entries TIMES.
  READ TABLE itab_standard INDEX sy-index TRANSPORTING NO FIELDS.
ENDDO.
GET RUN TIME FIELD t2.
t2 = t2 - t1.
WRITE: / 'Runtime consumed by standard table is', t2.

GET RUN TIME FIELD t1.
DO entries TIMES.
  READ TABLE itab_sorted INDEX sy-index TRANSPORTING NO FIELDS.
ENDDO.
GET RUN TIME FIELD t2.
t2 = t2 - t1.
WRITE: / 'Runtime consumed by sorted table is', t2.