ABAP Internal Table Performance for STANDARD, SORTED and HASHED Table



Standard Table is the most widely used table Type. It has performance drawbacks if not used properly.

Few months ago, I asked a question:

Your Preferred table kind for your ITAB

Total of 236 people has voted for the Poll.

Demo Program on ITAB Performance

Before we jump into the poll result, check out the small program and its performance result. Here I’m comparing the Performance of the READ on Internal tables – Standard VS Sorted VS Hashed VS Standard using BINARY.

Performance Comparison - ITAB TYPES
 
*&---------------------------------------------------------------------*
*& Purpose : Performance Comparison between READ on various TYPEs of
*&           internal tables
*& Author  : Naimesh Patel
*& URL     : http://zevolving.com/?p=1861
*&---------------------------------------------------------------------*
REPORT ZTEST_NP_TABLE_TYPE_PERF.
*
 
TYPES:
  BEGIN OF ty_vbpa,
    vbeln TYPE vbpa-vbeln,
    posnr TYPE vbpa-posnr,
    parvw TYPE vbpa-parvw,
    kunnr TYPE vbpa-kunnr,
  END  OF ty_vbpa.
 
DATA: t_std    TYPE STANDARD TABLE OF ty_vbpa.
DATA: t_sorted TYPE SORTED TABLE OF ty_vbpa WITH UNIQUE KEY vbeln.
DATA: t_hashed TYPE HASHED TABLE OF ty_vbpa WITH UNIQUE KEY vbeln.
 
TYPES:
  BEGIN OF ty_vbak,
    vbeln TYPE vbak-vbeln,
    found TYPE flag,
  END   OF ty_vbak.
DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.
DATA: lt_vbak TYPE STANDARD TABLE OF ty_vbak.
FIELD-SYMBOLS: <lfs_vbak> LIKE LINE OF t_vbak.
 
DATA: lv_flag TYPE flag,
      lv_sta_time TYPE timestampl,
      lv_end_time TYPE timestampl,
      lv_diff   TYPE p DECIMALS 5.
 
data: lv_num_main type i,
      lv_num_sub type i.
 
START-OF-SELECTION.
lv_num_main = 50000.            " Change for different number of records
lv_num_sub = lv_num_main / 2.
*
SELECT vbeln
  FROM vbak
  INTO TABLE t_vbak
  UP TO lv_num_main ROWS.
*
SELECT vbeln posnr parvw kunnr
  INTO TABLE t_std
  FROM vbpa
  UP TO lv_num_sub ROWS
  FOR ALL ENTRIES IN t_vbak
  WHERE vbeln = t_vbak-vbeln
  AND   parvw = 'AG'.
 
* Copying into the Sorted and Hashed table
t_sorted = t_std.
t_hashed = t_std.
*----
* READ on Standard Table
GET TIME STAMP FIELD lv_sta_time.
LOOP AT t_vbak ASSIGNING <lfs_vbak>.
  READ TABLE t_std TRANSPORTING NO FIELDS
    WITH KEY vbeln = <lfs_vbak>-vbeln.
  IF sy-subrc EQ 0.
    "..
  ENDIF.
ENDLOOP.
GET TIME STAMP FIELD lv_end_time.
lv_diff  = lv_end_time - lv_sta_time.
WRITE: /(30) 'Standard Table', lv_diff.
*
*----
* READ on Standard table with Binary Search
GET TIME STAMP FIELD lv_sta_time.
SORT t_std BY vbeln.
LOOP AT t_vbak ASSIGNING <lfs_vbak>.
  READ TABLE t_std TRANSPORTING NO FIELDS
    WITH KEY vbeln = <lfs_vbak>-vbeln
    BINARY SEARCH.
  IF sy-subrc EQ 0.
    "..
  ENDIF.
ENDLOOP.
GET TIME STAMP FIELD lv_end_time.
lv_diff  = lv_end_time - lv_sta_time.
WRITE: /(30) 'Standard Table - Binary', lv_diff.
*
*----
* READ on Sorted Table
GET TIME STAMP FIELD lv_sta_time.
LOOP AT t_vbak ASSIGNING <lfs_vbak>.
  READ TABLE t_sorted TRANSPORTING NO FIELDS
    WITH KEY vbeln = <lfs_vbak>-vbeln.
  IF sy-subrc EQ 0.
    "..
  ENDIF.
ENDLOOP.
GET TIME STAMP FIELD lv_end_time.
lv_diff  = lv_end_time - lv_sta_time.
WRITE: /(30) 'Sorted Table', lv_diff.
*
*----
* READ on HASHED table
GET TIME STAMP FIELD lv_sta_time.
LOOP AT t_vbak ASSIGNING <lfs_vbak>.
  READ TABLE t_hashed TRANSPORTING NO FIELDS
    WITH TABLE KEY vbeln = <lfs_vbak>-vbeln.
  IF sy-subrc EQ 0.
    "..
  ENDIF.
ENDLOOP.
GET TIME STAMP FIELD lv_end_time.
lv_diff  = lv_end_time - lv_sta_time.
WRITE: /(30) 'Hashed Table', lv_diff.
 
 

I ran the program multiple times for different set of records. Here are the average values based on the performance readings:

Performance_Compare_raw_data

And on Graph

Performance_Compare_graph

Yet on another graph, where Standard table readings are considered at benchmark of 100. I used average value for all other ITAB Types to show the tentative performance gain when Using another ITAB Type other than Standard Type.

Performance_Compare

Now let’s see the Poll Result

Most of the participants choose the Standard Table Type – by far Standard Table is the preferred table type.

Preferred_ITAB_Type_Poll_result

As per the above program results & graph, you should carefully decide when to use which Table Type.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值